IMS 解决方案: 使用 IMS 同步 callout 函数通过 IMS SOAP Gateway 调用 CICS Web 服务

本文通过一个示例场景演示如何使用 IMS™ 的同步 callout 函数通过 IMS SOAP Gateway 调用现有的 CICS® Web 服务。这个场景采用一个用 COBOL 编写的现有 IMS 应用程序,并通过改进它从现有的 CICS Web 服务请求更多信息。本文概述示例配置和代码示例,详细解释如何生成必需的工件。本文还讨论如何解决在重建这个场景时可能遇到的问题。

Kevin Hite, IMS 解决方案测试工程师, WSO2 Inc

Kevin Hite 照片Kevin Hite 是在 IMS Solution Test 团队工作的软件工程师。他参与了在模拟客户环境中的模拟客户应用程序中集成新的 IMS 函数。



Shavia Jones, 问题诊断工具解决方案工程师, WSO2 Inc

Shavia Jones 照片Shavia Jones 是在加州 San Jose 的 IBM Silicon Valley Laboratory 工作的软件工程师,并且是 Problem Determination Tools Solution Test 团队的成员。他的任务是开发和执行使用 Problem Determination Tools 的用例,从客户的角度确保能够在模拟客户环境中方便地使用这些工具。



John Tao, 问题诊断工具解决方案工程师, WSO2 Inc

John Tao 照片John Tao 是在加州 San Jose 的 IBM Silicon Valley Laboratory 工作的软件工程师,并且是 Problem Determination Tools Solution Test 团队的成员。他的任务是开发和执行使用 Problem Determination Tools 的用例,从客户的角度确保能够在模拟客户环境中方便地使用这些工具。



Alan Villarreal, 问题诊断工具解决方案工程师, WSO2 Inc

Alan Villarreal 照片Alan Villarreal 是在加州 San Jose 的 IBM Silicon Valley Laboratory 工作的软件工程师,并且是 Problem Determination Tools Solution Test 团队的成员。他的任务是开发和执行使用 Problem Determination Tools 的用例,从客户的角度确保能够在模拟客户环境中方便地使用这些工具。



2009 年 6 月 04 日

简介

本文讨论如何在 IMS 应用程序中实现同步 callout,从而通过 IMS SOAP Gateway 调用现有的 CICS Web 服务。

IMS 同步 callout 函数

IMS 同步 callout 函数让在 IMS V10 依赖区域中运行的应用程序可以发送出站消息,从区域外请求服务或数据。对服务或数据的请求称为 callout 请求。对于同步 callout 请求,在 IMS 依赖区域中运行的 IMS 应用程序会发出一个 IMS DL/I 调用(ICAL 调用),然后等待依赖区域处理响应。出站消息可以发送到 Web 服务、消息驱动的 bean (MDB) 或 Enterprise JavaBeans (EJB) 组件。本文的 参考资料 包含关于 IMS V10 同步 callout 的背景信息的链接。

场景概述

本文使用的示例场景以一个用 COBOL 编写的 IMS 应用程序作为基础。这个应用程序的界面基于 3270 终端,使用一个标题为 Additional Customer Information 的 IMS MFS 屏幕。这个场景的需求是,从现有的 CICS Web 服务请求更多客户信息,从而增强这个应用程序。

实现方法

为了让 IMS 应用程序能够使用 CICS Web 服务,它要使用新的 IMS DLI ICAL 调用。ICAL 调用让 IMS 能够同步地调用内部和外部服务。

在实现 IMS 同步 callout 时,可以考虑选用几种方法。此场景中的实现使用 IMS SOAP Gateway。

图 1 给出示例场景中使用的 IMS 同步 callout 实现的拓扑。

图 1. IMS 同步 callout 实现的拓扑
IMS 同步 callout 实现的拓扑

应用程序开发

清单 1 中的示例代码实现一个同步 callout。为了执行这个同步 callout,需要为请求和响应创建一个 COBOL copybook。在后面生成 XML 转换器驱动程序时需要 COBOL copybook。

增强 COBOL 应用程序,使用 ICAL 调用产生一个同步 callout 请求。清单 1 中的 AIBRSNM1 值是 SOAPGWAY,这是在 DFSYDTx 中定义的 OTMA 描述符名称(见 为 IMS 定义 OTMA 目标描述符)。CALLOUT-REQUEST 包含 Web 服务的输入。CALLOUT-RESPONSE 包含 Web 服务的输出。

