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変換機能と上書き機能については“24.3 セションBeanとクライアントとの連携”を参照してください。
セションBeanの実行中に例外が発生し、それが呼び出し側に通知される例外の場合、invokeメソッドはcom.fujitsu.uji.ejb.EJBApplicationException例外を発生します。この例外のgetRootCauseメソッドによって、セションBeanで発生した例外を取得できます。 セションBeanからクライアントへの例外の通知については、“24.2.1 例外処理”を参照してください。
EJBCallFactoryのcreateUjiSessionCallメソッドで作成されたセションBeanオブジェクトは、ビジネスクラスを呼び出した処理が終了するときに自動的に削除されます。詳細は“8.4 セションBeanオブジェクトの自動削除”を参照してください。