ページの先頭行へ戻る
Interstage Service Integrator V9.5.0 アプリケーション開発ガイド
FUJITSU Software

4.1.2 アプリケーションの作成

例をもとにISI呼び出しをするカスタムアダプタのアプリケーションの作成方法を説明します。

アプリケーションの例

import javax.resource.ResourceException;
import javax.resource.cci.Connection;
import javax.resource.cci.ConnectionFactory;
import javax.resource.cci.IndexedRecord;
import javax.resource.cci.Interaction;
import javax.resource.cci.InteractionSpec;
import javax.resource.cci.MappedRecord;
import javax.resource.cci.RecordFactory;
import com.fujitsu.esi.jca.inbound.ESIInteractionSpec;
import com.fujitsu.esi.jca.inbound.ESIManagedConnectionFactory;
import com.fujitsu.esi.message.ESIHeaderConstants;

public class ISICall {
    public byte[] call(String serviceEndpointName, byte[] payload) {
        byte[] returnPayload = null;
        Connection connection = null;
        Interaction interaction = null;
        try {
            // (1)ConnectionFactoryの生成
            ESIManagedConnectionFactory managedConnectionFactory = new ESIManagedConnectionFactory();
            ConnectionFactory connectionFactory =
                 (ConnectionFactory) managedConnectionFactory.createConnectionFactory();
            // (2)Connectionの取得
            connection = connectionFactory.getConnection();
            // (3)InteractonSpecの作成
            ESIInteractionSpec interactionSpec = new ESIInteractionSpec();
            interactionSpec.setInteractionVerb(InteractionSpec.SYNC_SEND_RECEIVE);
            interactionSpec.setServiceName(serviceEndpointName);
            // (4)入出力Recordの作成
            RecordFactory recordFactory = connectionFactory.getRecordFactory();
            // 入力Recordの作成
            IndexedRecord input = recordFactory.createIndexedRecord(null);
            // ペイロードの設定
            input.add(payload);
            // ヘッダの設定
            MappedRecord headerMap = recordFactory.createMappedRecord(null);
            headerMap.put("header1", "value1");
            input.add(headerMap);
            // 出力Recordの作成
            IndexedRecord output = recordFactory.createIndexedRecord(null);
            // (5)シーケンス処理の呼び出し
            interaction = connection.createInteraction();
            interaction.execute(interactionSpec, input, output);
            // (6)処理結果の取得
            returnPayload = (byte[]) output.get(0);
            MappedRecord returnHeader = (MappedRecord) output.get(1);
        } catch (ResourceException ex) {
            ex.printStackTrace();
        } finally {
            // (7)クローズ処理
            // Interactionのクローズ
            if (interaction != null) {
                try {
                    interaction.close();
                } catch (ResourceException ex) {
                    ex.printStackTrace();
                }
            }
            // Connectionのクローズ
            if (connection != null) {
                try {
                    connection.close();
                } catch (ResourceException ex) {
                    ex.printStackTrace();
                }
            }
        }
        return returnPayload;
    }
}
  1. ConnectionFactoryの生成

    J2EE Connection Architectureの記述形式でConnectionFactoryを生成します。

  2. Connectionの取得

    J2EE Connection Architectureの記述形式でConnectionを生成します。

  3. InteractonSpecの作成

    ISI呼び出しの情報を設定するInteractionSpec(ESIInteractionSpec)を生成します。以下の情報を設定します。

    • InteractionVerb

      ISIを同期で呼び出すか、非同期で呼び出すかを指定します。

      • 同期呼び出しの場合
        InteractionSpec.SYNC_SEND_RECEIVE

      • 非同期呼び出しの場合
        InteractionSpec.SYNC_SEND

    • ServiceName

      インバウンドのサービスエンドポイント名を指定します。
      指定するサービスエンドポイントのメッセージング(同期/非同期)はInteractionVerbプロパティで指定した同期/非同期と必ず一致させてください。一致していない場合、実行エラーになります。

      インバウンドルーティングを行う場合は、このプロパティは設定不要です。
      このプロパティが設定されている場合、RoutingNameプロパティの設定は無視されます。

    • RoutingName

      インバウンドルーティングを行う場合に、ルーティング定義名を指定します。
      インバウンドルーティングを行わない場合、このプロパティは設定不要です。

  4. 入出力Record の作成

    J2EE Connection Architectureの記述形式でRecordを生成します。入出力Recordには以下の型を使用できます。

    • IndexedRecord

    • MappedRecord

    また、入力Recordにリクエスト情報を設定します。入力Recordに設定するリクエスト情報は以下のとおりです

    • ペイロード

      メッセージの本文を表します。ペイロードは必須です。byte[]型で入力Recordに設定します。

    • ヘッダパラメタ

      メッセージのヘッダ情報を表します。ヘッダパラメタは省略できます。MappedRecord型で入力Recordに設定します。

    入力Recordにリクエスト情報を設定する方法は、入力Recordに使用するRecordの型によって異なります。

    • IndexedRecordを使用する場合

      • ペイロード

        インデックス0番目に設定します。

      • ヘッダパラメタ

        メッセージのヘッダを設定します。

      インデックス2番目以降に設定した情報は無視されます。

    • MappedRecordを使用する場合

      • ペイロード

        キー名「com.fujitsu.esi.jca.payload」に設定します。

      • ヘッダパラメタ

        キー名「com.fujitsu.esi.jca.header」に指定します。

      上記以外のキー名で設定した情報は無視されます。

  5. シーケンス処理の呼び出し

    J2EE Connection Architectureの記述形式でInteractionを生成し、executeメソッドを呼び出します。

  6. 処理結果の取得

    出力Recordから結果を取り出します。

  7. クローズ処理

    InteractionとConnectionのクローズを行います。

  コンパイルに必要なクラスパス

インバウンドのカスタムアダプタのコンパイル時には、以下のクラスパスを設定してください。

<INSDIR>\lib\esicore.jar

<Interstageインストールディレクトリ>\J2EE\lib\isj2ee.jar