清单 1. 使用 ICAL 调用的示例 COBOL 代码
01 AIB.
	02 AIBRID   PIC X(8) VALUE 'DFSAIB  '.
	02 AIBRLEN  PIC 9(9) USAGE BINARY.
	02 AIBSFUNC PIC X(8) VALUE 'SENDRECV'.
	02 AIBRSNM1 PIC X(8) VALUE 'SOAPGWAY'.
	.
TO-DIS.
	MOVE IN-CUSTNUM TO SSA-KEY.
	MOVE '01ICUS' TO INCO-COMMAND
	MOVE IN-CUSTNUM TO INCO-CUSTNUM
	COMPUTE AIBOALEN = LENGTH OF CALLOUT-REQUEST
	COMPUTE AIBRLEN = LENGTH OF AIB
	COMPUTE AIBOAUSE = LENGTH OF CALLOUT-RESPONSE
	CALL 'AIBTDLI' USING DLI-ICAL AIB CALLOUT-REQUEST CALLOUT-RESPONSE

环境设置

为 IMS 定义 OTMA 目标描述符

OTMA 目标描述符位于 DFSYDTx proclib 成员中,在 IMS 启动时处理它。清单 2 给出可以用来实现这个场景的描述符。

清单 2. DFSYDTx 描述符定义
D SOAPGWAY TYPE=IMSCON TMEMBER=IMAFHWS TPIPE=HWS2SOAP 
D SOAPGWAY ADAPTER=HWSXMLA0 CONVERTR=CALLOUTD SYNTIMER=5000

这个实现的描述符的重要部分是 TPIPE 名称、TMEMBER 名称和 CONVERTR 名称。TPIPE 是与 LTERM 相似的惟一名称。TMEMBER 是连接 OTMA 的客户机的名称。对于这个场景,客户机是 IMS Connect。CONVERTR 是把 COBOL 转换为 SOAP 以及把 SOAP 转换为 COBOL 的转换器的名称。

配置了描述符之后,重新启动 IMS 并确认接收到以下消息:
DFS0578I - READ SUCCESSFUL FOR DDNAME PROCLIB MEMBER = DFSYDTI

配置 IMS Connect

清单 3 给出一个示例 IMS Connect HWSCFGxx 配置。

清单 3. HWSCFGxxx - IMS Connect 配置参数
HWS=(ID=IMAFHWS)
TCPIP=(EXIT=(HWSSMPL1,HWSSOAP1),HOSTNAME=TCPIP,IPV6=Y,PORTID=(9200))
DATASTORE=(GROUP=IMAFGRP,ID=IMAF,MEMBER=IMAFHWS,TMEMBER=IMAFOTMA,
DRU=DFSYDRU0)                                                       
ADAPTER=(XML=Y)

使用 TCPIP、PORTID、ADAPTER、DATASTORE MEMBER、DATASTORE ID 和 DATASTORE GROUP 参数设置 IMS SOAP Gateway。通过把 ADAPTER 参数设置为 (XML=Y),启用 IMS Connect 中的 XML-to-COBOL 数据转换函数。

使用 Rational Developer for System z 生成关联器和 XML 转换器驱动程序

本文讲解如何从 CICS Web 服务和 IMS 应用程序的 COBOL copybook 生成 XML 转换器驱动程序。XML 转换器驱动程序负责把 COBOL copybook 结构转换为 Web 服务能够理解的 SOAP 结构以及相反的转换。转换器链接在 IMS Connect 中,通过 OTMA 描述符引用它来处理输入和输出的消息转换。

