WESB(WebShpere Enterprise Service Bus)是 IBM
为了满足企业服务总线(Enterprise Service
Bus,ESB)的基本需求,以全面支持面向服务的体系结构(service-oriented
architecture,SOA)而提出的解决方案之一。WESB 实现 ESB 的核心就是构建一个基于 Mediation Flow 的
SCA Service。本文将对 WESB 进行简单介绍,并结合实例,指导如何利用 WID(WebShpere Integration
Developer)构建满足业务需求的 Mediation Module 和 Mediation Flow。
本文的第一部分将围绕 SOA 以及 ESB 的基本概念和原则,对 WESB 以及 SCA 等相关概念进行简要的介绍。并且对 WESB 如何对 ESB 进行支持和 WESB 的基本功能加以说明。
本文的第二部分将介绍 Mediation Flow 的基本概念,组成部分和工作模式,它是运行于 WESB 中的 SCA Service 所必需的核心部分。
本文的第三部分将结合实例,详细介绍如何利用 WID 开发工具构建 Mediation Module 以及其中的 Mediation
Flow,并会结合我们目前进行的项目,给出一些开发经验和需要注意以的地方。最后将介绍如何将开发好的SCA应用部署到 WESB 服务器上。
本文的目标读者是具有一定开发 J2EE 编程开发经验,需要进行 SOA 和 ESB 相关开发的程序开发人员。对于那些需要了解 WESB,SOA 和 ESB 的开发人员,本文也可以作为一篇参考资料。
1.介绍
1.1 SOA 与 ESB
在现代企业集成环境中,许多企业都具有不同种类的信息技术(IT)环境,这些环境由许多不同的应用程序组成,这些应用程序位于不同硬件和操作系统上,并且是用不同的编程语言编写的。如果没有正确的中间件基础结构,要将它们集成在一起是很复杂的,并且难以维护。
为了跟上业务更改的步伐,可能需要反复修改现有应用程序,以便与新的应用程序集成或者对新的业务情况做出反应。这通常要求具备旧应用程序的技能和知
识,以及它们在曾经非常复杂的体系结构中的实现。这样做的成本很高并且很浪费时间,降低了稀缺的 IT 人员的效率,并且延长了评估 IT 投资的时间。
通过使用"面向服务的体系结构"(SOA),将使应用程序集成变得更简单、更快速并且成本更低。
Enterprise Service Bus(ESB)是一种通用体系结构模式,它提供了灵活而快速地集成这些服务所需要的基础结构。可以使用多种中间件技术和编程模型来实现此模式。ESB 的值可以适用于多种情况 - 从部门集成到整个企业集成。
Enterprise Service Bus 上的集成逻辑将执行许多功能:
- 路由(routing)
- 数据库查询(Database lookup)
- 数据库日志记录(Database logging)
- 结构变换(Structure transformation)
通过动态地添加或替换服务,可以减少系统停机时间和满足不断变化的业务需要。可以将服务插入总线中并与现有服务进行集成,且无须更改现有服务。
1.2 WESB 和 WID
IBM WebSphere Enterprise Service Bus(ESB)目前的最新版本是 6.0.1。它是从
WebSphere Application Server Network Deployment 的基础上发展而来的。WebSphere ESB
提供了基于标准的 Enterprise Service Bus
的功能,是一种灵活的连接器中间结构,可以用于集成企业级应用和服务,全面支持面向服务架构的开发。WebSphere ESB 是 SOA
的核心部分,并大大降低了接口的复杂度。它通过支持工业标准的 Web 服务,JMS(Java Messaging Service),SOAP
技术,为基于标准的业务集成提供了一个便捷的平台。
WebSphere ESB 可以与多种不同的应用或服务协同工作:
- Common applications(such as SAP)
- Applications with other protocols
- IBM WebSphere Adapters
- Other industry-standard J2C Adapters
WID(IBM WebSphere Integration Developer)6.0
版本是最新发布的使用SCA模型来开发和集成应用的工具,它基于 Eclipse 技术,并面向 IBM WebSphere Process
Server V6 和WebSphere ESB Server V6 运行时环境。和传统的在 WebSphere 应用服务器版本 6
中绑定到特定目的地的 Mediation 不同,从 WID 的 6.0.1 版本开始支持一种特殊 SCA 模块—— Mediation
模块,该模块在 SCA 的模块之间,以及 SCA 和非 SCA 之间建立了交流的桥梁。本文将重点介绍的 Mediation Flow
就是该模块所引入的一种全新组件。
2.Mediation module 与 Mediation Flow
2.1 Mediation module
WID 的6.0.1版本中,引入了一种全新的 module,称为 Mediation module。一个 Mediation
模块实际上是 WID 中可以创建的一种 WebSphere 业务集成工程,它可以被部署到 WebSphere ESB 或者 WebSphere
Process Server 上。这个模块中包含了一种全新的 SCA 组件,称为 Mediation Flow。在一个 Mediation
module 中,必须包含且仅能包含一个 Mediation Flow。否则WID会报出编译上的错误。
ITPUB个人空间 I"l1P C)ni:Z6m%yO1uMediation 模块的主要功能就是将处理服务请求者(service requester)与服务提供者(service
provider)之间存在的不匹配情况,包括协议或交互样式的不匹配以及接口的不匹配。在整个基于 SCA 的解决方案中,Mediation
模块是一种用于执行特殊任务的 SCA 模块,因此,它与在企业级别运行的其他组件的特征稍微有所不同。Mediation 模块提供的
Mediation 服务由 MediationFlow 形成,该 MediationFlow 可以截取、修改服务请求者(SCA
Export)和服务提供者(SCA Import)之间传递的消息。用户可以向一个 Mediation 模块中添加依赖库、Java 工程和
J2EE 工程,并选择将它们和 Mediation 模块一起进行部署。ITPUB个人空间P'TV `:R T!v| S{
Orcb"Eg0?0图1 WebSphere ESB 架构图
4I7g2V7Q!t6f-K!_0ITPUB个人空间eDi&Oc

