在随需应变的业务中,企业级应用程序需要与企业内部或者外部的其他应用程序提供的服务集成在一起。使用面向服务的原理构建这样的集成应用程序需要灵活的业务流程执行环境,以及支持面向服务计算的遗留系统。在本文中,我们举例说明了如何使用 CICS 的 SOAP 特性(CICS TS 提供)来把遗留应用程序和在 IBM ® WebSphere ® Business Integration Server Foundation 上面运行的业务流程集成。
在这一系列文章的 第一部分中,我们介绍了制造业订单处理系统(Order to Manufacturing Processing System,OTMPS)的随需应变业务流程场景。本文描述了如何将遗留 CICS 服务同 OTMPS 流程进行集成。我们使用一个验证订单输入的 CICS 服务来检查他们包含一个允许的特征组合。例如,该服务在系统可用的物理空间中校验存储需求。这个服务接受一个订单号码以及相关的配置属性(或者特性),然后校验订单,并且返回指明校验流程结果的消息。
CICS 服务器所需的软件包含:
- 安装了带 SOAP for CICS 特征的 CICS TS 2.3。CICS SOAP 实现使用 CICS 业务事务服务(Business Transaction Services,BTS)。SOAP HTTP 传送使用 CICS Web 支持。( 注意:在本文中我们使用 CICS TS 2.3 作为基础。因为当写本文的时候,CICS TS 3.1 已经发布,并且在 CICS TS 2.3 的基础上还提供了 Web 服务能力。参阅 参考资料来查看关于 CICS TS 3.1 中可用特性的更多信息。
- CICS BTS 流程用来支持 SOAP 处理器管道。BTS 是 CICS TS 的一个组件。
- Enterprise Cobol V3 或者 Enterprise PL/I V3。
随需应变的应用程序客户端可以有许多可用的架构选择来连接到 CICS 事务服务器,包含用于 CICS 的 SOAP 特性、J2EE Connector Architecture(JCA)以及 Enterprise Java Beans。这个场景中使用的体系结构使用 SOAP for CICS 特性,并且在 图 1 中进行了说明。
图 1. 用于集成业务流程同 CICS TS 的体系结构
这个体系结构中服务提供端提供的主要组件如下:
- 服务提供传输器
- SOAP 信封转换器
- SOAP 信封构建器
- 消息适配器
CICS 提供了前三个组件;用户需要提供消息适配器组件。如 图 1 所示,这些组件提供了两个重要的功能:1)提供消息处理管道和 2)适合业务逻辑的消息。管道处理帮助 CICS 服务提供者转换进来的消息并且提取需要处理的部分。例如,在一个引入消息的场景中,服务提供者传送器从相应传输协议提供的数据(例如,HTTP 头)中提取 SOAP 消息,并且将 SOAP 消息传送给管道中的下一个处理器。SOAP 信封转换器剥离 SOAP 信封,并且将 XML 消息体传递给消息适配器。在消息发出的场景中,管道处理将为发出的 XML 消息添加消息头和所需的传输头。我们可以向管道链中添加额外的管道处理器,用来拓展诸如安全、日志和可靠性的能力。消息适配器将添加业务逻辑来将输入进来的 XML 消息映射到相应的 COMMAREA,并且调用本地或者远程 CICS 区域中的相应业务逻辑。
客户端的体系结构举例说明了可以发出 SOAP 消息的代理,这些消息包含执行 CICS 中的业务逻辑所需的 XML 消息体。该代理负责将消息放到合适的传输通信协议(例如 HTTP、HTTPS 和 MQ)中。另外,代理提供了助手程序来提取 CICS 中的消息。
OTMPS 场景中,从销售处获取一个新的客户订单后,这个订单在被发送给生产部门进行制造以前必须验证其配置信息是否正确。CICS Web 服务可以用来验证这些订单,以检查其是否包含合法的特性组合。作为输入,它需要获取一个订单号码和相关的配置参数(或特性)。被调用的服务测试该订单是否合法。输出响应包含一个表明成功或者失败的返回代码,以及一系列表明处理结果的消息。
该应用程序目前被实现为 CICS 事务,通过 3270 ISPF(Interactive System Productivity Facility)前端进行访问。CICS 事务程序(业务逻辑)通过 COMMAREA 接收 3270 的输入,并且通过其他 COMMAREA 发送回 3270 输出。业务逻辑程序用 COBOL 进行编写。 清单 1 和 清单 2 分别显示了现有的输入和输出 COMMAREA。
清单 1. 输入 COMMAREA
INCOMMAREA.
03 REQ-TYPE PIC X(8) .
03 ORDERNO PIC X(10) .
03 FEATURE-ARRAY OCCURS 150 TIMES.
05 FEATURE PIC X(10).
05 QUANTITY PIC X(3).
|
清单 2. 输出 COMMAREA
01 OUTCOMMAREA.
03 RETURNCODE PIC X(3).
03 VALIDATION-RESULTS-ARRAY OCCURS 100 TIMES.
05 MSG-PREFIX PIC X(3).
05 MSG-TEXT PIC X(80).
|
下面这一节举例说明了为服务提供端开发的组件。在这一部分中,我们讨论了服务端处理所需的用户定义的模块。正如体系结构中所表明的那样,在服务提供端有两种用户支持的组件:1)管道头处理器和 2)消息适配器。在这一节中,我们说明了如何开发消息适配器组件。
消息适配器执行 WebSphere Process Choreographer 客户端使用的 SOAP XML 格式和业务逻辑 CICS 事务中使用的 copybook COMMAREA 格式之间的转换功能。
正如 图 1 所示,消息适配器程序的输入来自于 CICS 管道容器。入站管道的最后一个阶段是消息适配器。到这个时候,所有的 SOAP 头都已经被处理并且移除,仅仅留下了业务逻辑所需的 XML 内容。
您可以通过多种方法来创建消息适配器,包括如下方法:
- WebSphere Studio Enterprise Developer(Enterprise Developer)提供了从 COBOL copybook 生成消息适配器的工具(参阅 参考资料,查看关于 Enterprise Developer 和其在 SOAP/CICS 方面使用的一些具体信息)。除了生成消息适配器,Enterprise Developer 还可以生成 XML schema 来呈现输入和输出 copybook COMMAREAs。
- 还可以使用 Enterprise COBOL V3 和 Enterprise PL/I V3 中提供的 SAX(Simple API for XML)转换来生成消息适配器。
- 在 CICS TS V3.1 中,CICS Web 服务助手提供了在 XML 和 COBOL、C、C++ 或者 PL/I 之间转换的支持(参阅 参考资料查看关于 CICS TS 3.1 一些最新可用特性的信息)。
消息适配器执行三个主要的功能:
- 将入站的 XML 请求转换为输入 COMMAREA 格式。
- 链接到已有的业务逻辑程序。
- 将输出的 COMMAREA 转换为出站 XML 响应。
清单 3 显示了工作存储器区域和联结的部分。
清单 3. 工作存储器区域和联结的部分
WORKING-STORAGE SECTION.
01 WS-START.
03 BOD-PTR USAGE IS POINTER.
03 BOD-LEN PIC S9(8) COMP-4.
03 GETMAIN-PTR USAGE IS POINTER.
03 GETMAIN-LEN PIC S9(8) COMP-4.
* Container names used by BTS Activity
03 PIPE-INPUT PIC X(16) VALUE 'INPUT'.
03 PIPE-OUTPUT PIC X(16) VALUE 'OUTPUT'.
* Externally referenced data areas
LINKAGE SECTION.
01 BOD-AREA.
02 FILLER PIC X OCCURS 320000
DEPENDING ON BOD-LEN.
01 GETMAIN-AREA.
02 FILLER PIC X OCCURS 320000
DEPENDING ON GETMAIN-LEN.
|
消息适配器决定了进入管道容器的大小,为其分配存储器,并且将其内容移动到工作存储器中。这些功能如下面的步骤一到步骤三 所示。
- 从输入管道中获取 SOAP 文档体。
EXEC CICS GET CONTAINER(PIPE-INPUT) SET(BOD-PTR) FLENGTH(BOD-LEN) END-EXEC.
- 因为
SET指针是不稳定的,所以需要将输入容器复制到GETMAIN存储中。IF BOD-LEN > 0 SET ADDRESS OF BOD-AREA TO BOD-PTR MOVE BOD-LEN TO GETMAIN-LEN EXEC CICS GETMAIN SET(GETMAIN-PTR) FLENGTH(GETMAIN-LEN) END-EXEC SET ADDRESS OF GETMAIN-AREA TO GETMAIN-PTR MOVE BOD-AREA TO GETMAIN-AREA SET BOD-PTR TO GETMAIN-PTR SET ADDRESS OF BOD-AREA TO BOD-PTR END-IF.
- 使用 COBOL 内置功能来转换 XML,将其转换到输入 copybook COMMAREA 格式。这一步展示了一个 XML 解析器( 清单 4),并且执行一个回调功能( 清单 5)。
清单 4. 调用 XML 解析器
XML PARSE BOD-AREA PROCESSING PROCEDURE XML-HANDLER
END-XML.
|
清单 5. XML 回调处理器
XML-HANDLER SECTION.
EVALUATE XML-EVENT
WHEN 'START-OF-ELEMENT'
MOVE XML-TEXT TO CURRENT-ELEMENT
WHEN 'CONTENT-CHARACTERS'
EVALUATE CURRENT-ELEMENT
WHEN 'Type'
MOVE XML-TEXT TO REQ-TYPE OF INCOMMAREA
* All the other request XML elements would follow here (in other words,
order number, feature array).
END-EVALUATE
END-EVALUATE.
XML-HANDLER-END. EXIT.
|
我们的示例场景执行 CICS 中的 ORDVLDT 业务逻辑程序,如 清单 6 所示。我们需要输入在上面 XML 解析程序中构建的 COMMAREA。
清单 6. 执行 ORDVLDT 业务逻辑程序
EXEC CICS LINK PROGRAM('ORDVLDT') COMMAREA(INCOMMAREA)
END-EXEC
|
CICS 消息适配器程序构建一个文本字符串来呈现 XML 响应文档。CICS 管道的外出阶段将在合适的 SOAP 头中包装这个文档。
CICS 中的 SOAP 响应消息必须包含该响应消息的正确命名空间 URI。如果没有为响应格式执行命名空间信息(参阅 参考资料查看关于 SOAP 规范的更多信息),客户端代理代码不能将响应转换为正确的 Java 对象。
例如,为了使用用于
Response 的命名空间 http://www.coats.com/schemas/ValidateOrderOInterface,遵循以下步骤:
第一步:在容器中定义返回消息如 清单 7 所示,以返回给客户端。
清单 7. 返回消息
* Data items used to build a response message
01 ORD-MESSAGE -FIRST.
03 FILLER PIC X(15) VALUE '<SOAP-ENV:Body>'.
03 FILLER PIC X(21) VALUE '<om:ValidateOrderResp'.
03 FILLER PIC X(22) VALUE ' xmlns:om="http://www.'.
03 FILLER PIC X(18) VALUE 'coats.com/schemas/'.
03 FILLER PIC X(26) VALUE 'ValidateOrderOInterface ">'.
03 FILLER PIC X(12) VALUE '<ReturnCode>'.
03 RTNCODE PIC X(3) VALUE SPACES.
03 FILLER PIC X(13) VALUE '</ReturnCode>'.
03 FILLER PIC X(10) VALUE '<Messages>'.
03 ORD-MESSAGE -FIRST-LEN PIC S9(8) COMP-4 VALUE 140.
*
01 ORD-MESSAGE -DETAIL.
03 FILLER PIC X(14) VALUE '<OrderMessage>'.
03 FILLER PIC X(15) VALUE '<MessagePrefix>'.
03 PREFIX PIC X(3) VALUE SPACES.
03 FILLER PIC X(16) VALUE '</MessagePrefix>'.
03 FILLER PIC X(13) VALUE '<MessageText>'.
03 TEXT PIC X(80) VALUE SPACES.
03 FILLER PIC X(14) VALUE '</MessageText>'.
03 FILLER PIC X(15) VALUE '</OrderMessage>'.
03 ORD-MESSAGE -DETAIL-LEN PIC S9(8) COMP-4 VALUE 170.
*
01 ORD-MESSAGE -LAST.
03 FILLER PIC X(11) VALUE '</Messages>'.
03 FILLER PIC X(23) VALUE '</om:ValidateOrderResp>'.
03 FILLER PIC X(16) VALUE '</SOAP-ENV:Body>'.
03 ORD-MESSAGE -LAST-LEN PIC S9(8) COMP-4 VALUE 50.
|
第二步:从业务逻辑程序的输出 COMMAREA 中构建输出 XML 文档。当控制从链接的业务逻辑程序(ORDVLDT)返回到消息适配器时,获取输出 COMMAREA 如
清单 8 所示,并且构建输出 XML 文档(如
清单 7 中
ORD-MESSAGE-DETAIL 所示)。
清单 8. ORDVLDT 业务逻辑程序中的输出 COMMAREA
01 OUTCOMMAREA.
03 RETURNCODE PIC X(3).
03 VALIDATION-RESULTS-ARRAY OCCURS 100 TIMES.
05 MSG-PREFIX PIC X(3).
05 MSG-TEXT PIC X(80).
|
我们将 XML 文档头数据(
ORD-MESSAGE-FIRST 结构)写到输出 XML 消息中,如
清单 9 所示。
清单 9. 将 XML Header(ORD-MESSAGE-FIRST 结构)移动到输出 XML 消息
01 OUT-MSG-VCHAR.
03 OUT-MSG-LEN PIC S9(8) COMP-5 VALUE ZERO.
03 OUT-MSG.
04 FILLER PIC X OCCURS 4092
DEPENDING ON OUT-MSG-LEN.
MOVE ORD-MESSAGE--FIRST(1 : ORD-MESSAGE--FIRST-LEN) TO OUT-MSG(1 : ORD-
MESSAGE--FIRST-LEN)
ADD ORD-MESSAGE--FIRST-LEN TO OUT-MSG-LEN
|
然后我们循环处理
VALIDATION-RESULTS 数组 (参阅工具条
CICS 32K
COMMAREA 大小约束和工作区查看更多细节)。对于 OUTCOMMAREA
VALIDATION-RESULTS 数组中的每个元素,我们将
ORD-MESSAGE-DETAIL 结构连接到输出 XML 消息:
OUTCOMMAREA. MSG-PREFIX(INDEX) -> ORD-MESSAGE-DETAIL.PREFIX OUTCOMMAREA. MSG-TEXT(INDEX) -> ORD-MESSAGE-DETAIL.TEXT |
在所有的
VALIDATION-RESULTS 数组元素被处理完以后,我们将 XML 文档尾数据(
ORD-MESSAGE-LAST 结构)写入到输出 XML 消息,并将 XML 文档放置在 CICS 管道输出容器中,最后从消息适配器程序中退出(如
清单 10 所示)。
清单 10. 将 XML 文档放入 CICS 管道并从消息适配器中退出的代码
MOVE ORD-MESSAGE-LAST(1 : ORD-MESSAGE-LAST-LEN) TO OUT-MSG(1 + OUT-MSG-LEN : ORD-
MESSAGE-LAST-LEN)
ADD ORD-MESSAGE-LAST-LEN TO OUT-MSG-LEN
EXEC CICS PUT CONTAINER(PIPE-OUTPUT)
FROM(OUT-MSG)
FLENGTH(OUT-MSG-LEN)
END-EXEC.
EXEC CICS RETURN
END-EXEC.
MAIN-PROCESSING-END.
EXIT.
|
本文概述了在 CICS TS 中为 XML 到 COMMAREA 转换开发消息适配器的体系结构并提供了循序渐进的开发方法。作者向您说明了在 CICS v2.3 中如何开发服务提供端构件,包括创建消息适配器、执行 CICS 程序、以及在 CICS 应用程序之间传递大数据。CICS TS V3.1 提供了一些能力包含最优化数据处理的管道和容器,而不是 COMMAREA。本系列的第十一部分将举例说明如何使用各种工具集成 CICS 和工作流,包括 WebSphere Studio Enterprise Developer 和 WebSphere Studio Application Develper - Integration Edition。
| 描述 | 名字 | 大小 | 下载方法 |
|---|---|---|---|
| 本文使用的日志插件 | loggingplugins.zip | 16 KB | HTTP |
-
从 DB2
®,Lotus
®,Rational
®,Tivoli
® 和 WebSphere
® 获得您可使用的应用程序开发工具和中间件产品。您可以免费
下载产品评估版,或者选择 Linux
® 或 Windows
® 版本的 developerWorks 免费
Software Evaluation Kit。
- 使用
WebSphere Studio Application Developer - Integration Edition 来拓展和集成您现有的 IT 资产,它是下一代的集成开发环境(IDE),并且将其部署在 WebSphere Business Integration - Server Foundation。
- 使用 WebSphere Studio Enterprise Developer 来将您的 CICS 应用程序作为 Web 服务提供者,通过
"企业 XML
和 Web 服务:为 CICS 应用程序提供 XML 和 Web 服务接口。
- 通过
“Architecting e-business Access to CICS Update”学习将 CICS 用于 Internet。
- 从 IBM Publications Center 下载
用于 CICS 的 SOAP:用户指南(SC34-6315)
- 对于 SOAP 的更多信息,阅读 SOAP World Wide Web Consortium
SOAP 规范。
- 浏览
WebSphere Application Developer - Integration Edition InfoCenter。
- 研究
CICS TS V3.1 中的一些加强特性。
- 访问
Developer Bookstore 获取技术书籍的综合列表,包含数百本
Web 服务主题的书籍。
- 通过注册
developerWorks blogs 加入到 developerWorks 社区。
- 想要更多信息?developerWorks
SOA 和 Web 服务专区有数百篇关于开发 Web 服务应用程序的信息文章和入门级、中级和高级教程。
Joshy Joseph 是 IBM 随需应变业务开发组织的软件工程师。作为一名架构设计师和程序员,他掌握了分布式计算、网格计算、 Web 服务以及业务流程和工作流等领域的基本技术和技能。2003 年他的专著 《网格计算》 由 Prentice Hall 出版社出版 。另外,他还撰写了大量的关于网格计算、业务流程开发以及 Web 服务方面的文章。