IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  SOA and Web services  >

使用 SOA 技术实现既有资产的开发和重组(下)

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


何 文 (hewwen@cn.ibm.com ), IBM 中国 SOA 设计中心,软件工程师, IBM
刘 伟 (liuwcdl@cn.ibm.com), IBM 中国 SOA 设计中心,软件工程师, IBM
任 志宏 (renzhih@cn.ibm.com), IBM 中国 SOA 设计中心,高级软件工程师, IBM
陈 雷 (cdlchenl@cn.ibm.com), IBM 中国 SOA 设计中心,高级软件工程师, IBM
张 辉 (cdlhuiz@cn.ibm.com), IBM 中国 SOA 设计中心,软件工程师, IBM
赵 勇 (zhaoyong@cn.ibm.com), IBM 中国SOA 设计中心工程师, IBM

2007 年 12 月 27 日

在本文中,作者使用中间会合 (meet-in-the-middle) 开发模式,对既有资产进行抽取、分析、编排和映射,生成满足业务目标的可部署代码和接口定义文件,从而实现了对于既有资产的转换和重组。

实现细节

使用 WDz 7.0 进行既有 IT 资产开发和重组

下面我们将介绍如何通过创建 WDz 7.0 的 Service Flow 工程来实现 COBOL 应用的导入、开发、重组和部署全过程。这里采用从中间会合的模式,我们通过导入实现目标的接口定义文件和需要转换的非终端应用程序 COBOL 源代码,根据需求分析建立操作及其输入输出消息的映射和关联,最终生成可部署的 Web Service 描述文件和可运行代码,完成既有资产到 Web Service 方式的转换。

1. 创建 SFP(Service Flow Project)

创建一个空的 SFP,命名为 LookupPartOrder,进入默认的 EST 透视图。


图 6

2. 导入接口定义文件

该接口定义文件描述了目标 Web Service 的实现目标,WSDL 文件内容如图 4 所示。在 EST Project Explorer 视图的右键菜单中选择 Import->WSDL,如图 7 所示。完成 Import Wizard 之后,在 SFP 的 Interface 目录中将生成两类文件:(1) 接口定义文件 (.wsdl),描述了目标 Web Service 的操作。一个 wsdl 文件只能定义一个操作,作为调用一个 flow 的接口信息,包括端口类型、操作名称、输入与输出消息的引用等。(2) 消息定义文件 (.mxsd),描述了该操作所引用的输入与输出消息的类型信息。


图 7

3. 导入非终端应用程序

EST 工具提供了对导入基于终端的应用程序、非终端应用程序以及基于 CICS 的 Web Service 的支持,实现对这些既有资产组件的开发和重组。本例导入的 COBOL/Copy book 文件是作为非终端应用程序导入的,其他两类的导入方式与其类似,这里不再赘述。在 EST Project Explorer 视图的右键菜单中选择 Import->COBOL,主要功能是从每个 COBOL 源文件 (COBOL program 和 copy book) 中抽取 COBOL 的数据结构生成 Service Flow 工程中对应的消息文件(.mxsd)。


图 8

在 Import 向导的第二步中,需要定制将要生成的 COBOL 程序,例如创建 COBOL 应用程序提供的操作及对应的输入输出消息,并将添加的操作以描述语言的形式添加到新建或者已存在的一个 WSDL 文件中。本例的 COBOL 应用主要提供了两个操作:CheckPartOrder 和 CheckPartPrice,COBOL 程序命名为 CheckPart。如图 9,在 New File 输入框定义了新建的 WSDL 文件名称,Add Program 则可以添加多个操作,Input Data 和 Output Data 输入框则可以为操作选择输入和输出的数据类型。


图 9

4. 创建业务流程 (Service Flow)

在获取了目标业务和已有组件应用的信息之后,我们需要按照业务需求对各个应用组件之间进行组合和编排,并建立目标 Web Service 与应用组件之间的关系,以实现既有资产到 Web Service 的转换。在本例中,我们需要实现一个具有查询订单价格功能的目标 Web Service,其描述文件为 Interface 目录下的 LookupPartOrder.wsdl,需要调用已实现的应用组件的两个操作 CheckPartOrder 和 CheckPartPrice,其描述文件为 NonTerminal 目录下的 CheckPart.wsdl,flow 的创建与修改通过以图形化的形式编辑 Flow 目录下的 .seqflow 文件来完成。

