import com.fujitsu.uji.ext.Call;
import com.fujitsu.uji.ext.CallFactory;
import com.fujitsu.uji.ext.UjiRemoteException;
import com.fujitsu.uji.ext.UjiTargetException;
import com.fujitsu.uji.ext.UjiCreateException;
public Object doSomething(DispatchContext context, DataBean dataBean){
CallFactory factory = context.getCallFactory();
try {
Call call = factory.createCall("MySessionBean"); // 名前を指定する
ResponseBean response = (ResponseBean)call.invoke(dataBean,"update");
// 送信するデータとコマンド名を指定して呼び出す
...
} catch (UjiCreateException e) {
// createCallメソッドで発生した例外
...
} catch (UjiRemoteException e) {
// 通信中の例外
// invokeメソッドで発生する。
...
} catch (UjiTargetException e) {
// 呼び出したセションBeanで発生した例外
// invokeメソッドで発生する。
...
}
}処理の手順は以下のようになります。
DispatchContextクラスのgetCallFactoryメソッドでCallFactoryインタフェースを取得します。
リモートマップに定義した名前を指定してCallFactoryのcreateCallメソッドを呼び出し、Callインタフェースを取得します。
Callインタフェースのinvokeメソッドで、セションBeanを呼び出します。invokeメソッドの引数に与えたデータとコマンド名が、呼び出されたセションBeanに送信されます。
セションBeanが返したデータは、invokeメソッドの返り値として取得できます。
上記の手順3でデータを送信せずコマンドのみを指定したい場合は、データとしてnullを指定してください。この場合、呼び出されたセションBeanでは、入力データを指定しない形式の行がコマンドマップから検索され、指定したコマンドに対応するメソッドが呼び出されます。
CallFactoryのcreateCallメソッドは、Callインタフェースの作成に失敗するとUjiCreateExceptionを発生します。UjiCreateExceptionのgetRootCauseメソッドで、失敗の原因となった例外が取得できます。
Callインタフェースのinvokeメソッドは以下の2種類の例外を発生します。
UjiRemoteException
呼び出し先との通信に失敗した場合に発生する例外です。UjiRemoteExceptionのgetRootCauseメソッドで失敗の原因となった例外が取得できます。
UjiTargetException
呼び出したセションBean実行中に例外が発生したことを表す例外です。実際にはUjiTargetExceptionそのものではなく、そのサブクラスであるEJBApplicationExceptionが例外として使用されます。原因となった例外の取得方法詳細は“APIリファレンス”を参照してください。
セションBeanの動作については、“第8章 EJBの呼び出し”を参照してください。