按照以下步骤生成 XML 转换器:

  1. 使用 Rational® Developer for System z® Version 7.1.1.3 或更高版本,创建一个新的 Workstation COBOL or PL/I: Local Project,见图 2。
    图 2. Rational Developer for System z new project selection 向导
    New project selection 向导
  2. 导入 COBOL copybook:
    1. 确保本地工作站上有 COBOL copybook。这个 copybook 应该定义 callout-request 和 callout-response 区域。
    2. 选择在步骤 1 中创建的 Local Project。
    3. 选择 File > Import…
    4. 在 Import 向导中:
      1. 选择 General > File System
      2. 单击 Next
      3. 浏览到 COBOL copybook 所在的位置并选择适当的文件,见图 3。
        图 3. 从本地文件系统导入资源
        从本地文件系统导入资源
  3. 重复步骤 2,导入 CICS Web 服务定义 (*.wsdl)。
  4. 右键单击 *.wsdl,选择 Enable Enterprise Web Service,然后:
    1. 在 Enterprise Service Tools Wizard Launchpad 中选择图 4 所示的选项。
      图 4. Enterprise Service Tools Wizard Launchpad
      Enterprise Service Tools Wizard Launchpad
    2. 单击 Start
    3. 在 New XML to COBOL Mapping 面板上:
      1. 浏览到 Mapping source,这是 Web 服务定义 (*.wsdl)。
      2. 浏览到 Mapping target,这是 COBOL copybook。
        图 5. New XML to COBOL Mapping Session
        New XML to COBOL Mapping Session
      3. 单击 Next
      4. 确认选择了适当的源 XML 元素。
      5. 确认目标语言结构设置为 CALLOUT-RESPONSE
        图 6. 选择根 XML 元素和语言结构
        选择根 XML 元素和语言结构
      6. 单击 Next
      7. 确认 Mapping file Folder 与项目名相同,填写 Mapping file name(这通常是 .wsdl 文件名)。
      8. 单击 Finish。现在应该会出现一个新生成的图形化映射文件。
  5. 把 Web 服务输出区域映射到 callout-response 区域。从 Web 服务区域拖放到 COBOL copybook 区域,从而创建映射连接并保存文件。
    图 7. 示例映射
    示例映射
  6. 右键单击 COBOL copybook,选择 Enable Enterprise Web Service,然后:
    1. 按图 8 所示填写 Enterprise Service Tools Wizard Launchpad。
      图 8. Enterprise Service Tools Wizard Launchpad
      Enterprise Service Tools Wizard Launchpad
    2. 单击 Start
    3. 在 New XML to COBOL Mapping 面板上:
      1. 浏览到 Mapping source,这是 COBOL copybook。
      2. 浏览到 Mapping target,这是 Web 服务定义。
        图 9. New XML to COBOL Mapping
        New XML to COBOL Mapping
      3. 单击 Next
      4. 确认源语言结构设置为 CALLOUT-REQUEST
      5. 确认 Web 服务定义中的目标 XML 元素是正确的。
        图 10. 选择根 XML 元素和语言结构
        选择根 XML 元素和语言结构
      6. 确认 Mapping file Folder 与项目名相同,填写 Mapping file name(这通常是 copybook 的名称)。
      7. 单击 Finish。现在应该会出现一个新生成的图形化映射文件。
  7. 把 callout-request 区域映射到 Web 服务输入区域。从 Web 服务区域拖放到 COBOL copybook 区域,从而创建映射连接并保存文件。
    图 11. 示例映射
    示例映射
  8. 按照以下步骤生成 XML 转换器:
    1. 项目现在应该包含两个 .mapping 文件;一个用于输入映射,另一个用于输出映射。突出显示这两个映射文件(使用 CTRL+单击)。
      图 12. 选择映射文件
      选择映射文件
    2. 右键单击突出显示的映射文件并选择 Generate Conversion Code
    3. 按图 13 所示填写 Enterprise Service Tools Wizard Launchpad。
      图 13. Enterprise Service Tools Wizard Launchpad
      Enterprise Service Tools Wizard Launchpad
    4. 单击 Start
    5. 在 IMS SOAP Gateway – Map an Existing Service Interface (meet-in-the-middle) 向导的第一个面板上,单击 Next
    6. 在 Generation options 面板上,进入 Advanced Options 选项卡:
      1. 展开 Specify Compiler-related preferences 部分并确认 COBOL 编译器版本是在编译和链接 IMS Connect 中的驱动程序时 System z 上使用的编译器版本(见 把 COBOL 转换器传输和链接到 IMS Connect)。
        图 14. Generation options
        Generation options
    7. 参照图 15 填写 IMS Connect 交互属性。还需要在 IMS、IMS Connect 和 IMS SOAP Gateway 中定义一些变量,包括 TPIPE、连接绑定和 Transaction Code。
      图 15. IMS SOAP Gateway Web Service Requestor
      IMS SOAP Gateway Web Service Requestor
    8. 单击 Next
    9. 确认 Converter 驱动程序文件名与 OTIMA 描述符中指定的 CONVERTR 名称匹配(见 为 IMS 定义 OTMA 目标描述符)。
    10. 单击 Finish
    11. 确认项目现在包含:
      1. 关联器文件,用于 IMS SOAP Gateway 部署。
      2. XML 转换器驱动程序,用来链接到 IMS Connect。

