例をもとに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; } }
ConnectionFactoryの生成
JCAの記述形式でConnectionFactoryを生成します。
Connectionの取得
JCAの記述形式でConnectionを生成します。
InteractonSpecの作成
ISI呼び出しの情報を設定するInteractionSpec(ESIInteractionSpec)を生成します。以下の情報を設定します。
InteractionVerb
ISIを同期で呼び出すか、非同期で呼び出すかを指定します。
同期呼び出しの場合
InteractionSpec.SYNC_SEND_RECEIVE
非同期呼び出しの場合
InteractionSpec.SYNC_SEND
ServiceName
インバウンドのサービスエンドポイント名を指定します。
指定するサービスエンドポイントのメッセージング(同期/非同期)はInteractionVerbプロパティで指定した同期/非同期と必ず一致させてください。一致していない場合、実行エラーになります。
インバウンドルーティングを行う場合は、このプロパティは設定不要です。
このプロパティが設定されている場合、RoutingNameプロパティの設定は無視されます。
RoutingName
インバウンドルーティングを行う場合に、ルーティング定義名を指定します。
インバウンドルーティングを行わない場合、このプロパティは設定不要です。
入出力Record の作成
JCAの記述形式で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」に指定します。
上記以外のキー名で設定した情報は無視されます。
シーケンス処理の呼び出し
JCAの記述形式でInteractionを生成し、executeメソッドを呼び出します。
処理結果の取得
出力Recordから結果を取り出します。
クローズ処理
InteractionとConnectionのクローズを行います。
コンパイルに必要なクラスパス
インバウンドのカスタムアダプタのコンパイル時には、以下のクラスパスを設定してください。
J2EE実行環境の場合
<INSDIR>\lib\esicore.jar
<Interstageインストールディレクトリ>\J2EE\lib\isj2ee.jar
Java EE実行環境の場合
<INSDIR>\lib\esicore.jar
<Interstageインストールディレクトリ>\F3FMisjee\lib\javaee.jar