(1) 将目标 Web Service 实现的操作添加到 flow 中。在 Flow Editor 的右键菜单中选择 Select Interface Operation( 或者 Select Operation),如图 10,打开向导,选择所要添加操作的 wsdl 描述文件(该文件必须来自 Interface 目录下的接口定义文件,而不能来自 Nonterminal,Terminal 或 Outbound Web Service 目录)。添加完成以后,该操作的端口类型和程序名称便与 flow 关联起来,同时该操作所引用的输入消息与 flow 中的 Receive 节点相关联,输出消息与 flow 中的 Reply 节点相关联。


图 10

(2) 将 COBOL 应用组件的两个操作添加到 flow。同样,在右键菜单中选择 Add Operation,从 Nonterminal 目录中选择我们想要添加的 operation 即可。添加完成以后,这些操作的端口类型和输入输出消息将作为 Invoke 节点与该 flow 相关联。

(3) 根据业务流程将 Receive、Reply 和 Invoke 节点之间进行逻辑连接,如图 11,这样 flow 的各个操作之间的调用关系体现了整个 Web Service 的业务流程。


图 11

5. 创建消息映射规则

一个消息映射可以是简单类型到简单类型或复杂类型到复杂类型之间的映射。我们需要建立各个操作节点之间的输入输出消息的映射规则,从而将业务流程更细粒度的进行描述。系统将会自动在 Mapping 目录下生成一个 .seqmap 文件来维护所有映射规则。以目标操作 CheckPartOrder 为例,我们在 Flow Editor 中选择其中一个 invoke 节点 CheckPartOrder,如图 12,在其右键菜单中选择 open mapping routine->msg_ORDERSTATUSREC( 绿色箭头代表建立输入映射,紫色箭头代表建立输出映射 ),便会自动打开默认的 mapping editor,同时在 .seqmapping 文件中生成一个命名为 CheckPartOrder_t_msg_ORDERSTATUSREC 的映射规则。


图 12

在 mapping editor 打开的这条映射规则中,我们需要建立目标操作 CheckPartOrder 与 Receive 节点的输入消息之间的映射,因此在 Source 界面的右键菜单中选择 Add Message Input,打开添加向导如图 13 所示,选择 Interface 目录下的消息定义文件 inputMsgMsg 作为源消息。完成添加之后,Source 和 Target 便分别列出了所有源节点和目标节点定义的所有消息类型,我们可以采用拖拽的方式来建立一对一或一对多关联,从而完成消息映射的建立。


图 13


图 14

6. 创建 Generation Properties 文件

通过接口导入、COBOL 应用组件的导入以及业务流程和消息映射的设计,Service Flow 工程结构和内容如图 15 所示。


图 15

下面我们需要创建 Generation Properties 文件来配置生成可运行代码和 Web Service 的相关信息。

(1) 新建 generation properties 文件。我们为每个需要生成 runtime code 的 flow 文件建立一个 generation properties 文件。在本例中,选择 lookupPart.seqflow 文件,在右键菜单中选择 New Generation Properties File,打开新建向导如图 16 所示,在向导中设置属性文件的名称、对应的 flow 文件名称,并选择 CICS Service Flow Runtime 类型,完成后系统便会自动生成一个 .wsdl 文件并以 generation properties editor 打开。


图 16

(2) 配置 generation properties 文件信息。我们需要对 flow 的配置文件以及 flow 中所有调用操作节点的配置文件进行设置。如图 17,首先使用属性编辑器打开该 flow 对应的配置文件,需要修改的属性例如:Flow Type,描述了 flow 中的节点类型;Request Name,描述了请求或命令的名称;Program Name,描述了将在适配器服务中运行的程序名称;Transaction ID,描述了程序所属的事务 ID;Request Type,描述了该 flow 调用事务的模式,包括 ASYNC,SYNC,SYNC ROLLBACK;Generate Internal Data Structures,选择是否生成 COBOL 源程序的数据结构,如 JCL 或 CBL;Web Service Generation Properties,用于生成非 SOAP 部署(如 CTG 或 MQ)的转换支持文件或 CICS 部署所需的 Web Service 描述文件等等。


