内容


使用 CICSRequest 节点配置 WebSphere Message Broker 和 CICS Transaction Server

Comments

简介

本文展示 IBM® Websphere® Message Broker(以下简称为 Message Broker)如何与 z/OS® 上运行的 Customer Information Control System Transaction Server( 以下简为称 CICS® TS)进行通信。CICSRequest 是 Websphere Message Broker V7 中的一个新特性,它支持 Message Broker 充当 CICS TS 客户端,通过 TCP/IP 向 CICS TS 发送 Internet Protocol InterCommunications (IPIC) 请求,并从 CICS TS 接收返回的响应。本文将展示如何在 Message Broker 和 CICS TS 之间建立通信链接,这涉及以下步骤:

  1. 创建一个 VSAM Key-Sequenced Dataset (KSDS)
  2. 在 z/OS 上编写一个样例 COBOL CICS 程序
  3. 在 z/OS 上设置一个 CICS TS 区域
  4. 使用 CICSRequest 节点创建一个样例消息流
  5. 执行消息流

z/OS 上的 CICS TS 支持几种编程语言。由于其简单性和易于理解的语法,我们使用 COBOL 作为本文中的样例程序的编程语言。根据您的技能和偏好,您可以使用其他受支持的语言创建一个等效程序,并使用它替代样例 COBOL 程序。

Message Broker 是一个中间件产品,用于在业务关键型应用程序之间转换和路由消息。CICS TS 是分布式事务处理环境和 IBM System z®(大型机)环境中广泛使用的应用程序服务器。CICS TS for z/OS 提供一般的事务处理,可满足大型和小型企业的需求。

本文的先决条件

要从本文中获益,您应该拥有以下基本知识:

  • CICS TS 和 z/OS
  • CICS 和 COBOL 编程和编译
  • WebSphere Message Broker
  • WebSphere MQ

要执行本文提供的消息流,您需要:

  • 一个 z/OS LPAR,包含:
    • COBOL 和 CICS TS V3.2 或更高版本
    • 一个用户 ID,拥有编译 COBOL 和 CICS 程序、执行 CICS 管理命令的权限
  • 一台 Microsoft® Windows® 机器,包括:
    • WebSphere Message Broker 运行时 V7.0 或更高版本
    • WebSphere Message Broker Toolkit V7.0 或更高版本
    • The rfhutil utility (available for free from IBM)

运行消息流所需的设置

  1. 在 Windows 机器上创建一个队列管理器 QM_CICSTestFlow 和一个 Message Broker BRK_CICSTestFlow 并启动这些组件。
  2. 创建一个执行组 CICSTestFlowEG
  3. 创建以下队列:CICSINPUT, CICSOUTPUTCICSOUTPUTXML
  4. 在 z/OS 上启动一个 TCPIP=YES 的 CICS 区域。

