结合使用 CICS 和 DB2 pureXML,第 2 部分: 通过 CICS Web 服务执行高级 XML 存储和检索

更多场景和用例

本文是系列文章的第二篇。第 1 部分 关注通过两个通用例程(管道处理程序)扩大 CICS® Web 服务,这两个例程支持两个场景在 DB2(R) pureXML 中的 XML 存储和检索。第二篇文章介绍了另外两个场景:服务请求场景和服务响应场景。服务请求场景显示了如何引入一个自定义管道处理程序,更进一步地加强 CICS Web 服务,在压缩代表 SOAP 消息的业务数据的 XML 之后,在关系表格或者 XML 表格中存储 XML 数据。服务响应场景显示了如何引入自定义管道处理程序,作为 XML 来发布关系数据,如何在返回服务响应中的数据之前,通过 SQL 直接修改 XML 数据。本文还说明了如何通过 CICS COMMAREA 或者容器中的简易放置视图访问作为关系数据的已存储 XML 数据。“下载” 部分有部分示例 COBOL 源代码。

Daniel Millwood, 软件工程师, IBM

Daniel MillwoodDan Millwood 是 Hursley 的 IBM Software Group 的软件工程师,与 CICS Services 和 Technologies 团队一起工作。在 IBM 的 15 年间,Dan 花费了 7 年从事 WebSphere MQ for z/OS 的开发,随后开发 WebSphere Application Server 的平台消息组件,最后他加入了 CICS 开发组织。Dan 热爱摄影,同时还喜欢徒步旅行,独木舟和踢足球。



Susan Malaika, 资深技术人员, IBM  

Susan MalaikaSusan Malaika 在 IBM Information Management Group 工作。她的专长包括 XML、Web 技术和网格计算。她与人合作出版了关于 Web 的专著,发表了关于 Web 的文章。她是 IBM Academy of Technology 的成员。



2011 年 2 月 14 日

简介

CICS Web 服务使您能够通过 web 服务访问 CICS 应用程序。CICS 应用程序可以调用 web 服务。CICS 提供了多种处理程序,包括管道和应用程序处理程序,控制输入和输出的 web 服务消息。您还可以编写自己的处理程序。本文假设您熟悉 CICS Web 服务。

DB2 pureXML 支持 XML 集合(列)中的 XML 存储。在应用程序编程中,例如 Java,COBOL,或者 C,可以通过 XPath 和 SQL/XML 索引或者控制已存储的 XML 中独立的 XML 元素和属性。您还可以查看关系表格中已存储的 XML。

直接存储和检索 XML 的好处包括以下内容:

  • 系统更易于设计:无需(或者很少需要)数据规范化。
  • 系统开发更迅速:在输入和输出数据和已存储数据间映射较少。
  • 系统执行更快速:更少的关系节点和 XML 粉碎,减少对 CPU 的消费。
  • 系统演化更快速:较少需要数据库更改,因为只要 XML 组织良好,它就能够存储在数据库中(并且有选择地验证)。
  • 系统更易于理解:数据结构跨整个系统和数据库是一致的。
  • 系统可以直接原型化:较少需要自定义,数据库设计简单。
  • 系统能够和 web 技术流畅地集成:Web 技术是基于 XML 的。

DB2 pureXML 以解析形式存储 XML 数据。因此,在许多情况下,您无需在 CPU 密集的中间层反复解析相同的 XML。相应的,您可以使用声明语言,例如 XPath 或者 SQL/XML,控制已解析的 XML,如图 1 所示。

图 1. 一次解析 — 访问许多用 DB2 pureXML 的内容
客户和协议在 CICS WebSphere 服务器左边发送 XML,而 DB2 pureXML 在服务器的右边发送 XML

本文详述了以下内容:

检查场景

本系列的“第一篇”文章中 介绍了了两个场景。文章中的场景 1 将一个输入 web 服务 XML 消息,包括 SOAP 处理程序,存储到一个 DB2 XML 列中,如图 2 所示。

图 2. 服务请求:使用 DB2 pureXML 记录入站消息
Exec CICS 使用管道处理程序使容器放入 XML,Exec SQL 插入 Redbook,DB2 记录 SOAP 消息

