23.7. サンプル
23.7.1. Commarea の使用 リンクのコピーリンクがクリップボードにコピーされました!
次のサンプルは、COMMAREA を使用して CICS サーバー上でプログラムを実行するルートを設定する方法を示しています。COMMAREA サイズは CICS_COMM_AREA_SIZE ヘッダーで定義する必要があり、COMMAREA 入力データは Camel Exchange 本体で定義されます。
サーバーに送信されるすべての情報と、サーバーから返されるすべての情報を格納するのに十分な大きさの COMMAREA を作成する必要があります。
//.....
import static com.redhat.camel.component.cics.CICSConstants.CICS_PROGRAM_NAME_HEADER;
import static com.redhat.camel.component.cics.CICSConstants.CICS_COMM_AREA_SIZE_HEADER;
//....
from("direct:run").
setHeader(CICS_PROGRAM_NAME_HEADER, "ECIREADY").
setHeader(CICS_COMM_AREA_SIZE_HEADER, 18).
setBody(constant("My input data")).
to("cics:eci/commarea?host=192.168.0.23&port=2006&protocol=tcp&userId=foo&password=bar");
CICS プログラム呼び出しの結果は、次のように Camel Exchange にマッピングされます。
-
戻りコードの数値は
CICS_RETURN_CODEヘッダーに格納されます。 - COMMAREA 出力データは Camel Exchange Body に保存されます。
23.7.2. 単一の入力コンテナーでチャネルを使用する リンクのコピーリンクがクリップボードにコピーされました!
次のサンプルは、単一のコンテナーを持つチャネルを使用して CICS プログラムを実行する方法を示しています。チャネル名とコンテナー名はヘッダーから取得され、コンテナー値は本文から取得されます。
//.....
import static com.redhat.camel.component.cics.CICSConstants.CICS_PROGRAM_NAME_HEADER;
import static com.redhat.camel.component.cics.CICSConstants.CICS_CHANNEL_NAME_HEADER;
import static com.redhat.camel.component.cics.CICSConstants.CICS_CONTAINER_NAME_HEADER;
//...
from("direct:run").
setHeader(CICS_PROGRAM_NAME_HEADER, "EC03").
setHeader(CICS_CHANNEL_NAME_HEADER, "SAMPLECHANNEL").
setHeader(CICS_CONTAINER_NAME_HEADER, "INPUTDATA").
setBody(constant("My input data")).
to("cics:eci/channel?host=192.168.0.23&port=2006&protocol=tcp&userId=foo&password=bar");
返されるコンテナーは java.util.Map<String,Object> に格納されます。キーはコンテナー名、値はコンテナーの出力データです。
23.7.3. 複数の入力コンテナーを持つチャネルの使用 リンクのコピーリンクがクリップボードにコピーされました!
複数のコンテナーを入力として受け取る CICS プログラムを実行する必要がある場合は、キーがコンテナー名で値が入力データである java.util.Map<String,Object> を作成できます。この場合、CICS_CONTAINER_NAME ヘッダーは無視されます。
//.....
import static com.redhat.camel.component.cics.CICSConstants.CICS_PROGRAM_NAME_HEADER;
import static com.redhat.camel.component.cics.CICSConstants.CICS_CHANNEL_NAME_HEADER;
//...
from("direct:run").
setHeader(CICS_PROGRAM_NAME_HEADER, "EC03").
setHeader(CICS_CHANNEL_NAME_HEADER, "SAMPLECHANNEL").
process(exchange->{
byte[] thirdContainerData = HexFormat.of().parseHex("e04fd020ea3a6910a2d808002b30309d");
Map<String,Object> containers = Map.of(
"firstContainerName", "firstContainerData",
"secondContainerName", "secondContainerData",
"thirdContainerName", thirdContainerData
);
exchange.getMessage().setBody(containers);
}).
to("cics:eci/channel?host=192.168.0.23&port=2006&protocol=tcp&userId=foo&password=bar");