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

CICSRequest 节点是 Websphere Message Broker V7 中的一个新特性,它支持 Websphere Message Broker V7 充当 IBM CICS Transaction Server (TS) 的一个客户端,调用 CICS 事务并从 CICS TS 接收响应。本文将给出相关的详细信息。

Saurabh Dixit, 软件工程师,TXSeries Test Team, IBM

作者照片Saurabh Dixit 在 WebSphere TXSeries 和 WebSphere Message Broker 测试团队工作了 5 年。他擅长数据库测试,拥有计算机科学硕士学位,专攻软件工程。



Avinash Jhawar, 高级软件工程师, IBM

Avinash Jhawar 的照片Avinash Jhawar 拥有 7 年多软件测试和开发经验,目前是 WebSphere Message Broker 团队的成员。



Pabitra Mukhopadhyay, 软件工程师, IBM

Pabitra Mukhopadhyay 的照片Pabitra Mukhopadhyay 在 IBM 大型机 (System z) 环境下工作了 5 年多,拥有应用程序开发、增强和测试方面的经验,目前是 WebSphere Message Broker 团队的成员。



2011 年 12 月 05 日

简介

本文展示 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 节点的消息流

使用 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
图 3. 输出 XML 消息(ASCII 格式),从 CICSOUTPUTXML 队列读取
输出 XML 消息(ASCII 格式),从 CICSOUTPUTXML 队列读取

下载

描述名字大小
PI 文件、Input Message、COBOL 程序和习字簿CICSTestFlow.zip8KB

参考资料

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


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