一般的なEJBを呼び出すには、次の方法を使います。
引数なしのcreateメソッドを持つセションBeanを呼び出す場合
EJBCallFactoryクラスのcreateメソッドを使用してリモートインターフェイスを取得します。
リモートインターフェイスの目的のメソッドを呼び出します。
手順1の詳細は“20.4.2.1 EJBCallFactoryクラスからリモートインターフェイスを取得する方法”を参照してください。
以下のEJBを呼び出す場合
エンティティBean
createメソッドに引数が必要なセションBean
createメソッドの名称がcreateXxx形式のセションBean
次の手順で呼び出します。
EJBCallFactoryクラスのgetHomeメソッドを使用して、ホームインターフェイスを取得します。
ホームインターフェイスのcreateメソッドまたはファインダメソッドを使用してリモートインターフェイスを取得します。
リモートインターフェイスの目的のメソッドを呼び出します。
手順1の詳細は“20.4.2.1 EJBCallFactoryクラスからリモートインターフェイスを取得する方法”を参照してください。
なお、CMRフィールド(container-managed relationship field)を持つエンティティBeanを使用する場合など、LocalインターフェイスとLocalホームインターフェイスを使ってEJBを呼び出す場合は、EJBCallFactoryクラスを使用せず、EJBの仕様に従ってjavax.naming.InitialContextクラスを使用してLocalホームインターフェイスを取得します。
以下のように記述します。
import com.fujitsu.uji.ejb.EJBCallFactory; import com.fujitsu.uji.ext.CallFactory; public void someMethod(DispatchContext context, MyDataBean dataBean) { EJBCallFactory callFactory=(EJBCallFactory)context.getCallFactory(CallFactory.EJB); SomeSession remote=(SomeSession)callFactory.create("java:comp/env/ejb/someSessionBean"); remote.someBusinessMethod(....); ... }
ここで、SomeSessionはセションBeanのリモートインターフェイスです。EJBCallFactoryのオブジェクトはDispatchContextクラスのgetCallFactoryメソッドで取得します。EJBCallFactoryのcreateメソッドは、指定された名前のEJBのオブジェクトを作成し、そのリモートインターフェイスを返します。ここで、createの引数に与えるのはJNDIで検索する名前です。
この方法を使用する場合、EJBのホームインターフェイスには引数なしのcreateメソッドが定義されている必要があります。
EJBCallFactoryのcreateメソッドで作成されたEJBオブジェクトは、ビジネスクラスを呼び出した処理が終了するときに自動的に削除されます。詳細は“20.4.4 セションBeanオブジェクトの自動削除”を参照してください。
以下のように記述します。
import com.fujitsu.uji.ejb.EJBCallFactory; import com.fujitsu.uji.ext.CallFactory; public void someMethod(DispatchContext context, MyDataBean dataBean) { EJBCallFactory callFactory=(EJBCallFactory)context.getCallFactory(CallFactory.EJB); SomeEntityHome home=(SomeEntityHome)callFactory.getHome("java:comp/env/ejb/someSessionBean"); SomeEntity remote=home.findByPrimaryKey(...); String data=remote.getData(); ... }
ここで、SomeEntityHomeはエンティティBeanのホームインターフェイス、SomeEntityはエンティティBeanのリモートインターフェイスです。EJBCallFactoryのオブジェクトはDispatchContextクラスのgetCallFactoryメソッドで取得します。EJBCallFactoryのgetHomeメソッドは、指定された名前のEJBのホームインターフェイスを返します。getHomeの引数に与えるのはJNDIで検索する名前です。