本文通过描述以下的场景来进一步开发场景 1:

场景 1A
使用 SQL/XML 从 SOAP 消息中提取业务数据,然后存储 XML
场景 1B
使用 SQL/XML 将 XML 转换(分解)到关系格式,然后将其存储

第 1 部分 中的场景 2 检索存储在包含 SOAP 处理程序的 DB2 中的 XML 数据,然后在对 web 服务请求的的响应中将其返回,如图 3 所示。

图 3. 服务响应:使用 DB2 pureXML 创建出站消息
Exec CICS 使用管道处理程序将容器放入 XML,Exec SQL 选择 XML 序列化

本文通过描述以下的场景来进一步开发场景 2:

场景 2A
通过 DB2 10 for z/OS 功能升级 XML 数据
场景 2B
使用 SQL/XML 作为 XML 发布关系数据,然后在 web 服务请求的响应中返回产生的 XML。

介绍新场景

以下是本文中的新场景。

CICS 服务请求
服务请求场景,场景 1A 和 1B,举例说明了使用 pureXML 访问和控制入站 web 服务请求消息中的数据的方法。SQL 用于从 SOAP 消息提取业务数据,然后在 DB2 中存储业务数据。在场景 1A 中,业务数据作为 XML 存储。变体也讨论了支持作为关系来访问作为 XML 存储的数据。场景 1B 提供了一个选项,在这个选项中 XML 被分解支持数据作为关系被存储。
CICS 服务响应
服务响应场景 2A 描述了如何通过 DB2 10 for z/OS 功能升级 XML 数据。服务响应场景 2B 图示了如何通过 DB2 8 z/OS 功能,作为 XML 返回关系数据。本文的例子使用这个来构建一个从 web 服务器返回的 web 服务响应消息。

图 4 显示了各个新场景如何迁移:

  • 场景 1A 处理服务请求,在 DB2 服务器的 XML 存储表格上存储完整的 XML。
  • 场景 2A 检索已存储的 XML,对其完全修正,然后输出一个服务响应。
  • 场景 1B 处理服务请求,在 DB2 服务器上将其存储为关系数据。
  • 场景 2B 检索已存储的关系数据,以 XML 格式输出一个服务响应。
图 4. 服务请求和响应流程
服务请求和响应在左,在通往 XML 或者 DB2 存储中通过 4 个不同的场景(2 输入,2 输出)

表格 1 显示了两篇文章中场景的场景摘要。参见 文章 1 。文章 2 参见本文。DB2 z/OS 版本指明了提供支持场景功能的 DB2 版本。

表 1. CICS Web 服务清单和 DB2 pureXML 场景
文章(第 1 部分或者第 2 部分)DB2 z/OS 版本场景名称描述
第 1 部分9场景 1:Request - XML with SOAP header在有 SOAP 处理程序的 DB2 pureXML 中存储输入 XML
29场景 1A:Request - Modified XML(无需 SOAP 处理程序提取业务数据)使用 SQL/XML 提取业务数据,在 DB2 pureXML 中存储输入 XML,移除 SOAP 处理程序。此外,通过 SQL/XML 视图访问作为关系数据的已存储 XML
29场景 1B:Request - Relational使用 SQL/XML 在 DB2 中作为关系存储输入 XML,分解 XML
结合使用 CICS 和 DB2 pureXML9场景 2:Response - XML with SOAP header检索已存储在 DB2 pureXML 中的 XML,将其作为响应返回
210场景 2A:Response - Modified XML检索并修正 DB2 pureXML 中存储的 XML,使用 DB2 10 for z/OS 功能将其作为响应返回
28场景 2B:Response - Relational检索存储的关系数据,使用 SQL/XML 作为响应将其返回,将关系数据作为 XML 发布

使用 DB2 功能来控制 XML 的好处包括以下内容:

