ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド
FUJITSU Software

20.4.2 一般的なEJBの呼び出し

一般的なEJBを呼び出すには、次の方法を使います。

なお、CMRフィールド(container-managed relationship field)を持つエンティティBeanを使用する場合など、LocalインターフェイスとLocalホームインターフェイスを使ってEJBを呼び出す場合は、EJBCallFactoryクラスを使用せず、EJBの仕様に従ってjavax.naming.InitialContextクラスを使用してLocalホームインターフェイスを取得します。

20.4.2.1 EJBCallFactoryクラスからリモートインターフェイスを取得する方法

以下のように記述します。

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オブジェクトの自動削除”を参照してください。

20.4.2.2 EJBCallFactoryクラスからホームインターフェイスを取得する方法

以下のように記述します。

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で検索する名前です。