20.7. Samples
20.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 程序调用的 Outcome 以这种方式映射到 Camel Exchange:
-
返回代码的数字值保存在
CICS_RETURN_CODE标头中 - COMMAREA 输出数据存储在 Camel Exchange Body 中。
20.7.2. 使用带有单个输入容器的 Channel 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下示例演示了如何将频道与单个容器一起使用来运行 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 > 中,键是容器名称,值是容器的输出数据。
20.7.3. 使用带有多个输入容器的 Channel 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
如果您需要运行一个将多个容器的 CICS 程序作为输入,您可以创建一个 java.util.Map<String,Object& gt;,其中键是容器名称,值是输入数据。在这种情况下,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");