尹 瑞 (yinrui@cn.ibm.com), IBM SOA design Center,高级软件工程师, IBM
平 原 (pingyuan@cn.ibm.com), 架构师, IBM
闫 哲 (yanzhe@cn.ibm.com), 高级软件工程师, IBM
景知识
IBM WebSphere Message Broker( 以下简称 WMB) 作为高级企业服务总线的实现平台,在 IBM SOA 架构应用中扮演着非常重要的角色。在企业应用整合中,WMB 支持不同的数据格式之间的转化和处理,并可以将消息根据业务逻辑路由到不同的目标应用系统中,为基于标准和非标准的应用程序及服务提供了连通性和通用的数据转换能力。最新的 WMB 提供了广泛的集成选项和功能,例如内置文件处理、SOAP 处理、安全管理器等,极大地满足客户的需求并为企业带来显著的好处。
WebSphere Transformation Extender 介绍
IBM WebSphere Transformation Extender( 以下简称 WTX) 提供了通用的数据转换和验证的引擎,它可以将源系统的数据以实时或者批处理的方式转换、路由到目标系统。它支持多种数据格式的定义、验证和转换,特别是对于复杂的数据类型提供了强大的支持。WTX 的 Design Studio 是基于 Eclipse 的开发工具,它提供了非常直观的图形化界面使得开发人员非常容易地定义数据类型、设计和测试转换规则。它的主要功能包括:
- 数据的定义:WTX 支持的数据类型包括 COBOL copybook, database schema, Java, plain text, WSDL, XML DTD, XML schema 等,在 WTX 中,统一表示成类型树 (Type Tree)。WTX 提供了导入器 (Type Tree importers) 来导入元数据类型如 XML Schema 以生成类型树,开发人员也可以使用类型编辑器 (Type Designer) 自己创建类型树。
- 设计转换规则:WTX 的转换规则是以映射的形式定义的。在 WTX Design Studio 中,定义好源类型树和目标类型树之后,就可以使用映射设计器设计源数据格式到目标数据格式的映射了。每一个映射都有一个或者多个输入卡 (Input Card) 和输出卡 (Output Card),分别表示输入的数据源和输出的数据源。选定输入卡和输出卡之后,使用拖拽的方式定义字段之间的映射规则,如果规则较复杂,WTX 提供了内置的函数进行选择。设计完映射之后,可以不用部署,直接在 Design Studio 测试映射是否正确。
- 转换引擎:转换规则定义完之后,就可以将规则部署到运行时环境了。运行时环境有两种:Command Server 和 Launcher,其中 Command Server 支持命令驱动和脚本调用,而 Launcher 提供了实时的事件驱动的执行环境。同时,WTX 引擎也支持和多个 IBM 产品进行无缝的集成,例如 WebSphere DataPower, WebSphere Process Sever 和 WebSphere Message Broker,在这些产品的运行时环境中可以很容易地执行 WTX 映射。
WTX 除了具有通用的数据格式的转换的能力外,一个比较重要的特性就是 WTX 还提供了很多加速包 (Accelerator Packs),这些包含了与工业标准或者业界常用应用系统相关的元数据定义、数据验证、用法、转换规则等。
工业标准 Packs 包括与企业应用集成相关标准的支持,如 EDIFACT、X12、EANCOM 、ODETTE、TRADACOMS 等;医疗卫生行业标准的支持,例如 HIPAA、HL7、NCPDP 等,与金融行业相关标准的支持,例如 SEPA、SWIFT、ACORD、NACHA 等。
应用 Packs 包括了对业界广泛使用的应用数据的交互支持。例如 SAP X1, SAP R/3, Siebel, PeopleSoft 等。
充分利用 WTX Packs,可以大大降低与现有应用系统的集成难度,增强可扩展能力。
![]() ![]() |
![]()
|
WMB 中的消息流可以从 input 节点中接收消息,经过一系列的处理将结果放入 output 节点,WMB 内置了很多处理节点,例如消息的构造、验证、转换、路由等,对消息的处理能力非常全面。但在处理数据转换方面,与 WMB 相比,WTX 更具有优势,因为它是专门的数据转换处理引擎,同时提供了强大的开发工具,特别是对于复杂数据类型的处理、大容量或者批处理消息的处理、自定义数据类型的处理等更具有优势。目前 WTX 支持对 WMB 的集成,从而可以结合两者的优点,使用 WTX 处理数据转换,使用 WMB 处理消息连通和路由能力,在某些应用场合下面能够提供更大的价值。
在安装完 WebSphere Transformation Extender for Integration Servers 产品之后,WMB 对于集成 WTX 提供了两方面的支持:
- 解析器模式:WMB 新增加一种消息域 (Message Domain): WTX 类型树。WMB 的消息流可以将输入的消息转换为 WTX 类型树,并允许在消息流中使用 WTX 类型树的方式操纵消息,例如在 ESQL 中使用类型树的语法处理消息内容。
- Map Plugin 节点:WMB 新增加了一个处理节点 WTX Map 来集成 WTX 转换引擎。在消息流的开发中,将 WTX Map 节点拖入编辑器并进行参数设置,指定要调用的 WTX 映射规则、输入卡、输出卡等。运行时,当消息流运行到 WTX Map 节点时候,会将输入消息作为输入卡的输入去调用转换引擎以执行映射规则,执行完之后,将输出卡的输出作为节点的输出传给下一个 WMB 节点继续处理。
WMB 非常适用于异构系统的集成,目前很多企业的系统使用了工业标准,例如 EDI, HIPAA, HL7, SWIFT,在 WMB 中对集成这些消息格式处理比较困难,而通过使用 WTX 工业标准 Pack 可以很容易地处理这些工业标准消息,将其转换为标准的 XML 或者其他格式消息;反之,也可以将 XML 或者其他格式消息转换为工业标准消息。
![]() ![]() |
![]()
|
在医疗卫生行业内,HL7 卫生信息交换标准 (Health Level 7) 是标准化的医疗领域不同应用之间进行电子传输的协议。它允许各个医疗机构在异构系统之间,进行数据的交互。HL7 在世界范围内得到了广泛的应用和支持,很多医院的 IT 系统都是基于 HL7 消息进行交互的。目前最新版本是 V3,在 V3 中使用 XML Schema 定义了消息格式,对消息的创建、解析和转换并不是很复杂,但以前的 V2.x 版本推出较早并已经得到了广泛应用,很多医院现有的 IT 系统是基于 V2.x 消息格式的。这些消息格式由于不是基于 XML 标准的,和现有的基于标准协议例如 XML,Web Service 等实现的 IT 系统集成比较困难。
在 HL7 V2.x 中,对病人实行管理 (Admit, Discharge & Transfer) 的 A04 消息定义了病人住院注册的消息格式,一个完整的消息包括多个消息段,例如消息头 (MSH),事件类型 (EVN),病人标志 (PID),病人参观 (PV1) 等,消息段之间使用换行符分开。下面是 HL7 V2.3 消息的一个示例:
MSH|^~\&|STAR|A|CAI|A|200611220045||ADT^A04|49343973|P|2.3|49343973||AL||||EN^^^^^ EVN|A04|200611220045|||| PID|123|33333333|100001^^^&1.3.6.1.4.1.21367.2005.3.7& ISO|100001^BBBBBBBB|DUCK^RANDI^J^|MOUSE|19840101|F||1|END OF THE LINE^^UNION^MO^63084^^C^MO071|MO071||(111)222-3333|ENGLISH^E^|S|CTH^^| 3333333333^^^A|444-55-6666| PV1||E|||||||||||||||||||||||||||||||||||||||||||||||| ACC||| |
在上面消息中,各消息段以回车符隔开。第一行“MSH”表示消息头,“|”指定该消息中数据字段之间的分隔符,“^~\&”指定字段内的 4 种编码符号,“^”即元素间分隔符。接下来以“|”隔开的字段依次表示发送端应用(“STAR”)、发送端设备(“A”)、接收端应用(“CAI”)、接收端设备(“A”)、消息时间(“200611220045”)、消息类型(“ADT^A04”)等。而在该消息类型中,“ADT”表示消息 ID,“A04”表示事件类型。后面的消息段不再具体介绍,具体可参考 HL7 V2 的消息定义。
该消息可读性不好,处理起来也不太容易,一种解决方法是将基于 HL7 V2.x 的消息转换为 XML 消息然后再做进一步的处理,其中消息的转换是使用 WTX 进行处理的,而消息的接收、路由以及其他处理是在 WMB 中进行处理的。在后面的章节中将会详细介绍所用到的软件以及具体的开发步骤。
![]() ![]() |
![]()
|
完成该示例场景所需要的软件以及版本如下所示:
- WebSphere Message Broker v6.103 或更高版本
- WebSphere Transformation Extender Design Studio v8.203 或更高版本
- WebSphere Transformation Extender Pack for HL7 v4.3 或更高版本
- WebSphere Transformation Extender for Integration Servers v8.203 或更高版本
首先安装 WebSphere Message Broker 包括 runtime 和 toolkit;再安装 WebSphere Transformation Extender Design Studio 做为映射开发工具;然后,安装 WTX Pack for HL7 以支持 HL7 消息;最后安装 WTX for Integration Servers 以将 WTX 开发和运行环境集成到 WMB 中。安装完成后,打开 WMB toolkit 在消息流编辑器的选项板上就可以看到 WTX Map 的节点了。
![]() ![]() |
![]()
|
开发过程简要如下
- 首先定义 ADT A04 的 XML Schema 文件 RegisterPatient.xsd,可以使用 XML Spy 工具简化定义过程。
- 在 WTX Design Studio 中导入 HL7 V2.3 的类型树和 ADT A04 的 XML Schema。
- 在 WTX Design Studio 中定义两种类型的映射规则并测试。
- 映射测试无误后,在 WMB 上开发消息流,使用 WTX Map 节点集成开发好的映射文件。
- 最后,将消息流部署测试。
下面是具体的开发和配置过程。
- 在 Design studio 中新建一个 Extender 项目 HL7WTXSample
- 使用 XMLSpy 工具定义 ADT A04 的 XML Schema 文件 RegisterPatient.xsd。
- 在 HL7WTXSample 项目中导入已经定义好的 XML Schema 文件 RegisterPatient.xsd 以生成相应的类型树,如图 1 所示。当然程序人员也可以不采用导入 Schema 的方式而直接在 Design Studio 中创建相应的类型树。为了简单我们采用导入 Schema 的方式生成类型树。
图 1. RegisterPatient 类型树 - 安装了 HL7 Pack 之后,在 WTX 安装目录下面的 packs\healthcare_v4.3\hl7\trees 文件夹中可以找到 HLV2.3 的类型树文件 hl7_v2_3.mtt,并将其拷贝到 HL7WTXSample 项目下。
- 新建映射源 HL7V2Map 以及映射 RegisterPatient,在该映射增加一个输入卡,卡名是 RegisterPatientInput,类型是 HL7 V2 中的 ADT A04 消息,具体参数如图 2 所示。
图 2. RegisterPatient 输入卡 - 与步骤 4 类似,在映射 RegisterPatient 下新建一个输出卡,卡名是 RegisterPatientOutput,类型树为步骤 2 中的 RegisterPatient.mtt,类型为 RegisterPatient 元素。
- 在映射设计器中,将输入卡做为源输入,输出卡做为目标输出,使用拖拽的方式建立字段之间的映射关系。如图 3 所示:
图 3. 编辑映射关系 - 在输入卡和输出卡中设置输入文件和输出文件的位置,在输入文件中输入 HLV2 的 A04 测试消息,编译映射并运行映射,然后查看输出文件的内容。如果不能正确地得到结果,查看跟踪日志可以看到详细的运行纪录,找到错误原因,改正后继续运行直至无误。
在 WTX 的映射开发完毕后,在 WMB 中建立消息流项目 MBWTXFlowSample,并新建一个消息流,如图 4。
MQInput 中从队列 IN 中读取 HLV2 的消息,WTX Map 将消息转换为 XML 消息并放入队列 OUT,如果出错则将消息放入 FAIL 队列。
消息流的设计非常简单,打开 WTX Map 节点的属性页,设置映射如图 5 所示,在这里我们选择使用项目中的映射。并指定映射文件 HLV2Map.mms。在输入 Tab 页中,设置要连接的卡号是 1,因为只有一个输入卡,运行时候会根据输入卡号调用映射规则。
开发完毕后,将开发好的消息流打成 BAR 包,打包时,WMB 自动会将 WTX 的映射文件打成 MAR 包作为 BAR 包的一部分,最后将 BAR 包部署到 WMB 执行组中。
使用 RFHUtil 工具,从文件中读入 HL7 V2 RegisterPatient 的消息,如图 6 所示,然后将消息放入到 IN 队列。
图 6. 使用 RFHUtil 读入 HL7 V2 输入消息
消息流执行完成后,会将转换好的 XML 消息放入到 OUT 队列,使用 RFHUtil 将该消息读出,如图 7 所示。
图 7. 转换后的 RegisterPatient XML 消息
对比转换后的 XML 格式消息和转换前的 HL7 V2 格式消息,确认转换无误。
![]() ![]() |
![]()
|
本文介绍了 WMB 和 WTX 以及它们的集成方式,使用 WTX Pack 来转换工业标准消息提供一种集成企业现有应用的解决方案,并以具体实例详细介绍了开发过程。本文仅仅介绍了将工业标准消息转换为 XML 消息的过程,有兴趣读者可以试一下将标准的 XML 消息转换为工业标准消息并增加其他更复杂的逻辑。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14789789/viewspace-610870/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14789789/viewspace-610870/