控制复杂的 XML
如果入站 XML 数据很复杂,有多层嵌套结构,那么使用 XPath 查询访问数据就比使用 CHANNEL 和 CONTAINERs 接口更简单,该接口由 CICS 提供的应用程序处理程序提供。
一次解析的方法
如果数据在 DB2 中需要是持久的,那么如果所有 XML 控制在 DB2 中执行,就会使用较少的 CPU。
输入信息的记录
使用此处描述的部分技术,维护输入消息的可查询记录,使它更容易追踪系统当前正在发生什么。

了解 CICS Web 服务配置

文章的这部分说明了 CICS Web 服务的配置,以及在何处引入 pureXML 功能。CICS Web 服务使用许多 CICS 资源,例如 URIMAP,包括一个或者多个处理程序的 PIPELINE,WEBSERVICE 资源,等等。如果您不熟悉 CICS Web 服务,推荐您阅读一些该主题相关的介绍资料,然后再继续本文。特别是,它假设您对 CICS PIPELINE 和管道处理程序很熟悉。查看 参考资料 部分获取适合的文档。

当一个 web 服务消息(一个 SOAP 消息)通过 CICS 管道时,0 个或者多个处理程序能够访问消息,根据消息内容进行决策。CICS 提供这些处理程序负责安全,分布式 Units of Work(UOWs)等,如图 5 所示。

图 5. CICS Web 服务处理程序
请求通过可选的,终端的,以及应用程序的处理程序,运行业务逻辑并答复

在这些处理程序运行后,消息通过到终端处理程序。终端处理程序负责处理 SOAP 消息。

您可以编写自己的处理程序,比如在 第 1 部分 中描述的通用目的的终端处理程序 WEBINST。然而,CICS 提供了在入站 SOAP 消息上执行许多检查的 SOAP 处理程序,保证它和 SOAP 规格兼容,并且在错误情况中返回正确的 SOAP 故障。对于本文,使用提供的 SOAP 处理程序,获取它所提供的好处,包括修正 CICS 用户 ID 和反式 ID 的能力,在这些 ID 下能够执行业务逻辑。

在 CICS 提供的 SOAP 处理程序运行之后,控制被传递到应用程序的处理程序上。应用程序处理程序通常将 SOAP 消息主体转换为适用于标准 CICS 程序的数据结构,然后链接到那个程序。CICS 提供名为 DFHPITP,执行转换的应用程序处理程序。比起使用 DFHPITP 将 XML 转换为 COMMAREA 结构或者有 CONTAINERS 的 CHANNEL,您可以创建一个名为 PUREXML(A 或者 B)的应用程序处理程序,将数据插入 DB2。然后应用程序处理程序能够链接业务逻辑,它可以通过 SQL 命令执行查询和升级数据。

清单 1 显示了管道配置文件的例子。

清单 1. CICS 管道配置文件例子
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
  <provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
    <service>                                                  
      <terminal_handler>                                           
        <cics_soap_1.1_handler/>                                      
      </terminal_handler>                                          
    </service>                                                 
    <apphandler>PUREXMLA</apphandler>                               
</provider_pipeline>

场景 1A:存储来自 DB2 pureXML 中输入 XML 的业务数据

存储 XML 的 DB2 表格如清单 2 中所定义的。

清单 2. 存储 XML 的 DB2 表格定义
CREATE TABLE REDBOOK.SOAPBODY (
  ID   ROWID NOT NULL GENERATED ALWAYS,
  BODY XML)
CCSID EBCDIC
IN DATABASE REDBOOK;

包含在入站消息中的 SOAP 主体内容,比如业务数据,以 XML 格式存储在名为 BODY 的 DB2 pureXML 列。类型 ROWID 的 ID 字段也包括在内。当 XML 数据存储时,有一个数据键很有帮助,所以稍后如果业务逻辑需要访问入站 XML,它就有简单方法来找到它。ROWID 支持这个功能。

当请求到达 CICS 应用程序处理程序,整个 SOAP 信封从 DFHREQUEST 容器被读取到名为 XMLDATA 的变量中。一旦 SOAP 消息在内存中,SQL 就用于提取消息主体的内容(业务数据),并且将它存储在表格 REDBOOK。在 BODY 列中的 SOAPBODY 如清单 3 所示。

