同期アプリケーション連携実行基盤上で動作する業務共通制御と連携させるために必要なクライアントアプリケーションの処理を作成します。
クライアントアプリケーションの呼び出し方法に応じて使用するインタフェースは異なります。
■一般的なJavaアプリケーションからの呼出し
MsyncCallクラスで提供するsetControlData/getContorlDataメソッドを使用して、制御データを設定/取得します。制御データは、業務データとは別のオブジェクトを作成してMsyncCallへ設定します。
設定可能なデータ型は、業務データと同じです。業務データで設定可能なデータ型については、“9.2.6 クライアントアプリケーションで利用するデータについて”を参照してください。
以下のAPIを利用します。
com.fujitsu.interstage.apfw.msync.MsyncCall
制御データを設定/取得するためのメソッドを提供します。
com.fujitsu.interstage.apfw.scnt.ApfwControlException
業務共通制御で発生した例外です。
業務共通制御で設定された例外情報を受け取ります。振分け制御、業務前制御、業務後制御、または結果編集制御の復帰値に0以外を設定した場合、クライアントAPIへは、本クラスが通知されます。本クラスのメソッドにより、業務共通制御で設定された情報を参照することが可能です。
メソッド名 | 意味 |
|---|---|
getErrorCode | エラーコードを参照します。 |
getMessage | エラーメッセージ文字列を参照します。 |
getBinaryData | エラー情報詳細を参照します。 |
// 業務データ設定用のUserBeanを生成
UserBean bean = new UserBean();
bean.setID(dataBean.getID()); // プロパティを設定
...
try{
// MsyncCallの作成
MsyncCall call = new MsyncCall("MyApp"); // 呼び出す業務名を指定
// コンテキストIDの設定
call.setContextId("abcdef");
// (1)制御データ設定用のbeanを生成
Operation01Bean controlBean = new Operation01Bean();
controlBean.setNextApp("apl01"); // プロパティを設定
// (2)MsyncCallに制御データを設定
call.setControlData(controlBean);
// (3)サーバアプリケーションの呼出し
UserBean response = (UserBean)call.invokeMsync(bean,""); // 送信するデータとサーバアプリケーション名を指定して呼出し。サーバ側の振分け制御でサーバアプリケーション名を決定する場合、空文字を指定してもよい
// (4)制御データの取り出し
controlBean = (Operation01Bean)call.getControlData();
// removeメソッドの呼出し
call.remove();
} catch (ApfwControlException e) {
// 業務共通制御で発生した例外
// invokeMsyncメソッドで発生する。
...
} catch (ApfwSystemException e) {
...
... |
処理の手順を以下に示します。その他の手順については業務共通制御を使用しない場合の手順と同様です。
制御データ設定用のbeanを生成
業務共通制御実行基盤インタフェース生成ツールで生成されたbeanクラスのインスタンスを生成し、制御データを設定します。
MsyncCallに制御データを設定
setControlDataメソッドを呼び出し、MsyncCallに制御データを設定します。設定された制御データはinvokeMsyncメソッドでサーバアプリケーションを呼び出したときに業務共通制御に渡されます。制御データは、以下のどちらかを指定します。
業務共通制御実行基盤インタフェース生成ツールから生成したbean
java.util.Mapインタフェース実装クラス
サーバアプリケーションの呼出し
invokeMsyncメソッドで、サーバアプリケーションを呼び出します。invokeMsyncメソッドの引数に与えたデータ、サーバアプリケーション名、およびsetControlDataメソッドで設定した制御データがサーバに送信されます。サーバ側の振分け制御で呼び出すサーバアプリケーション名を決定する場合は、invokeMsyncメソッドの引数のサーバアプリケーション名に指定する文字列は特に意識する必要はありません。
制御データの取り出し
invokeMsyncメソッド完了後、サーバアプリケーションから返却された制御データはgetControlDataメソッドを使用して取り出すことができます。
ポイント
invokeMsyncメソッドを実行すると、setControlDataメソッドで設定した制御データはサーバアプリケーションから返却された制御データで上書きされます。その後、setControlDataメソッドで制御データを設定せずに再度invokeMsyncメソッドを実行することで、リクエスト間で制御データを持ちまわることも可能です。
注意
ApfwControlExceptionクラスはApfwSystemExceptionクラスを継承しています。そのため、ApfwSystemExceptionのcatchブロックを、ApfwControlExceptionのcatchブロックよりも先に記述した場合、ApfwControlExceptionはApfwSystemExcepionのcatchブロックでcatchされます。
invokeMsyncメソッド実行中にエラーが発生した場合、MsyncCallに設定された制御データはnullになります。
■Apcoordinatorのリモート共通インタフェースによる呼出し
UjiMsyncCallクラスで提供するsetControlData/getContorlDataメソッドを使用して、制御データを設定/取得します。制御データは、業務データとは別のオブジェクトを作成してUjiMsyncCallへ設定します。
設定可能なデータ型は、業務データと同じです。業務データで設定可能なデータ型については、“9.2.6 クライアントアプリケーションで利用するデータについて”を参照してください。
以下のApcoordinatorのリモート共通インタフェースを利用します。
com.fujitsu.uji.ext.UjiRemoteException
サーバアプリケーションの呼出し時に発生する例外です。invokeメソッド呼出し時にApfwControlExceptionが発生した場合、本例外にラップしてthrowします。
com.fujitsu.uji.msync.UjiMsyncCall
制御データを設定/取得するためのメソッドを提供します。
// 業務データ設定用のUserBeanを生成
UserBean bean = new UserBean();
bean.setID(dataBean.getID()); // プロパティを設定
...
try{
// CallFactoryの取得
CallFactory factory = context.getCallFactory();
// Callの取得
UjiMsyncCall call = (UjiMsyncCall)factory.createCall("MyCobolApl"); // 呼び出すアプリケーションを指定
// (1)制御データ設定用のbeanを生成
Operation01Bean controlBean = new Operation01Bean();
controlBean.setNextApp("apl01"); // プロパティを設定
// (2)UjiMsyncCallに制御データを設定
call.setControlData(controlBean);
// (3)サーバアプリケーションの呼出し
UserBean response = (UserBean)call.invoke(bean,""); // 送信するデータとサーバアプリケーション名を指定して呼出し。サーバ側の振分け制御でサーバアプリケーション名を決定する場合、空文字を指定してもよい
// (4)制御データの取り出し
controlBean = (Operation01Bean)call.getControlData();
} catch (UjiRemoteException e) {
// 通信中の例外
// invokeメソッドで発生する。業務共通制御で例外が発生した場合、本例外にラップされます。
...
} catch (UjiTargetException e) {
...
...
|
処理の手順を以下に示します。その他の手順については業務共通制御を使用しない場合の手順と同様です。
制御データ設定用のbeanを生成
業務共通制御実行基盤インタフェース生成ツールで生成されたbeanクラスのインスタンスを生成し、beanに制御データを設定します。
UjiMsyncCallに制御データを設定
setControlDataメソッドを呼び出し、UjiMsyncCallに制御データを設定します。設定された制御データはinvokeメソッドでサーバアプリケーションを呼び出したときに業務共通制御に渡されます。制御データは、以下のどちらかを指定します。
業務共通制御実行基盤インタフェース生成ツールから生成したbean
java.util.Mapインタフェース実装クラス
サーバアプリケーションの呼出し
invokeメソッドで、サーバアプリケーションを呼び出します。invokeメソッドの引数に与えたデータ、サーバアプリケーション名、およびsetControlDataメソッドで設定した制御データがサーバに送信されます。サーバ側の振分け制御で呼び出すサーバアプリケーション名を決定する場合は、invokeメソッドの引数のサーバアプリケーション名に指定する文字列は特に意識する必要はありません。
制御データの取り出し
invokeメソッド完了後、サーバアプリケーションから返却された制御データはgetControlDataメソッドを使用して取り出すことができます。
ポイント
invokeメソッドを実行すると、setControlDataメソッドで設定した制御データはサーバアプリケーションから返却された制御データで上書きされます。その後、setControlDataメソッドで制御データを設定せずに再度invokeメソッドを実行することで、リクエスト間で制御データを持ちまわることも可能です。
注意
invokeメソッド実行中にエラーが発生した場合、UjiMsyncCallに設定された制御データはnullになります。
■J2EE Connector ArchitectureのCommon Client Interface(CCI)による呼出し
MsyncInteractionSpecクラスで提供するsetControlDataメソッド、およびgetContorlDataメソッドを使用して、制御データを設定、および取得します。制御データは、業務データとは別のオブジェクトを作成してMsyncInteractionSpecへ設定します。
設定可能なデータ型は、業務データと同じです。業務データで設定可能なデータ型については、“9.2.6 クライアントアプリケーションで利用するデータについて”を参照してください。
以下のAPIを利用します。
javax.resource.ResourceException
サーバアプリケーションおよびクライアントAPIで発生した例外をラップするクラスです。サーバアプリケーション呼出し時にApfwControlExceptionが発生した場合、本例外にラップしてthrowします。getLinkedException()メソッドにより発生した例外を取得できます。
com.fujitsu.interstage.apfw.msync.ra.MsyncInteractionSpec
Interactionインタフェースを実装したMsyncInteractionへ情報を設定するクラスです。制御データを設定/取得するためのメソッドを提供します。
...
try{
// (1-1)ManagedConnectionFactoryの作成
MsyncManagedConnectionFactory mcxf = new MsyncManagedConnectionFactory();
// setNameメソッドで業務名を指定
mcxf.setName("MyApp");
// (1-2)ConnectionFactoryの作成
ConnectionFactory cxf = (ConnectionFactory)mcxf.createConnectionFactory();
// (2)Connectionの取得
Connection con = cxf.getConnection();
// (3)Interactionの作成
Interaction inter = con.createInteraction();
// (4)InteractionSpecの作成
MsyncInteractionSpec interSpec = new MsyncInteractionSpec();
// (5-1)サーバアプリケーション名の設定
interSpec.setTarget("apl");
// (5-2)コンテキストIDの設定
interSpec.setContextId("abcdef");
// (5-3)制御データの作成
HashMap<String,Object> ctrlObj = new HashMap<String,Object>();
ctrlObj.put("ctrl", "xyz");
// (5-4)制御データの設定
interSpec.setControlData(ctrlObj);
// 入力データの作成
// (6)RecordFactoryの取得
RecordFactory rf = cxf.getRecordFactory();
// (7)Record(処理対象データを格納するクラス)の作成
MappedRecord input = rf.createMappedRecord(null);
MappedRecord output = rf.createMappedRecord(null);
// (8)処理対象データをMappedRecordに格納
input.put("from_data", "abc");
// (9)サーバアプリケーションの呼び出し(Interactionの実行)
// 第一引数には(4)で作成したMsyncInteractionSpecを渡してください
// 第二引数には(8)で処理対象データを格納したMappedRecordを渡してください
// 第三引数には(7)で作成した処理結果格納用のMappedRecordを渡してください
inter.execute(interSpec, input, output);
// (10)制御データの取り出し
HashMap<String,Object> newCtrlObj = (HashMap<String,Object>)interSpec.getControlData();
// 終了処理
// (11)Interactionのクローズ
inter.close();
// (12)Connectionのクローズ
con.close();
...
} catch (ResourceException e) {
...
}
... |
処理の手順を以下に示します。その他の手順については業務共通制御を使用しない場合の手順と同様です。
制御データ設定用のHashMapを生成
HashMapに制御データを設定します。
MsyncInteractionSpecに制御データを設定
setControlDataメソッドを呼び出し、MsyncInteractionSpecに制御データを設定します。設定された制御データはexecuteメソッドでサーバアプリケーションを呼び出したときに業務共通制御に渡されます。
サーバアプリケーションの呼出し
executeメソッドで、サーバアプリケーションを呼び出します。executeメソッドの引数に与えたデータ、およびsetControlDataメソッドで設定した制御データがサーバに送信されます。サーバ側の振分け制御で呼び出すサーバアプリケーション名を決定する場合は、MsyncInteractionSpecのsetTargetメソッドは呼び出す必要はありません。
制御データの取り出し
executeメソッド完了後、サーバアプリケーションから返却された制御データはgetControlDataメソッドを使用して取り出すことができます。
ポイント
executeメソッドを実行すると、setControlDataメソッドで設定した制御データはサーバアプリケーションから返却された制御データで上書きされます。その後、setControlDataメソッドで制御データを設定せずに再度executeメソッドを実行することで、リクエスト間で制御データを持ちまわることも可能です。
注意
executeメソッド実行中にエラーが発生した場合、MsyncInteractionSpecに設定された制御データはnullになります。