pX0L2|~A/M{ ~[8R*W0
2.2 Mediation Flow
Mediation Flow 能够对在服务端点之间进行交换的消息执行操作。与常规的业务应用程序组件比较起来,Mediation Flow
关心的是通过基础结构的消息流,而不仅仅是关心消息的业务内容。它们将对消息执行路由、变换和日志等操作,而不仅仅是执行业务功能。用于管理它们的行为的
信息通常保存在与业务消息一起流动的消息头中。IBM SOA 编程模型引入了 SDO 的服务消息对象(SMO)模式以支持此模式。
从 SCA 编程模型的角度来看,Mediation Flow 与其它的 SCA 服务组件并无很大不同,也需要具备以下4个要素:
- 需要存在,且仅能存在于一个 Mediation module 中。
- 具有一个接口,通常为一个 Java 接口或 WSDL 描述文件。
- 可以通过导出(export)暴露给客户端进行调用。
- 可以通过导入(import)调用其它服务组件,导入中需要包含绑定协议的信息。
Mediation Flow 是由一个或多个 mediation primitive 构成,各个 primitive 可以在 WID 的图形化编辑工具中方便的进行拖拽和连接。这些 primitive 更多是用来进行消息流转的控制,而不是执行业务功能。
事实上,每个节点都可以含有一个失败的端子(terminal),因此当发生错误时,开发者可以选择在任意环节捕捉这个错误并进行处理
(handle)。另外,如果表格中的各种 mediation primitive 都不能满足开发者的需求,那么开发者可以选择直接用 Java
代码来创建一个定制的 mediation primitive。不过这种定制的 mediation primitive
具有很大的限制,在本文的后面会提到。
A!`?8f5gL$X0ITPUB个人空间5iB9ts}8hf
3.Mediation Flow 的开发、部署与测试
上文提到的各种 mediation primitive 在 WID 开发环境中均有一一对应。一个 mediation primitive
自身可以有多个端子(terminal)。所有的 mediation primitive 都有一个输入端子用于接收输入的消息。而多数
mediation primitive
有一个或者多个输出端子用于消息的传递。输出端子可以分为两种:失败(fail)端子和成功(successful)端子。根据 mediation
primitive
自身的需要,它最多可以有一个失败端子,而成功端子则数目不限。如果在对输入消息的处理过程中产生异常,失败端子将原有输入和一场信息一起传出。如果一个
mediation primitive 的输出端子无任何连接,WID
会产生一个警告。在执行期间,无任何连接的输出端子将会停止信息的路由而不会抛出任何异常,从而使得信息浪费掉,因此推荐开发者尽量对失败情况进行捕捉。
3.1 WID 中的 mediation primitive
在 WID 提供的图形化开发 Mediation Flow 模型视图中,对各种 mediation primitive 提供了良好的支持,如图1所示,表1给出了 WID 编辑器中除了 custom mediation primitive 之外所对应的组件。
ITPUB个人空间:s6E#?)q3W2V B-i_UM图2 WID Mediation Flow 中的各种 mediation primitive 图示
dE(fl#r,vCW,t0
-~v(?(e'[
?^0h0
ZZ9s K8`&Kk*k0表1内置 mediation primitiveITPUB个人空间7u9W6Z-~$\K4D*{F/h
#P ZI]jT ~0
8sQ)NXp&}b0