清单 3. 作为 XML 存储来自输入 XML 消息的业务数据的 SQL(无需 SOAP 头文件)
EXEC SQL
  SELECT ID INTO :WS-ROWID
    FROM FINAL TABLE(
    INSERT INTO REDBOOK.SOAPBODY ( BODY )
       SELECT XMLDOCUMENT ( X.BODY )
         FROM XMLTABLE(
         XMLNAMESPACES
       ('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "datans",
        'http://schemas.xmlsoap.org/soap/envelope/' AS "soapns"),
        '$i/soapns:Envelope/soapns:Body'
        PASSING                                            
         XMLPARSE(DOCUMENT :XMLDATA STRIP WHITESPACE) AS "i"
         COLUMNS
           "BODY" XML PATH 'datans:SWITCHOperation' ) AS X)
END-EXEC.

当 SOAP 主体被插入到表格时,DB2 生成 ROWID 列的内容。SQL 语句选择 ROWID,并且将其存储在名为 WS-ROWID 的变量中。然后,这个变量就能被传递到任何需要访问已存储的 SOAP 主体的业务逻辑。您可能需要将修复应用到 APAR PM25203,以这种方法使用 ROWID。

注意:在本文中的例子在 DFHREQUEST 容器中和整个消息一起运作。虽然 CICS 提取了消息的主体,并且在名为 DFHWS-BODY 的容器中提供它,DB2 在其自身的容器中并不了解数据为有效 XML。这是因为 CICS 通过在另一个名为 DFHWS-NAMESPACES 的容器中的入站请求 SOAP 信封中声明的任何命名空间。如果在 DFHWS-BODY 的数据引用这些命名空间,XML 解析器就会假设它们丢失。在 DB2 的情况下,会产生 SQL 故障,数据也不能被解析。


场景 1A 变体:访问作为关系数据的已存储 XML

存储在场景 1A 中的数据能够作为 XML 直接被访问,您还可以创建数据的关系视图。为了完成这个任务,创建一个视图,将视图中的列映射到所需的 XML 消息组件。在这个例子中,入站 SOAP 请求消息包括用户帐户相关的数据。从 SOAP 消息中取得三个信息,通过名为 ACCVIEW 的视图使其可用:帐户号码,帐户类型,以及帐户余额。DB2 管理器创建视图,同时设定 CICS Web 服务。清单 4 显示了如何创建视图。