把 COBOL 转换器传输和链接到 IMS Connect

按照以下步骤把 COBOL 转换器传输和链接到 IMS Connect:

  1. 通过 FTP 把生成的 COBOL 转换器驱动程序以二进制模式传输到主机系统。
  2. 提交清单 4 所示的作业,编译 COBOL 转换器驱动程序并链接到 IMS Connect。确认 COBOL 编译器级别与在 IMS SOAP Gateway 向导的 Generation options 面板的 Advanced Options 选项卡上选择的 COBOL 版本匹配(见 图 14)。
    清单 4. 编译 COBOL 转换器作业
    //CMPCREET JOB '',MSGCLASS=H,REGION=0M,TIME=10,                      
    // MSGLEVEL=(1,1),NOTIFY=&SYSUID                                     
    //ORDER JCLLIB ORDER=(IGY.V3R4M0.SIGYPROC)                           
    //RDZXML EXEC IGYWCL,LNGPRFX='IGY.V3R4M0',                           
    //  LIBPRFX='CEEV1R8Z',PARM.COBOL='TEST(NONE,SYM,SEPARATE)'          
    //COBOL.SYSIN    DD DSN=ADTOOLS.MNA.S2U1F6.IMS.COBOL(GREETD),DISP=SHR
    //COBOL.SYSLIB   DD DSN=ADTOOLS.MNA.S2U1F6.COPY,DISP=SHR             
    //COBOL.SYSDEBUG DD DSN=ADTOOLS.MNA.S2U1F6.SYSDEBUG(GREETD),         
    //  DISP=SHR                                                         
    //COBOL.SYSLIN   DD DSN=ADTOOLS.MNA.S2U1F6.OBJ(GREETD),DISP=SHR      
    //LKED.SYSLIB    DD DISP=SHR,DSN=ADTOOLS.MNA.S2U1F6.LOADLIB          
    //               DD DISP=SHR,DSN=ADTOOLS.DT810.SEQAMOD               
    //               DD DISP=SHR,DSN=CEE.SCEERUN                         
    //               DD DISP=SHR,DSN=CEE.SCEELKED                        
    //LKED.SYSLIN    DD *                                                
         INCLUDE OBJECT(GREETD)                                          
         INCLUDE RESLIB(DFSLI000)                                        
         INCLUDE SYSLIB(CEEROPT)                                         
         ENTRY GREETD                                                    
         ALIAS GREETX                                                    
         NAME GREETD(R)                                                  
    /*                                                                   
    //LKED.SYSLMOD  DD  DISP=SHR,DSN=ADTOOLS.MNA.S2U1F6.LOADLIB(GREETD)  
    //LKED.OBJECT    DD DSN=ADTOOLS.MNA.S2U1F6.OBJ,DISP=SHR              
    //LKED.RESLIB    DD DISP=SHR,DSN=IMSVS.IMAF.SDFSRESL                 
    //LKED.SYSIN     DD DUMMY                                            
    /*
  3. 重新启动 IMS Connect。

让 IMS 应用程序使用 IMS Soap Gateway 访问外部 Web 服务

按照本节中的步骤部署 Web 服务定义、关联器文件和连接绑定。示例场景环境使用 IMS Soap Gateway for USS (OMVS)。

  1. 按照以下步骤创建连接绑定:
    1. 在部署实用程序中,选择 Task 10: Enable your IMS application to access an external Web Service
    2. 选择 Task 12: Create, Update, Delete or View connection bundle for callout
    3. 输入 c 创建新的连接绑定。
    4. 输入连接绑定的名称。使用的名称必须与在 IMS SOAP Gateway 向导的 IMS SOAP Gateway Web Service Requestor 面板上为 Inbound and Outbound connection bundles 指定的名称匹配(见 图 15)。
    5. 输入 IMS Connect 的 IMS 主机名或 IP 地址。
    6. 输入 清单 3 中作为 TCPIP PORDID 指定的 IMS 端口号。
    7. 输入 清单 3 中作为 DATASTORE ID 指定的 IMS 数据存储名。
    8. 输入您的 IMS 用户 ID(可选)。
    9. 输入您的 IMS 密码(可选)。
    10. 输入 清单 3 中作为 DATASTORE GROUP 指定的 IMS 组名(可选)。
    11. 输入 清单 2 中作为 TPIPE 指定的 Callout TPipes。
    12. 查看连接绑定的所有设置是否正确。
    图 16. 连接绑定设置
    连接绑定设置
  2. 按照以下步骤通过 FTP 传输关联器文件:
    1. 通过 FTP(以二进制模式)把前面在 使用 Rational Developer for System z 生成关联器和 XML 转换器驱动程序 一节中创建的关联器文件传输到以下目录:
      SOAP Install Directory/server/webapps/imssoap/xml/
    2. 确认文件具有 Read Write 权限。下面的命令向 Owner、Group 和 Other 授予读写权限。把 666 替换为符合公司策略的适当权限: Chmod 666 corr.xml
  3. 按照以下步骤通过 FTP 传输 Web 服务定义文件:
    1. 通过 FTP(以二进制模式)把前面在 使用 Rational Developer for System z 生成关联器和 XML 转换器驱动程序 一节中创建的 Web 服务定义文件传输到以下目录:
      SOAP Install Directory/server/webapps/imssoap/wsdl/
    2. 确认文件具有 Read Write 权限。
  4. 按照以下步骤部署 callout 客户机:
    1. 在部署实用程序中,选择 Task 10: Enable your IMS application to access an external Web Service
    2. 选择 Task 13: Deploy a callout client
    3. 输入本节步骤 3 中通过 FTP 传输的 Web 服务定义文件名。
    4. 输入本节步骤 2 中通过 FTP 传输的关联器文件名。
    5. 确认出现了以下消息:
      Callout client was successfully deployed.
  5. 重新启动 IMS SOAP Gateway。

诊断问题

即使设置了环境并实现了 IMS 应用程序产生同步 callout 请求所需的修改,也可能出现各种问题。本节描述可能遇到的问题的症状并提供调试和解决问题的建议。

同步 callout 请求和响应流

图 17 给出 IMS 同步 callout 实现的拓扑图,其中标出了本节描述的请求和响应流的组成部分。

图 17. IMS 同步 callout 实现拓扑的请求和响应流
IMS 同步 callout 实现拓扑的请求和响应流
  1. IMS 应用程序发送请求。

    检查 IMS 应用程序的第一步是,确认为 ICAL 调用设置了适当的参数。例如,使用 Rational Developer for System z 和 Debug Tool 查看 AIB 的值(见图 18)。

    检查 AIBSFUNC、AIBRSNM1、AIBRSFLD 和请求区域。对于同步 callout,AIBSFUNC 或子函数名必须是 SENDRECV。AIBRSNM1 是 OTMA 描述符的名称。如图 18 所示,AIBRSNM1 值为 SOAPGWAY,这与 清单 2 中定义的描述符匹配。AIBRSFLD 参数定义等待同步调用完成处理的时间。在调试应用程序时,应该提高这个值,以便有时间分步执行代码。请求区域必须与在生成 COBOL 转换器驱动程序时使用的请求区域匹配。

    图 18. Rational Developer for System z 和 Debug Tool
    Rational Developer for System z 和 Debug Tool
    图 18. Rational Developer for System z 和 Debug Tool
    Rational Developer for System z 和 Debug Tool
  2. IMS 让请求在 TPIPE 中排队。

    应用程序发出请求之后,执行以下命令:

    /DISPLAY TMEMBER IMAFHWS TPIPE ALL SYNC

    通过命令的输出检查 ICAL 请求是否动态地创建了 TPIPE 并对消息进行排队。清单 5 给出命令输出的示例。

    检查的重点是 TPIPE、MODE 和 SYNCOT。这个示例中的 TPIPE 名称是 HWS2SOAP,这与 清单 2 中的描述符匹配。基于 MODE 和 SYNCOT 值的 callout 状态见 表 1

    清单 5. 命令输出示例
    REPLY TO 90 IS;/DIS TMEMBER IMAFHWS TPIPE ALL SYNC            
    MBR/TPIP  ENQCT  DEQCT    QCT  INPCT   OPT MODE  SYNCOT  NO-RSP STATUS SMEM    IMAF
    IMAFHWS
    -HWS2SOAP     0      0      0      0     W    B       0       0        IMAF
    *08352/142921*   IMAF
  3. IMS Connect 接收、转换和转发请求。

    在发出 ICAL 调用之前,启动 IMS Connect 记录器跟踪。这样就可以检查 IMS Connect 是否接收了请求。为了启动记录器跟踪,向 IMS Connect 发出以下命令:

    RECORDER OPEN

    启动记录器之后,使用以下命令发出 ICAL 调用并停止跟踪:

    RECORDER CLOSE

    使用清单 6 所示的 IDCAMS 对记录器的输出进行格式化。

    清单 6. IDCAMS 示例
    //IMAFRCRD JOB ,'BUILD PSMFSJB3',REGION=0M,
    // MSGLEVEL=(1,1),CLASS=A,MSGCLASS=H,NOTIFY=&SYSUID
    /*JOBPARM S=*
    //SELECT EXEC PGM=IDCAMS
    //DD1 DD DISP=SHR,DSN=IMSVS.IMAF.HWSRCDR
    //SYSPRINT DD DSN=ADTOOLS.SYNC1205.RECORDER,DISP=(,CATLG),
    // DCB=(RECFM=FBA,LRECL=133,BLKSIZE=13300),
    // VOL=SER=SMS000,SPACE=(CYL,(2,1),RLSE),UNIT=SYSDA
    //SYSIN DD *
      PRINT INFILE(DD1)

    查看格式化的记录器输出。如果看到了 CORTKN、CSMOKY 和 TPIPE 名称(见图 19),就说明 IMS Connect 成功地接收了 callout 请求。

  4. IMS SOAP Gateway 接收 XML SOAP 请求。

    打开 DEBUG 跟踪,检查 IMS SOAP Gateway 是否接收了 XML 格式的 SOAP 消息。按照以下步骤启用跟踪:

    1. 启动 IMS SOAP Gateway 部署实用程序。
    2. 选择 Task 4: Update IMS SOAP Gateway properties
    3. 把跟踪级别改为 DEBUG(值 5)。
    4. 重新启动 IMS SOAP Gateway。

    重新启动 IMS SOAP Gateway 之后,跟踪输出出现在以下文件中:
    SOAP Install Directory/server/logs/imssoap.log

    检查跟踪,确认网关正在轮询 TPIPE 并收到了确认消息。图 20 中的跟踪示例显示 IMS SOAP Gateway 正在轮询 TPIPE HWS2SOAP 并收到了响应。

    图 20. IMS SOAP Gateway DEBUG 跟踪示例 - 轮询
    IMS SOAP Gateway DEBUG 跟踪示例 - 轮询

    图 21 中的跟踪示例显示来自 ICAL 调用的确认和请求数据。如果正确地生成了 COBOL 转换器驱动程序,请求数据就是 XML 格式的。

    图 21. IMS SOAP Gateway DEBUG 跟踪示例 - 确认
    MS SOAP Gateway DEBUG 跟踪示例 - 确认
  5. 调用 CICS Web 服务。

    可以使用 Rational Developer for System z 和 Debug Tool 检查是否调用了 CICS Web 服务。

  6. IMS SOAP Gateway 接收和转发 XML SOAP 响应。

    CICS Web 服务返回之后,IMS SOAP Gateway 跟踪应该会显示 XML 格式的响应数据。图 22 中的跟踪示例显示转发给 IMS Connect 的 callout 响应数据。偏移量 x’60’ 上的 RESP 表明这是对 callout 请求的响应。

    图 22. IMS SOAP Gateway DEBUG 跟踪示例 - callout 响应
    IMS SOAP Gateway DEBUG 跟踪示例 - callout 响应
  7. IMS Connect 接收 XML SOAP 响应并转换响应。

    为了检查 IMS Connect 是否接收了 XML SOAP 响应,应该捕捉 IMS Connect 记录器跟踪。在跟踪中搜索 RESPHWSXML。图 23 中的跟踪示例显示一个跟踪 callout 响应消息。RESP 表明这是一个响应消息。它后面是 XML Adaptor 或 COBOL 转换器驱动程序名称。在这个示例中,转换器驱动程序名为 CALLOUTD。如果转换器成功地转换了 XML 数据,那么应该不会在控制台中看到任何 HWS 错误消息。

    图 23. 跟踪 callout 响应消息示例
    跟踪 callout 响应消息示例
  8. IMS 应用程序接收 callout 响应。

    如果 IMS 应用程序把控制返回调试会话,那么检查 AIBRETRN、AIBREASN 和响应区域。如果 AIBRETRN 和 AIBREASN 的返回码是非零的,请参见 排除故障 一节或 IMS Synchronous Callout 文档。如果 AIBRETRN 和 AIBREASN 是零,那么使用 Rational Developer for System z 和 Debug Tool 检查接收的数据是否正确(见图 24)。

    图 24. Rational Developer for System z 和 Debug Tool
    Rational Developer for System z 和 Debug Tool
    图 24. Rational Developer for System z 和 Debug Tool
    Rational Developer for System z 和 Debug Tool
表 1. 基于 MODE 和 SYNCOT 值的 callout 状态
MODE SYNCOT 状态
A 大于 1 callout 请求已经发送,但是正在等待 RESUME TPIPE
A 0 callout 已经完成,但是没有响应(由于超时或外部应用程序出现问题)
B 0 callout 已经完成,有响应
S 大于 1 callout 请求已经发送到外部应用程序,正在等待响应

排除故障

本节简要解释 AIBRETRN 和 AIBREASN 非零返回码的含义。

描述符名称无效 (0104/1020)

如果 callout 接收的 AIBRETRN/AIBREASON 是 0104/1020:

  • 确认应用程序在 ICAL AIB 中为 AIBRSNM1 设置了正确的描述符名称。
  • 确认在 IMS 启动时装载了 OTMA 描述符(DFSYDTx — 见 图 3)。如果正确地装载了它,应该会看到以下消息:
    DFS0578I - READ SUCCESSFUL FOR DDNAME PROCLIB MEMBER = DFSYDTI

无法把请求消息发送到外部应用程序 (0108/0580)

如果 callout 接收的 AIBRETRN/AIBREASON 是 0108/0580:

  • 确认 DFSYDTx 描述符包含适当的 TMEMBER 名称。这个名称应该与 IMS Connect 配置文件中的 MEMBER 参数(HWSCFGxx — 见 清单 3)匹配。

请求超时 (0100/0104)

如果 callout 接收的 AIBRETRN/AIBREASON 是 0100/0104:

  • 确认 IMS SOAP Gateway 正在轮询 TPIPE(图 20)。
  • 确认在 OTMA 描述符中指定的 TPIPE(DFSYDTx — 见 清单 2)与在 callout 关联器文件的 IMS SOAP Gateway 连接绑定中指定的 Callout TPipes 匹配。

只返回部分输出响应数据 (0100/000C)

如果 callout 接收的 AIBRETRN/AIBREASON 是 0100/000C:

  • 确认 AIBOAUSE 的设置与响应区域大小匹配。
  • 检查 IMS SOAP Gateway 日志文件中是否有任何可疑的错误,比如图 26 所示的错误。在这个示例中,可以看出 IMS SOAP Gateway 在调用 Web 服务时发生了问题。
图 26. IMS SOAP Gateway 日志文件示例
IMS SOAP Gateway 日志文件示例

外部应用程序拒绝请求消息 (0100/0108)

如果 callout 接收的 AIBRETRN/AIBREASON 是 0100/0108:

  • 确认 IMS Connect 已经运行且配置正确。
  • 确认请求区域不大于在请求区域长度字段中指定的值。

输出响应数据中返回错误消息 (0100/0100)

如果 callout 接收的 AIBRETRN/AIBREASON 是 0100/0100:

  • 确认 AIBOAUSE 的设置与响应区域大小匹配。

结束语

本文演示了实现 IMS V10 同步 callout 函数的多种方法之一。本文描述了如何在现有的 IMS TM COBOL 应用程序中实现同步 callout ICAL 调用,从而通过 IMS SOAP Gateway 调用现有的 CICS Web 服务。本文介绍了从 IMS 通过 IMS SOAP Gateway 发出同步 callout 所需的设置、问题诊断和故障排除。

参考资料

学习

讨论

条评论

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=Information Management, SOA and web services
ArticleID=394236
ArticleTitle=IMS 解决方案: 使用 IMS 同步 callout 函数通过 IMS SOAP Gateway 调用 CICS Web 服务
publish-date=06042009