Apcoordinatorで作成したセションBeanは以下の2通りの方法で呼び出せます。
リモート共通インターフェイスを使う: 以下の特徴があります。
セションBeanのローカル呼び出しが可能
セションBeanごとにデータBean変換マップが指定可能
EJBCallFactoryクラスを使う: 以下の特徴があります。
EJB専用の呼び出し方法である
リモートマップは不要
Apcoordinatorで作成したセションBeanを呼び出す場合は、以下の機能が利用できます。詳しくは“20.2.3 セションBeanとクライアントとの連携”を参照してください。
セション情報の同期
データBean変換
ローカル呼び出し
リモート共通インターフェイスの基本的な使用方法は“20.3 リモート共通インターフェイス”を参照してください。この節ではセションBeanの呼び出しの場合に固有の動作について説明します。
項目 | セションBeanに固有の動作 |
---|---|
CallFactoryインターフェイスのcreateCallメソッドの呼び出し | このメソッドが呼び出されたとき、セションBeanのリモートインターフェイスのcreateメソッドが呼び出され、セションBeanのオブジェクトが作成されます。このセションBeanオブジェクトは、ビジネスクラスを呼び出した処理が終了するときに自動的に削除されます。詳細は“セションBeanオブジェクトの自動削除”を参照してください。 |
Callインターフェイスのinvokeメソッドの呼び出し | データBean変換機能を使用している場合、第1引数に指定されたデータは変換されてからセションBeanに送信されます。また、セションBeanが返したデータで上書きが行われた結果がinvokeメソッドから返ります。データBean変換機能と上書き機能については“20.2.3 セションBeanとクライアントとの連携”を参照してください。 |
Callインターフェイスのinvokeメソッドが発生させるUjiTargetException | セションBeanの実行中に例外が発生し、その例外がクライアントに通知される種類の例外である場合、invokeメソッドはUjiTargetExceptionのサブクラスであるEJBApplicationExceptionを発生します。EJBApplicationExceptionのgetRootCauseメソッドにより、セションBeanで発生した例外を取得できます。クライアントに通知される例外については“例外処理”を参照してください。 |
EJBCallFactoryを使った呼び出しは、以下の手順で行います。
DispatchContextクラスからEJBCallFactoryクラスのオブジェクトを取得します。
EJBCallFactoryクラスのcreateUjiSessionCallメソッドを呼び出し、セションBeanの名前を指定してUjiSessionCallクラスのオブジェクトを取得します。指定する名前はJNDIで検索する名前です。この操作で取得されるUjiSessionCallは、セションBeanにアクセスするためのクラスです。このクラスのオブジェクトが作成されると同時に、EJBコンテナ上にセションBeanのオブジェクトが作成されます。
UjiSessionCallクラスのinvokeメソッドでセションBeanを呼び出します。このとき、引数としてデータ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); UjiSessionCall call=callFactory.createUjiSessionCall("java:comp/env/ejb/someSessionBean"); ResponseBean response=(ResponseBean)call.invoke(dataBean,verb); ... }
UjiSessionCallクラスのinvokeメソッドによってセションBeanのビジネスクラスが呼び出されます。ビジネスクラスのメソッドの第2引数に与えられるオブジェクトは次のとおりです。
データBean変換機能を使用していない場合は、invokeの引数に指定したデータBeanです。
データBean変換機能を使用している場合は、invokeの引数に指定したデータBeanを変換して得られるHashMapです。
また、invokeメソッドの返り値は次のとおりです。
データBean変換機能を使用していない場合、セションBeanのビジネスクラスが返却したオブジェクトです。
データBean変換機能を使用している場合は、セションBeanのビジネスクラスが返却したオブジェクトを逆変換した結果です。上書き機能が有効な場合は、invokeで指定したデータBeanそのものが返ります。このとき、返却されたデータBeanはセションBeanが返したデータで上書きされています。
データBean変換機能と上書き機能については“セションBeanとクライアントとの連携”を参照してください。
セションBeanの実行中に例外が発生し、それが呼び出し側に通知される例外の場合、invokeメソッドはcom.fujitsu.uji.ejb.EJBApplicationException例外を発生します。この例外のgetRootCauseメソッドによって、セションBeanで発生した例外を取得できます。 セションBeanからクライアントへの例外の通知については、“例外処理”を参照してください。
EJBCallFactoryのcreateUjiSessionCallメソッドで作成されたセションBeanオブジェクトは、ビジネスクラスを呼び出した処理が終了するときに自動的に削除されます。詳細は“セションBeanオブジェクトの自動削除”を参照してください。