清单 4. 关系数据的 DB2 视图定义(从输入 XML 消息派生)
CREATE VIEW ACCVIEW(ACCOUNTNUM, ACCOUNTTYPE, BALANCE) AS
   SELECT X.* FROM REDBOOK.SOAPBODY RED, XMLTABLE(
    XMLNAMESPACES('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "datans"),
    '$acc/datans:SWITCHOperation/datans:account_details'
    PASSING RED.BODY as "acc"
    COLUMNS
            "ACCOUNTNUM"  CHAR(8) PATH 'datans:account_number',
            "ACCOUNTTYPE" CHAR(1) PATH 'datans:account_type',
            "BALANCE"    CHAR(8) PATH 'datans:balance') AS X;

在运行时,提供一个由 CICS 提供的 SOAP 处理程序派生的应用程序处理程序。应用程序处理程序在 DB2 中插入 SOAP 消息。然后数据就能通过使用典型 SQL 的视图访问数据,如清单 5 所示。

清单 5. 通过视图访问 XML 关系数据的 SQL
EXEC SQL
  SELECT BALANCE FROM ACCVIEW WHERE ACCOUNTNUM = '12345678'
END-EXEC.

场景 1B:在 DB2 pureXML 中将输入 XML 存储为关系数据

在场景 1B 中使用的 DB2 表格如清单 6 所示。

清单 6. 关系数据(由输入 XML 消息派生)的 DB2 表格定义
CREATE TABLE REDBOOK.ACCOUNT (
  ID   ROWID NOT NULL GENERATED ALWAYS,
  ACCOUNTNUM  CHAR(8),
  ACCOUNTTYPE CHAR(1),
  BALANCE     CHAR(8))
IN DATABASE REDBOOK;

DB2 解析入站请求消息,消息的某些组件被提取并存储在表格的列中。正如 场景 1A 所示,当请求到达 CICS 应用程序处理程序时,整个 SOAP 信封从 DFHREQUEST 容器中读取到名为 XMLDATA 的变量中。

接下来,SQL 调用从入站消息提取特殊字段,将它们存储在 REDBOOK。ACCOUNT 表格如清单 7 所示。

清单 7. 将输入 XML 消息存储为关系数据的 SQL
EXEC SQL
  SELECT ID INTO :WS-ROWID
  FROM FINAL TABLE(
    INSERT INTO REDBOOK.ACCOUNT
         (ACCOUNTNUM, ACCOUNTTYPE, BALANCE)
       SELECT X.ACCOUNTNUM, X.ACCOUNTTYPE, X.BALANCE
         FROM XMLTABLE(
          XMLNAMESPACES
           ('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "D",
            'http://schemas.xmlsoap.org/soap/envelope/' AS "S"),
          '$i/S:Envelope/S:Body/D:SWITCHOperation/D:account_details'
          PASSING
           XMLPARSE(DOCUMENT :XMLDATA STRIP WHITESPACE) AS "i"
          COLUMNS
            "ACCOUNTNUM"  CHAR(8) PATH 'D:account_number',
            "ACCOUNTTYPE" CHAR(1) PATH 'D:account_type',
            "BALANCE"     CHAR(8) PATH 'D:balance') AS X)
END-EXEC.

作为 SQL 调用的一部分,被插入的 ROW 的 ROWID 值被返回到名为 WS-ROWID 的变量中。一旦执行 SQL 调用,存储在 WS-ROWID 变量中的 ROWID 值就被放置到 CICS 容器中,并且在包含业务逻辑的程序中进行 EXEC CICS LINK 调用。业务逻辑程序可以通过使用已传递的 ROWID 值选择它来访问 DB2 中新插入的数据,如清单 8 所示。

清单 8. 选择已存储的关系数据的 SQL
EXEC SQL
  SELECT ACCOUNTNUM, ACCOUNTTYPE, BALANCE
  INTO :WS-ACCNUM, :WS-ACCTYPE, :WS-BALANCE
  FROM REDBOOK.ACCOUNT
  WHERE ID = :WS-ROWID
END-EXEC.

场景 2A:检索并修改已存储的 XML

在 DB2 10 for z/OS 中,您可以使用 SQL 直接修改 XML。您可以通过在 XMLMODIFY 关键词中指定适当的 XPath 直接添加,修改,或者删除 XML 节点。清单 9 显示如何修正 account_balance 的值。

清单 9. 修改已存储的 XML 数据的 SQL
EXEC SQL
UPDATE REDBOOK.ACCOUNT set info = XMLMODIFY(' 
  REPLACE VALUE OF NODE /account_details/account_balance
 WITH "1000000.00"')
 WHERE ID = :WS-ROWID
END-EXEC

通过 XMLMODIFY 关键词,您可以变更已存储的 XML 来重新格式化已存储的数据,适应所需输出消息的结构。


场景 2B:检索并发布已存储的关系数据

场景 2B 显示了如何创建包含关系数据的 XML。为了实现这个例子的目的,创建 场景 1B 中使用的相同 web 服务响应消息。描述 web 服务的 WSDL 是关于 CICS 和 DB2 pureXML 的 第 1 部分 中使用的相同 WSDL。WSDL 非常简单。响应消息包括和请求消息相同的元素。

在场景 1B 的例子中,请求消息被分解为关系数据,并在业务逻辑程序调用之前被存储在 DB2 中。业务逻辑通过它检索 ROWID 值的方法,访问来自请求消息的已存储的关系数据。业务逻辑修改帐户余额。

回到应用程序处理程序,创建包括已更新的余额以及其他响应消息所需值的 XML。再次使用 ROWID 查找返回的值。当编写一个应用程序处理程序时,CICS 期待当应用程序处理程序完成它的处理时,容器 DFHWS-BODY 将会包含 SOAP 响应消息的主体。因此,您需要编写一个创建 SOAP 主体元素的 SQL 调用,并且在那个元素中,您需要创建被返回的业务数据。

清单 10 显示了 SQL 创建示例 SOAP 主体。已创建的 XML 被放置在名为 XMLREPLY 的变量中。

清单 10. 将 XML 发布为关系数据的 SQL
EXEC SQL
  SELECT
    XMLELEMENT( NAME "soapenv:Body",
        XMLNAMESPACES
          ('http://www.SWITCHI.com/schemas/SWITCHIInterface' AS "p0",
           'http://schemas.xmlsoap.org/soap/envelope/' AS "soapenv"),
      XMLELEMENT( NAME "p0:SWITCHOperationResponse",
        XMLELEMENT( NAME "p0:account_details",
          XMLELEMENT( NAME "p0:account_number", ACC.ACCOUNTNUM),
          XMLELEMENT( NAME "p0:account_type", ACC.ACCOUNTTYPE),
          XMLELEMENT( NAME "p0:balance", ACC.BALANCE)
        )
      )
    )
    INTO :XMLREPLY
    FROM REDBOOK.ACCOUNT ACC
    WHERE ID = :WS-ROWID
END-EXEC.

注意:当测试这个场景时,您或许会发现 DB2 创建的 XML 由这样的编码语句开始:<?xml version="1.0" encoding="IBM285"?>。CICS 并不期待在 DFHWS-BODY 容器中的编码语句。因此,当在 COBOL 程序 PUREXMLB 中调用 EXEC CICS PUT CONTAINER 时,要把答复的 SOAP 主体放入 DFHWS-BODY 容器,代码就将数据放置在编码语句后面。


测试新场景

第 1 部分 提供了明确的指令来测试 CICS Web 服务。如果需要,请参见那篇文章了解测试本文中创建的 web 服务的信息。或者完成以下步骤来测试新场景。

步骤 1 — 创建 CICS 管道配置文件

要创建 CICS 管道配置文件,请完成以下步骤:

  1. 复制清单 11 所示的管道配置文件到 UNIX System Services(USS)如 /u/user/config/AdvancedScenario1A_pipeline.xml。
清单 11. 场景 1A 的 CICS 管道配置文件
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
  <provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
    <service>
      <terminal_handler>
        <cics_soap_1.1_handler/>
      </terminal_handler>
    </service>
    <apphandler>PUREXMLA</apphandler>
</provider_pipeline>
  1. 复制如清单 12 所示的管道配置文件到 UNIX System Services(USS)如 /u/user/config/AdvancedScenario1B_pipeline.xml.
清单 12. 场景 1B 和场景 2B 的 CICS 管道配置文件
<?xml version="1.0" encoding="EBCDIC-CP-US"?>
  <provider_pipeline xmlns="http://www.ibm.com/software/htp/cics/pipeline">
    <service>
      <terminal_handler>
        <cics_soap_1.1_handler/>
      </terminal_handler>
    </service>
    <apphandler>PUREXMLB</apphandler>
</provider_pipeline>

步骤 2 — 创建并安装 CICS 资源

下载 部分提供的 zip 文件包含本文中使用的应用程序处理程序的 COBOL 源代码。zip 文件包含处理程序 PUREXMLA 和 PUREXMLB。两个处理程序都分别链接到名为 PUREBUSA 和 PUREBUSB 的 COBOL 业务逻辑程序。完成以下步骤创建并安装 CICS 资源:

  1. 使用集成的 DB2/CICS/COBOL 编译器编译并链接所有的 4 个程序。zip 文件中包括用于编译程序的 JCL。提示: 检查在提供的 JCL 中指定的编译器和预编译器选项,保证提供的选项和您通常使用的选项兼容。
  2. 通过在您所在的地区创建和安装以下的 CICS 资源来绑定 DB2 计划:
    • PIPELINE(PUREXMLA) CONFIGFILE(/u/user/config/AdvancedScenario1A_pipeline.xml) SHELF(/u/user/shelf)
    • URIMAP(PUREXMLA) USAGE(PIPELINE) PIPELINE(PUREXMLA) HOST( * ) PATH(/pureXML/AdvancedScenario1A)
    • PROGRAM(PUREXMLA) DATALOCATION(ANY)
    • PROGRAM(PUREBUSA) DATALOCATION(ANY)

    场景 1B 和场景 2B 需要以下 CICS 资源:

    • PIPELINE(PUREXMLB) CONFIGFILE(/u/user/config/AdvancedScenario1B_pipeline.xml) SHELF(/u/user/shelf)
    • URIMAP(PUREXMLB) USAGE(PIPELINE) PIPELINE(PUREXMLB) HOST( * ) PATH(/pureXML/AdvancedScenario1B)
    • PROGRAM(PUREXMLB) DATALOCATION(ANY)
    • PROGRAM(PUREBUSB) DATALOCATION(ANY)

    所有新场景都需要 CICS 资源 TCPIPSERVICE(PUREXML) PORT(xxxxx) PROTOCOL(HTTP)。

    DB2 需要新场景的以下 CICS 资源:

    • DB2ENTRY(PUREXML) ACCOUNTREC(TXid) AUTHTYPE(Userid) DRollback(Yes) PLAN(PUREXML)
    • DB2TRAN(PUREXML) ENTRY(PUREXML) TRANSID(CPIH)

步骤 3 — 测试 web 服务

zip 文件 提供 web 服务的示例 WSDL。

  • AdvancedScenario1A.wsdl 用于场景 1A。
  • AdvancedScenario1B.wsdl 用于场景 1B 和场景 2B。

查阅第一篇文章中标题为 “结合使用 CICS 和 DB2 pureXML” 小节部分,获取使用 WSDL 测试 web 服务的例子,但是使用以下的端点:

  • http://<CICS hostname>:<CICS port>/pureXML/AdvancedScenario1A 用于场景 1A
  • http://<CICS hostname>:<CICS port>/pureXML/AdvancedScenario1B 用于场景 1B 和场景 2B

探索其他场景

您可以将输入 XML 消息存储为混合格式,例如混合 XML 和关系数据。也可以从混合数据创建 XML 输出消息。换句话说,本文中所有的 4 个场景都能够混合和配对。例如,您可以显示表格如何和 CICS Web 服务及 DB2 pureXML 一起使用。查看 参考资料 获取更多关于 Lotus® Forms 和 pureXML 使用的内容。

此外,您可以和 CICS Web 服务上下文环境以外的 CICS 应用程序一起使用 DB2 pureXML。例如,您可以创建 XML 或者使用 SQL/XML 转换 XML。您还可以将 XML 放置在 CICS COMMAREAs 或者容器中。


结束语

本文说明了您如何直接使用 DB2 中的 CICS Web Service 存储输入 XML 数据。这个功能在 DB2 9 for z/OS 中可用。使用定制的 CICS 处理程序,您能够使用 SQL 解析 XML,无需 SOAP 头文件存储 XML(业务数据),作为 XML 或者以关系格式。您还可以以混合格式存储数据,XML 和 关系数据均可。

本文还说明了您如何发布作为 XML 的已存储关系数据,并且在对 CICS Web 服务的响应中将其返回。该功能在 DB2 8 for z/OS 中可用。您可以将混合数据(XML 和关系数据)发布为 XML。该功能在 DB2 9 for z/OS 中可用。本文还向您解释了如何直接修改已存储的 XML 数据(该功能在 DB2 10 for z/OS 中可用),并将其作为 CICS Web 服务响应返回。

DB2 执行 XML 控制的好处包括改善的性能(一次解析模型)和使用 XPath 和 SQL/XML 的广泛 XML 控制功能。入站消息的可查询记录是很有用的奖励。

您可以下载,配置和执行本文的配套 zip 文件,其中的示例用于说明和重新创建本文所述场景。

致谢

感谢 Mengchu Cai,Arndt Eade,Ian J Mitchell 和 Marcus Paradies 的支持和贡献。


下载

描述名字大小
MVSFilesMVSFilesPart2.zip10KB

参考资料

学习

获得产品和技术

讨论

条评论

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, XML, SOA and web services
ArticleID=626685
ArticleTitle=结合使用 CICS 和 DB2 pureXML,第 2 部分: 通过 CICS Web 服务执行高级 XML 存储和检索
publish-date=02142011