ページの先頭行へ戻る
Interstage Business Application Server アプリケーション開発ガイド
FUJITSU Software

9.3.4 クライアントアプリケーションの処理の作成

同期アプリケーション連携実行基盤上で動作する業務共通制御と連携させるために必要なクライアントアプリケーションの処理を作成します。
クライアントアプリケーションの呼び出し方法に応じて使用するインタフェースは異なります。

般的なJavaアプリケーションからの呼出し

MsyncCallクラスで提供するsetControlData/getContorlDataメソッドを使用して、制御データを設定/取得します。制御データは、業務データとは別のオブジェクトを作成してMsyncCallへ設定します。

設定可能なデータ型は、業務データと同じです。業務データで設定可能なデータ型については、“9.2.6 クライアントアプリケーションで利用するデータについて”を参照してください。

利用するインタフェース

以下のAPIを利用します。

使用例
  // 業務データ設定用の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) {
    ...
...

処理の手順を以下に示します。その他の手順については業務共通制御を使用しない場合の手順と同様です。

  1. 制御データ設定用のbeanを生成
    業務共通制御実行基盤インタフェース生成ツールで生成されたbeanクラスのインスタンスを生成し、制御データを設定します。

  2. MsyncCallに制御データを設定
    setControlDataメソッドを呼び出し、MsyncCallに制御データを設定します。設定された制御データはinvokeMsyncメソッドでサーバアプリケーションを呼び出したときに業務共通制御に渡されます。制御データは、以下のどちらかを指定します。

    • 業務共通制御実行基盤インタフェース生成ツールから生成したbean

    • java.util.Mapインタフェース実装クラス

  3. サーバアプリケーションの呼出し
    invokeMsyncメソッドで、サーバアプリケーションを呼び出します。invokeMsyncメソッドの引数に与えたデータ、サーバアプリケーション名、およびsetControlDataメソッドで設定した制御データがサーバに送信されます。サーバ側の振分け制御で呼び出すサーバアプリケーション名を決定する場合は、invokeMsyncメソッドの引数のサーバアプリケーション名に指定する文字列は特に意識する必要はありません。

  4. 制御データの取り出し
    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のリモート共通インタフェースを利用します。

使用例
  // 業務データ設定用の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) {
    ...
...

処理の手順を以下に示します。その他の手順については業務共通制御を使用しない場合の手順と同様です。

  1. 制御データ設定用のbeanを生成
    業務共通制御実行基盤インタフェース生成ツールで生成されたbeanクラスのインスタンスを生成し、beanに制御データを設定します。

  2. UjiMsyncCallに制御データを設定
    setControlDataメソッドを呼び出し、UjiMsyncCallに制御データを設定します。設定された制御データはinvokeメソッドでサーバアプリケーションを呼び出したときに業務共通制御に渡されます。制御データは、以下のどちらかを指定します。

    • 業務共通制御実行基盤インタフェース生成ツールから生成したbean

    • java.util.Mapインタフェース実装クラス

  3. サーバアプリケーションの呼出し
    invokeメソッドで、サーバアプリケーションを呼び出します。invokeメソッドの引数に与えたデータ、サーバアプリケーション名、およびsetControlDataメソッドで設定した制御データがサーバに送信されます。サーバ側の振分け制御で呼び出すサーバアプリケーション名を決定する場合は、invokeメソッドの引数のサーバアプリケーション名に指定する文字列は特に意識する必要はありません。

  4. 制御データの取り出し
    invokeメソッド完了後、サーバアプリケーションから返却された制御データはgetControlDataメソッドを使用して取り出すことができます。

ポイント

invokeメソッドを実行すると、setControlDataメソッドで設定した制御データはサーバアプリケーションから返却された制御データで上書きされます。その後、setControlDataメソッドで制御データを設定せずに再度invokeメソッドを実行することで、リクエスト間で制御データを持ちまわることも可能です。

注意

invokeメソッド実行中にエラーが発生した場合、UjiMsyncCallに設定された制御データはnullになります。

■J2EE Connector ArchitectureのCommon Client Interface(CCI)による呼出し

MsyncInteractionSpecクラスで提供するsetControlDataメソッド、およびgetContorlDataメソッドを使用して、制御データを設定、および取得します。制御データは、業務データとは別のオブジェクトを作成してMsyncInteractionSpecへ設定します。
設定可能なデータ型は、業務データと同じです。業務データで設定可能なデータ型については、“9.2.6 クライアントアプリケーションで利用するデータについて”を参照してください。

利用するインタフェース

以下のAPIを利用します。

使用例
  ...

 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) {
  ...
}
...

処理の手順を以下に示します。その他の手順については業務共通制御を使用しない場合の手順と同様です。

  1. 制御データ設定用のHashMapを生成
    HashMapに制御データを設定します。

  2. MsyncInteractionSpecに制御データを設定
    setControlDataメソッドを呼び出し、MsyncInteractionSpecに制御データを設定します。設定された制御データはexecuteメソッドでサーバアプリケーションを呼び出したときに業務共通制御に渡されます。

  3. サーバアプリケーションの呼出し
    executeメソッドで、サーバアプリケーションを呼び出します。executeメソッドの引数に与えたデータ、およびsetControlDataメソッドで設定した制御データがサーバに送信されます。サーバ側の振分け制御で呼び出すサーバアプリケーション名を決定する場合は、MsyncInteractionSpecのsetTargetメソッドは呼び出す必要はありません。

  4. 制御データの取り出し
    executeメソッド完了後、サーバアプリケーションから返却された制御データはgetControlDataメソッドを使用して取り出すことができます。

ポイント

executeメソッドを実行すると、setControlDataメソッドで設定した制御データはサーバアプリケーションから返却された制御データで上書きされます。その後、setControlDataメソッドで制御データを設定せずに再度executeメソッドを実行することで、リクエスト間で制御データを持ちまわることも可能です。

注意

executeメソッド実行中にエラーが発生した場合、MsyncInteractionSpecに設定された制御データはnullになります。