图 17

此外,我们还需要对 flow 中所有调用操作的属性进行设置,在 Outline 视图中点击这个 flow 下的某个操作,属性编辑器将会自动打开对应的配置文件,见图 18。主要属性有:Invoke Type,描述了基于 COBOL 流程的节点调用类型,包括 DPL 和 MQ;Link To Program Name,描述了服务端由 DPL 类型调用链接的程序名称;System ID 描述了事务所运行的 CICS 系统名称;Maximum Commarea Length,COBOL 源代码所分配的存储量的最大值。


图 18

7. 生成 runtime code

这是整个资产开发的最后一步,即生成能够在 CICS Service Flow Runtime 上部署和运行的代码。CICS Service Flow Runtime 支持包含终端应用(如 FEPI 和 LINK3270)和基于 COBOL 的非终端应用(DPL 和 MQ 节点),或者这些应用的集合。在 Project Explorer 视图的右键菜单中或者直接在 generation properties 编辑器中选择 generate runtime code,系统便会自动生成运行时代码,包括:COBOL、Copybook(描述了输入输出消息的数据结构)、JCL、Web Service bind 文件和 wsdl 描述文件。

最后我们可以编译这些运行时代码并部署 bind 文件来测试 Web Service,从而完成 COBOL 应用在 WDZ 7.0 上的开发与重组,实现既有资产到 SOA 的转换。





回页首


结论

本文介绍了利用 SOA 方法,使用 WDz SFPT 开发既有资产,将资产转化为 Web Service 的过程;并提供了一个详细的样例,描述了一种端到端的解决方案,实现和验证了上述过程,帮助读者深入了解 SOA 环境下既有资产的开发和转换。



参考资料

学习

获得产品和技术
  • 使用 IBM 试用软件 开发您的下一个项目,可下载或索取 DVD 光盘。


讨论


作者简介

何文是 IBM 中国 SOA 设计中心的软件工程师,主要从事 SOA Tool 的设计和开发工作。联系方式:hewwen@cn.ibm.com


刘伟:IBM 中国 SOA 设计中心,软件工程师,主要从事 SOAIF Tooling 的设计和开发工作。深入理解和应用SOA、SOMA、Web Services 等技术。个人兴趣:书法,绘画。联系方式:liuwcdl@cn.ibm.com


任志宏:IBM 中国 SOA 设计中心,高级软件工程师,从事 SOA 及 WebSphere 相关的工作,对 J2EE,SOA 和业务流程管理有着浓厚的兴趣,联系方式: renzhih@cn.ibm.com


陈雷:IBM 中国 SOA 设计中心,高级软件工程师,从事 SOA 和企业整合相关的工作,对 J2EE,SOA 和相关的领域有着浓厚的兴趣,联系方式: cdlchenl@cn.ibm.com


张辉 IBM 中国 SOA 设计中心的软件工程师,主要从事 SOA Integration Framework 的研发,目前在做 SOA Domain Analysis 相关的工作。联系方式: cdlhuiz@cn.ibm.com


赵勇,IBM 中国软件开发实验室 IBM 中国 SOA 设计中心工程师。具有多年的 J2EE 和 Web Service 开发经验,目前专注于 SOA 项目实践和相关的理论,工具的研究和开发。对 ESB、SCA、BPEL、自动化测试和极限编程等技术有浓厚的兴趣。联系方式:zhaoyong@cn.ibm.com




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM、IBM 徽标、Redbooks、WebSphere 和 z/OS 是 IBM 在美国和 / 或其他国家 / 地区的注册商标。 Java 和所有基于 Java 的商标都是 Sun Microsystems, Inc. 在美国和 / 或其他国家 / 地区的商标。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款