跳转到主要内容

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

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

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

  • 关闭 [x]

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

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

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

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

  • 关闭 [x]

随需应变业务流程的生命周期,第 10 部分: 开发用于 CICS 事务服务器的消息适配器

Joshy Joseph, 高级工程师
Joshy Joseph 是 IBM 随需应变业务开发组织的软件工程师。作为一名架构设计师和程序员,他掌握了分布式计算、网格计算、 Web 服务以及业务流程和工作流等领域的基本技术和技能。2003 年他的专著 《网格计算》 由 Prentice Hall 出版社出版 。另外,他还撰写了大量的关于网格计算、业务流程开发以及 Web 服务方面的文章。
Douglas Griswold 是一位 IBM 全球服务 I/T 专家,专注于随需应变解决方案领域。他是 IBM Enterprise Component Business Architecture(ECBA)小组的一个成员,使用 WebSphere Process Choreographer 和 J2EE Web Services 来实现灵活的应用程序能力,快速响应动态的业务环境。

简介: 随需应变的转换可以使新的业务流程调用遗留的客户信息控制系统(Customer Information Control System,CICS(R))事务服务器中的业务逻辑。本文在体系结构上进行了一些概述,并且提供了循序渐进的方法,以使用 CICS Transaction Server(TS) V2.3 提供的用于 CICS 的 SOAP 特性,来开发各种构件去调用工作流流程中的遗留 CICS 业务逻辑。在本文中,作者向您说明了如何在 CICS TS 中创建用于从 XML 到 COMMAREA 转换的消息适配器。

发布日期: 2005 年 6 月 02 日
级别: 初级
访问情况 : 941 次浏览
评论: 


引言

在随需应变的业务中,企业级应用程序需要与企业内部或者外部的其他应用程序提供的服务集成在一起。使用面向服务的原理构建这样的集成应用程序需要灵活的业务流程执行环境,以及支持面向服务计算的遗留系统。在本文中,我们举例说明了如何使用 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 的体系结构
用于集成业务流程同 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 响应。

将入站的 XML 请求转换为输入 COMMAREA 格式

清单 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.
      

消息适配器决定了进入管道容器的大小,为其分配存储器,并且将其内容移动到工作存储器中。这些功能如下面的步骤一到步骤三 所示。

  1. 从输入管道中获取 SOAP 文档体。
               EXEC CICS GET CONTAINER(PIPE-INPUT)                          
                    SET(BOD-PTR)                                            
                    FLENGTH(BOD-LEN)                                        
               END-EXEC.   
    



  2. 因为 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.  
    



  3. 使用 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  
      

将输出 COMMAREA 转换到 XML SOAP 响应

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 文档(如 清单 7ORD-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 32K COMMAREA 大小约束和工作区

使用 SOAP CICS 接口的一个主要性能优势就是您可以在网络中从客户端向 CICS 传递非常大的消息,并且把响应消息从 CICS 返回到客户端。如果您的目的业务逻辑程序是基于 COMMAREA 的,消息适配器可以将大的 SOAP 消息分割成 32K 或者更小的部分,并且循环调用业务逻辑。每次业务逻辑程序返回,消息适配器可以将结果连接到 SOAP 响应消息中。这个过程一直重复到整个 SOAP 请求都被处理完毕,并且您把包含所有处理结果的 SOAP 消息返回到客户端。

注意:CICS TS 3.1 为传递大量参数数据介绍了两个可选的方法(对于 COMMAREA): 管道和容器(参阅 参考资料查看关于 CICS TS 3.1 最新的可用特性的更多信息)。


结束语

本文概述了在 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.zip16 KBHTTP

关于下载方法的信息


参考资料

作者简介

Joshy Joseph 是 IBM 随需应变业务开发组织的软件工程师。作为一名架构设计师和程序员,他掌握了分布式计算、网格计算、 Web 服务以及业务流程和工作流等领域的基本技术和技能。2003 年他的专著 《网格计算》 由 Prentice Hall 出版社出版 。另外,他还撰写了大量的关于网格计算、业务流程开发以及 Web 服务方面的文章。

Douglas Griswold 是一位 IBM 全球服务 I/T 专家,专注于随需应变解决方案领域。他是 IBM Enterprise Component Business Architecture(ECBA)小组的一个成员,使用 WebSphere Process Choreographer 和 J2EE Web Services 来实现灵活的应用程序能力,快速响应动态的业务环境。

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


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


忘记密码?
更改您的密码

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

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

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

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

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


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

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=162606
ArticleTitle=随需应变业务流程的生命周期,第 10 部分: 开发用于 CICS 事务服务器的消息适配器
publish-date=06022005
author1-email=joshy@us.ibm.com
author1-email-cc=
author2-email=griswold@us.ibm.com
author2-email-cc=

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。