1. 创建一个 VSAM Key-Sequenced Dataset (KSDS)

  1. 使用 IDCAMS 实用工具创建一个 VSAM KSDS 集群、数据和索引数据集。在下面的示例中,记录长度为 80,键长度为 5,键位置从 1 到 5。检查您的系统的标准作业卡和数据集高级限定符 (HLQ) 并相应修改下面的所有作业:
    用于创建 VSAM KSDS 的 JCL
      File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help            
    -------------------------------------------------------------------------------
    VIEW       PABMUKH.CNTL(IDCKSDS1) - 01.05                  Columns 00001 00072 
    Command ===>                                                  Scroll ===> CSR
    ****** ***************************** Top of Data ******************************
    000001 //IDCKSDS1 JOB (934801),'IDCAMS - KSDS',CLASS=A,                        
    000002 //     NOTIFY=&SYSUID,REGION=0M,MSGCLASS=H,MSGLEVEL=(1,1)           
    000003 //*                                                                     
    000004 //*  DELETE CLUSTER, SET RC=0 AND THEN CREATE KSDS DATASET              
    000005 //*                                                                     
    000006 //ALLOKSDS EXEC PGM=IDCAMS                                              
    000007 //SYSPRINT DD SYSOUT=*                                                  
    000008 //SYSIN DD *                                                            
    000009  DELETE (PABMUKH.WMBCICS.KSDS.FILE1) CLUSTER PURGE                      
    000010  IF MAXCC ¬= 0 THEN SET MAXCC=0                                         
    000011  DEFINE CLUSTER (                                     -                 
    000012           NAME(PABMUKH.WMBCICS.KSDS.FILE1)            -                 
    000013           VOLUMES(LETSMS)                             -                 
    000014           CISZ(4096)                                  -                 
    000015           FREESPACE(10 10)                            -                 
    000016           RECORDSIZE(80 80)                           -                 
    000017           KEYS(5 0)                                   -                 
    000018           TRACKS(100 100)                             -                 
    000019           INDEXED                                     -                 
    000020           )                                           -                 
    000021         DATA (                                        -                 
    000022           NAME(PABMUKH.WMBCICS.KSDS.FILE1.DATA)       -                 
    000023           )                                           -                 
    000024         INDEX (                                       -                 
    000025           NAME(PABMUKH.WMBCICS.KSDS.FILE1.INDEX)      -                 
    000026           )                                                             
    000027  IF LASTCC = 0 THEN LISTCAT ALL LEVEL(PABMUKH.WMBCICS.KSDS.FILE1)       
    000028 /*
  2. 在本节步骤 1 中创建的 VSAM 数据集中插入几条记录。本例使用下面的数据布局:
    • 位置 01 到 05:Employee ID
    • 位置 06:Filler (Space)
    • 位置 07 到 31:Employee Name
    • 位置 32:Filler (Space)
    • 位置 33 到 35:Department Code
    • 位置 36:Filler(Space)
    • 位置 37 到 44:Lotus Notes ID
    • 位置 45 到 80:Filler (Space)

    使用下面的 JCL 将数据插入 VSAM 数据集:

    向 VSAM KSDS 插入数据的 JCL
       File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help            
    ------------------------------------------------------------------------------- 
     VIEW       PABMUKH.CNTL(REPRO02) - 01.01                   Columns 00001 00072 
     Command ===>                                                  Scroll ===> CSR
     =COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- 
     ****** ***************************** Top of Data ******************************
     000001 //REPRO02 JOB (934801),'LOAD VSAM',CLASS=A,                             
     000002 //     NOTIFY=&SYSUID,REGION=0M,MSGCLASS=H,MSGLEVEL=(1,1)           
     000003 //*                                                                     
     000004 //STEP1 EXEC PGM=IDCAMS                                                 
     000005 //SYSPRINT DD SYSOUT=*                                                  
     000006 //FILEOUT DD DSN=PABMUKH.WMBCICS.KSDS.FILE1,DISP=SHR                    
     000007 //DATAIN DD *                                                           
     000008 00001 PABITRA MUKHOPADHYAY      AB1 PABMUKHO                            
     000009 00002 AVINASH JHAWAR            AB1 AVJHAWAR                            
     000010 00004 SAURABH DIXIT             CD2 SAUDIXIT                            
     000011 /*                                                                      
     000012 //SYSIN DD *                                                            
     000013   REPRO INFILE(DATAIN) OUTFILE(FILEOUT)                                 
     000014 /*
     ****** **************************** Bottom of Data ****************************
  3. 使用下面的 JCL 查看本节步骤 2 中插入的记录:
    用来查看 VSAM KSDS 中显示的数据的 JCL
       File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help            
    -------------------------------------------------------------------------------
     VIEW       PABMUKH.CNTL(REPRO03) - 01.00                   Columns 00001 00072 
     Command ===>                                                  Scroll ===> CSR
     ****** ***************************** Top of Data ******************************
     000001 //REPRO03 JOB (934801),'DISPLAY VSAM',CLASS=A,                          
     000002 //     NOTIFY=&SYSUID,REGION=0M,MSGCLASS=H,MSGLEVEL=(1,1)           
     000003 //*                                                                     
     000004 //STEP1 EXEC PGM=IDCAMS                                                 
     000005 //SYSPRINT DD SYSOUT=*                                                  
     000006 //INDD DD DSN=PABMUKH.WMBCICS.KSDS.FILE1,DISP=SHR                       
     000007 //OUTDD  DD SYSOUT=*                                                    
     000008 //SYSIN DD *                                                            
     000009   REPRO INFILE(INDD) OUTFILE(OUTDD)                                     
     000010 /*
     ****** **************************** Bottom of Data ****************************

    成功完成作业后,转到 Systems Display and Search Facility (SDSF) 面板并检查作业的 OUTDD DDNAME。这将显示从 VSAM 数据集中读取的所有记录:

    后台打印中看到的作业输出
       Display  Filter  View  Print  Options  Help                                  
     -------------------------------------------------------------------------------
     SDSF OUTPUT DISPLAY REPRO03  JOB11978  DSID   103 LINE 0       COLUMNS 02- 81  
     COMMAND INPUT ===>                                            SCROLL ===> CSR
    ********************************* TOP OF DATA **********************************
    00001 PABITRA MUKHOPADHYAY      AB1 PABMUKHO                       
    00002 AVINASH JHAWAR            AB1 AVJHAWAR                       
    00004 SAURABH DIXIT             CD2 SAUDIXIT                       
    ******************************** BOTTOM OF DATA ********************************

2. 在 z/OS 上编写一个样例 COBOL CICS 程序

  1. 下一步是编写一个 COBOL CICS 程序,以便基于记录键 (record key) 从 VSAM 数据集中读取一个记录。下面给出了一个名为 RDVSAM1 样例程序作为示例。这个程序接受一个操作码和一个记录键作为输入,然后读取 VSAM 数据集并将记录返回给 CICS。DFHCOMMAREA 用于客户端和 CICS TS 之间的数据传输。第一节中创建的 VSAM 数据集在这个 CICS 区域中称为 EMPKSDS1

    下面显示习字簿 RDVSAMC1,它包含 VSAM 数据集布局。RDVSAM1 程序在其 WORKING-STORAGE SECTION 中使用这个习字簿。

    习字簿 RDVSAMC1
      File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help            
    -------------------------------------------------------------------------------
    VIEW       PABMUKH.COBCOPY(RDVSAMC1) - 01.00               Columns 00001 00072 
    Command ===>                                                  Scroll ===> CSR
    ****** ***************************** Top of Data ******************************
    000100        01 FD-COMM-VARIABLES.                                            
    000200           05 FD-REQUEST.                                                
    000300              10 FD-Q-OPERATION                  PIC X(01).              
    000500              10 FD-Q-KSDS-KEY                   PIC X(05) VALUE SPACES. 
    000600       *                                                                 
    000700           05 FD-RESPONSE.                                               
    000800              10 FD-R-KSDS-FILEREC.                                      
    000900                 15 FD-R-KSDS-FILEREC-EMPID      PIC X(05) VALUE SPACES. 
    001000                 15 FILLER                       PIC X.                  
    001100                 15 FD-R-KSDS-FILEREC-EMPNAME    PIC X(25) VALUE SPACES. 
    001200                 15 FILLER                       PIC X.                  
    001300                 15 FD-R-KSDS-FILEREC-DEPTCD     PIC X(03) VALUE SPACES. 
    001400                 15 FILLER                       PIC X.                  
    001500                 15 FD-R-KSDS-FILEREC-LNID       PIC X(08) VALUE SPACES. 
    001600                 15 FILLER                       PIC X(36).              
    001700              10 FD-R-STATUS-MESSAGE             PIC X(40) VALUE SPACES. 
    ****** **************************** Bottom of Data ****************************
  2. 这个 COBOL CICS 程序如下所示:
    COBOL CICS 程序 RDVSAM1
      File  Edit  Edit_Settings  Menu  Utilities  Compilers  Test  Help            
    -------------------------------------------------------------------------------
    VIEW       PABMUKH.COBOL(RDVSAM1) - 01.00                  Columns 00001 00072 
    Command ===>                                                  Scroll ===> CSR
    ****** ***************************** Top of Data ******************************
    000001        IDENTIFICATION DIVISION.                                         
    000002        PROGRAM-ID.  RDVSAM1                                             
    000003        AUTHOR. P.MUKHOPADHYAY, A.JHAWAR, S.DIXIT                        
    000004       ******************************************************************
    000005       *                        DESCRIPTION                             *
    000006       *                        -----------                             *
    000007       *    THIS PROGRAM ACCEPTS A RECORD KEY, READS THE RECORD FROM    *
    000008       *    VSAM KSDS BASED ON THE KEY PROVIDED, AND RETURNS THE RECORD *
    000009       *    BACK THROUGH DFHCOMMAREA.                                   *
    000010       *    FILE USED: EMPKSDS1 (VSAM KSDS)                             *
    000011       *                                                                *
    000012       ******************************************************************
    000013        ENVIRONMENT DIVISION.                                            
    000014       *=====================*                                           
    000015        DATA DIVISION.                                                   
    000016       *==============*                                                  
    000017        WORKING-STORAGE SECTION.                                         
    000018       *                                                                 
    000019       * INCLUDE THE COPYBOOK FOR REQUEST AND RESPONSE DATA STRUCTURE.   
    000020       * THIS INCLUDES THE VSAM FILE LAYOUT FOR EMPKSDS1.                
    000021       *                                                                 
    000022        COPY RDVSAMC1.                                                   
    000023       *                                                                 
    000024       * DECLARE WORKING STORAGE VARIABLES USED IN THIS PROGRAM.         
    000025       *                                                                 
    000026        01 WS-VARIABLES.                                                 
    000027           05 WS-CICS-RESP-CODE                  PIC S9(08) COMP.        
    000028           05 WS-CICS-RESP-CODE-NUM              PIC 9(08) VALUE ZEROS.  
    000029           05 WS-FILE-NAME                       PIC X(08) VALUE SPACES. 
    000030       *                                                                 
    000031        LINKAGE SECTION.                                                 
    000032       *================*                                                
    000033       * THIS PROGRAM USES DFHCOMMAREA TO RECEIVE REQUEST AND SEND       
    000034       * THE RESPONSE BACK. HENCE, CODE DFHCOMMAREA IN THE LINKAGE       
    000035       * SECTION OF THIS PROGRAM. THE LENGTH OF DFHCOMMAREA FOR THIS     
    000036       * PROGRAM IS EQUAL TO THE VARIABLE STRING LENGTH OF RDVSAMC1      
    000037       * COPYBOOK (THIS INCLUDES REQUEST AND RESPONSE DATA STRUCTURE).   
    000038       *                                                                 
    000039        01 DFHCOMMAREA                        PIC X(126).                
    000040       *                                                                 
    000041        PROCEDURE DIVISION.                                              
    000042       *===================*                                             
    000043        A000-MAIN-CONTROL SECTION.                                       
    000044       *==========================*                                      
    000045       * CHECK THE EIBCALEN VARIABLE TO DETERMINE IF DFHCOMMAREA         
    000046       * CONTAINS REQUEST DATA OR NOT. EIBCALEN VARIABLE CONTAINS        
    000047       * THE LENGTH OF THE CICS COMMUNICATION AREA.                      
    000048       *                                                                 
    000049            IF EIBCALEN = ZERO                                           
    000050               INITIALIZE FD-RESPONSE                                    
    000051               MOVE 'ERR: REQUEST DATA NOT RECEIVED BY CICS'             
    000052                                        TO FD-R-STATUS-MESSAGE           
    000053            ELSE                                                         
    000054       *                                                                 
    000055       *       COPY THE REQUEST DATA FROM DFHCOMMAREA TO LOCAL VARIABLES.
    000056       *                                                                 
    000057               MOVE DFHCOMMAREA(1:6) TO FD-REQUEST                       
    000058               PERFORM B100-INITIALIZATION                               
    000059       *                                                                 
    000060       *       VALIDATE THE REQUEST DATA RECEIVED FROM DFHCOMMAREA.      
    000061       *                                                                 
    000062               EVALUATE FD-Q-OPERATION                                   
    000063                 WHEN 'R'                                                
    000064                      PERFORM B200-READ-FILE                             
    000065                 WHEN OTHER                                              
    000066                      MOVE 'ERR: UNKNOWN FILE OPERATION IN REQUEST'      
    000067                                               TO FD-R-STATUS-MESSAGE    
    000068               END-EVALUATE                                              
    000069            END-IF                                                       
    000070            PERFORM B300-TERMINATE                                       
    000071            EXIT.                                                        
    000072       ******************************************************************
    000073       /                                                                 
    000074        B100-INITIALIZATION SECTION.                                     
    000075       *============================*                                    
    000076       * INITIALIZE THE LOCAL VARIABLES USED IN THIS PROGRAM.            
    000077       *                                                                 
    000078            INITIALIZE FD-RESPONSE                                       
    000079                       WS-CICS-RESP-CODE                                 
    000080                       WS-CICS-RESP-CODE-NUM                             
    000081                       WS-FILE-NAME                                      
    000082            EXIT.                                                        
    000083       /                                                                 
    000084        B200-READ-FILE SECTION.                                          
    000085       *=======================*                                         
    000086       * READ THE EMPKSDS1 FILE WHICH IS ALREADY OPENED BY CICS.         
    000087       *                                                                 
    000088            MOVE 'EMPKSDS1' TO WS-FILE-NAME                              
    000089            EXEC CICS                                                    
    000090                READ FILE(WS-FILE-NAME)                                  
    000091                     INTO(FD-R-KSDS-FILEREC)                             
    000092                     RIDFLD(FD-Q-KSDS-KEY)                               
    000093                     RESP(WS-CICS-RESP-CODE)                             
    000094            END-EXEC.                                                    
    000095       *                                                                 
    000096       * CHECK THE CICS RESPONSE CODE RETURNED FOR READ FILE COMMAND.    
    000097       *                                                                 
    000098            EVALUATE WS-CICS-RESP-CODE                                   
    000099                 WHEN DFHRESP(NOTFND)                                    
    000100                     MOVE 'ERR: EMPLOYEE ID DOES NOT EXIST'              
    000101                               TO FD-R-STATUS-MESSAGE                    
    000102                 WHEN DFHRESP(NORMAL)                                    
    000103                     MOVE 'MSG: EMPLOYEE DETAILS FOUND'                  
    000104                               TO FD-R-STATUS-MESSAGE                    
    000105                 WHEN OTHER                                              
    000106                     MOVE WS-CICS-RESP-CODE TO WS-CICS-RESP-CODE-NUM     
    000107                     STRING 'ERR: CICS RESPONSE CODE: '                  
    000108                         WS-CICS-RESP-CODE-NUM DELIMITED BY SIZE         
    000109                                          INTO FD-R-STATUS-MESSAGE       
    000110            END-EVALUATE                                                 
    000111            EXIT.                                                        
    000112       /                                                                 
    000113        B300-TERMINATE SECTION.                                          
    000114       *=======================*                                         
    000115       * COPY THE LOCAL VARIABLES FOR REQUEST AND RESPONSE DATA BACK     
    000116       * TO DFHCOMMAREA. CICS WILL RETURN THE DATA FROM DFHCOMMAREA TO   
    000117       * TO THE CLIENT THAT INVOKED THIS TRANSACTION.                    
    000118       *                                                                 
    000119            MOVE FD-COMM-VARIABLES TO DFHCOMMAREA                        
    000120       *                                                                 
    000121       * RETURN THE CONTROL BACK TO CICS.                                
    000122       *                                                                 
    000123            EXEC CICS RETURN END-EXEC.                                   
    000124            EXIT.                                                        
    ****** **************************** Bottom of Data ****************************
  3. 编译上一步中编写的 COBOL CICS 程序。将编译结束时生成的负载模块放置到适当的负载库中,确保那个负载库位于 CICS 库串联中。

3. 在 z/OS 上设置一个 CICS TS 区域

下一步是设置您的 CICS 区域,以便与 Message Broker 进行通信。使用一个 3270 模拟器,按照以下步骤登录您的 CICS 区域:

  1. 定义一个 VSAM KSDS:

    执行命令 CEDA DEF F。指定逻辑文件名称 EMPKSDS1,即您的系统设置的 CICS 小组名称,并使用 DSName 作为第一节中创建的数据集名称。指定记录长度为 80,键长度为 5。默认情况下,将为 READ 操作启用这个数据集。其他参数的默认值完全适合运行这个消息流。数据集定义后,可以执行命令 CEDA V F(EMPKSDS1) 并提供小组名称,以便查看某些条目。

  2. 定义一个 TCPIPService:

    执行命令 CEDA DEF TC。指定一个 TCPIPService 名称,一个 CICS 小组名称,以及一个端口号,CICS TCPIPService 将通过该端口与 Message Broker 通信(为这个设置分配端口之前,应咨询您的 CICS 管理员)。

    此外,请将 DFHISAIP 指定为 Urm,将 IPic 指定为 PROtocol,将 CISS 指定 为 TRansaction(该设置的默认事务),并在 Ipaddress 字段中指定这个 z/OS LPAR 的 IP 地址。其他参数的默认值将满足运行这个消息流的要求。定义 TCPIPService 之后,就可以执行命令 CEDA V TC(<TCPIPService_Name>) 并提供小组名称,以便查看某些条目。

  3. 定义一个程序:

    执行命令 CEDA DEF PROG。在 PROGram 字段中指定程序名 RDVSAM1,指定您的系统设置的 CICS 小组名称,并将 CObol 指定为 Language。其他参数的默认值完全适合运行这个消息流。定义 TCPIPService 之后,可以执行 CEDA V PROG(RDVSAM1) 并提供小组名称,以便查看某些条目。

  4. 安装 CICS 组件:

    逐一安装本节步骤 1、2 和 3 中创建的组件。执行以下命令并提供组件名称以及与组件有关联的 CICS 小组。

  5. 检查文件状态:

    您的程序将从 VSAM KSDS 中读取记录,数据集在 CICS 区域中必须处于打开状态。执行命令 CEMT I FI(EMPKSDS1),然后检查文件状态。如果是 Clo(关闭),则使用 Ope 改写它,然后按下 Enter 键。确保您得到一个 NORMAL 响应,用它更改文件状态。文件将在 CICS 区域中打开,您的屏幕上的文件状态将获得相应的更新。

4. 使用 CICSRequest 节点创建一个样例消息流

图 1 展示了一个涉及 CICSRequest 节点的样例消息流。这个消息流中使用的节点如下:

  • MQInput 节点(CICS INPUT)
  • Compute 节点(Format Request 和 Format Response)
  • CICSRequest 节点(Read KSDS Record)
  • MQOutput 节点(CICS OUTPUT [EBCDIC] 和 CICS OUTPUT [XML])
    图 1. 使用 CICSRequest 节点的消息流
    使用 CICSRequest 节点的消息流
    使用 CICSRequest 节点的消息流

使用 WebSphere Message Broker Toolkit 创建图 1 中展示的消息流和连接。不同节点的设置和配置描述如下:

  1. CICS INPUT —— MQInput 节点:
    1. 将队列名称指定为 CICSINPUT
    2. 单击 Input Message Parsing 选项卡,选择 Message Domain 字段中的 XMLNSC,将 MQInput 节点设置为接受 XML 格式的输入。
    3. 接受其他设置的默认值。
  2. Format Request 和 Format Response —— Compute 节点:
    1. Format Request 节点将 XML 输入转换为一个 CICS 请求字符串,然后将编码从 ASCII 更改为 EBCDIC。
    2. 下面是 Format Request 节点的 ESQL:
      Format Request 节点的 ESQL
      CREATE COMPUTE MODULE CICSTestFlow_FormatRequest
         CREATE FUNCTION Main() RETURNS BOOLEAN
         BEGIN
            DECLARE MsgIn      CHARACTER;
            DECLARE CICSReqMsg BLOB;
      
      -- Concatenate Operation and EmpID fields in the xml to 
      -- prepare the CICS Request String in ASCII
            SET MsgIn = InputRoot.XMLNSC.Message.operation || 
               InputRoot.XMLNSC.Message.empid;
      -- Convert the CICS Request string from ASCII to EBCDIC
            SET CICSReqMsg = CAST(MsgIn as BLOB CCSID 500);
      
            SET OutputRoot.BLOB.BLOB = CICSReqMsg;
            RETURN TRUE;
         END;
      END MODULE;
    3. Format Response 节点将 CICS 响应字符串编码从 EBCDIC 转换为 ASCII,然后将响应转换为 XML。
    4. 下面是 Format Response 节点的 ESQL:
      Format Response 节点的 ESQL
      CREATE COMPUTE MODULE CICSTestFlow_FormatResponse
         CREATE FUNCTION Main() RETURNS BOOLEAN
         BEGIN
            DECLARE CICSRespMsg  BLOB;
            DECLARE CICSRespChar CHARACTER;
            DECLARE MsgOut       BLOB;
            DECLARE MsgOutChar   CHARACTER; 
      
         -- Receive CICS Response into CICSRespMsg variable and convert the 
         -- response string from EBCDIC to ASCII
            SET CICSRespMsg  = InputRoot.BLOB.BLOB;
            SET CICSRespChar = CAST(CICSRespMsg AS CHARACTER CCSID 500);
            SET MsgOut       = CAST(CICSRespChar AS BLOB CCSID 850);
            SET MsgOutChar   = CAST(MsgOut AS CHARACTER CCSID 850);
      
         -- Prepare Output xml from the CICS Response string in ASCII encoding
            SET OutputRoot.XMLNSC.Message.Status = 
               TRIM(SUBSTRING(MsgOutChar FROM 87 FOR 40)) ;
            SET OutputRoot.XMLNSC.Message.EmpDetails.EmpID = 
               TRIM(SUBSTRING(MsgOutChar FROM 7 FOR 5)) ;
         SET OutputRoot.XMLNSC.Message.EmpDetails.EmpName = 
               TRIM(SUBSTRING(MsgOutChar FROM 13 FOR 25)) ; 
            SET OutputRoot.XMLNSC.Message.EmpDetails.DeptCode = 
               TRIM(SUBSTRING(MsgOutChar FROM 39 FOR 3)) ;
            SET OutputRoot.XMLNSC.Message.EmpDetails.LNID = 
               TRIM(SUBSTRING(MsgOutChar FROM 43 FOR 8)) ;
            RETURN TRUE;
         END;
      END MODULE;
    5. 选择 Format Request 节点:
      1. 单击 Basic 选项卡并使用 Browse 按钮选择适当的 ESQL 模块。
      2. 选择 Compute 模式下拉列表中的 Local Environment and Message。
    6. 选择 Format Response 节点:
      1. 单击 Basic 选项卡。使用 Browse 按钮选择适当的 ESQL 模块。
      2. 选择 Compute 模式下拉列表中的 Message。
    7. 接受其他设置的默认值。
  3. Read KSDS Record —— CICSRequest 节点:
    1. 执行以下命令创建可配置的服务:
      用于创建一个可配置服务的命令
      mqsicreateconfigurableservice BRK_CICSTestFlow 
      -c CICSConnection 
      -o CICSTestFlowConfServ 
      -n cicsServer,clientApplid,clientQualifier 
      -v tcp://<IPaddress_or_hostname>:<CICS_TCPIPService_port_number>,BRKApp,BRKQual

      这个命令中的端口号是 CICS TCPIPService 正在监听的端口号,也是第三节中设置的端口号。这个可配置服务成功创建后,使用 mqsistopmqsistart 命令重启代理。

    2. 接下来,单击 CICSRequest 节点并选择 Basic 选项卡:
      1. 在 CICS Server 字段中提供 CICS 可配置服务对象名称 CICSTestFlowConfServ
      2. 在 Program name 字段中提供 CICS 程序名,在本例中为 RDVSAM1
      3. 选择 Commarea Data structure 单选按钮,因为 RDVSAM1 程序使用 CICS Commarea。
      4. 提供 Commarea Length,对于 RDVSAM1 程序,这个值为 126。
      5. 将 Request timeout 设置为 120 秒。
    3. 选择 Request 选项卡:
      1. 将 Data location 设置为 $Body
      2. 将 Program name override location 设置为 $LocalEnvironment/Destination/CICS/CICSProgramName
    4. 选择 Result 选项卡:
      1. 将 Result data location 设置为 $ResultRoot
      2. 将 Output data location 设置为 $OutputRoot
    5. 选择 Response Message Parsing 选项卡:
      1. 将 Message Domain 设置为 BLOB
      2. 将 Message coded character set ID 设置为 EBCDIC (500)
      3. 将 Message Encoding 设置为 Big Endian,使用 S390 Floating Point (785)
    6. 接受其他设置的默认值。
  4. CICS OUTOUT XML 和 CICS OUTPUT (EBCDIC) —— MQOutput 节点:
    1. 单击 CICS OUTPUT XML 节点并选择 Basic 选项卡。提供队列名称 CICSOUTPUTXML
    2. 单击 CICS OUTPUT (EBCDIC) 节点并选择 Basic 选项卡。提供队列名称 CICSOUTPUT
    3. 接受其他设置的默认值。
  5. 将消息流部署到消息代理执行组。

5. 执行消息流

  1. 下载本文末尾的 CICSTestFlow.zip 文件并解压下载的文件。这个压缩文件包含这个消息流的项目交换文件 (CICSTestFlow_PI.zip)、输入消息 XML (MsgIn.xml)、COBOL CICS 程序 (RDVSAM1.cbl) 以及程序习字簿 (RDVSAMC1.cpy)。
  2. 将来自 MsgIn.xml 文件的输入消息放入 CICSINPUT 队列中。
  3. 获取来自 CICSOUTPOUTCICSOUTPUTXML 队列的输出消息。
  4. 使用以不同的 XML 输入数据组合执行这个消息流,然后检查响应。

对于测试,有几种不同的可以从 WebSphere MQ 发送并接收消息的方法。一种方法是使用免费实用工具 rfhutil: 从 IBM Support 站点将 rfhutil 下载为一个 WebSphere MQ 支持包

图 2 和 3 是使用 rfhutil 的输出消息的快照:

图 2. 输出消息(EBCDIC 格式),从 CICSOUTPUT 队列读取,使用 COBOL 习字簿 RDVSAMC1
输出消息(EBCDIC 格式),从 CICSOUTPUT 队列读取,使用 COBOL 习字簿 RDVSAMC1
输出消息(EBCDIC 格式),从 CICSOUTPUT 队列读取,使用 COBOL 习字簿 RDVSAMC1
图 3. 输出 XML 消息(ASCII 格式),从 CICSOUTPUTXML 队列读取
输出 XML 消息(ASCII 格式),从 CICSOUTPUTXML 队列读取
输出 XML 消息(ASCII 格式),从 CICSOUTPUTXML 队列读取

下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=778826
ArticleTitle=使用 CICSRequest 节点配置 WebSphere Message Broker 和 CICS Transaction Server
publish-date=12052011