快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和记娱乐和记怡情AG:在 WID 中使用 SCA Web 服务绑定传递 SOAP Header



1. 小序

跟着SCA (Service Component Architecture)规范的广泛推广, SCA编程模型和记娱乐和记怡情AG和IBM 支持SCA的产品系列如WebSphere Process Service(WPS),IBM WebSphere Enterprise Service Bus(WESB)越来越多的利用于实际的大年夜型IT临盆情况和营业集成中。SCA组件对营业数据进行操作,并应用统一的数据款式—— SDO(Service Data Object)来表达营业数据,并在SCA组件之间进行通报。

然则在许多实际项目运营历程中,搭建纯真的相符SCA规范的IT架构一样平常难以实现,基于SOA可重用理念,很多环境下必要实现SCA组件和外部非SCA模块之间的集成,而这些模块每每是基于已有的J2EE平台实现的EJB、JMS终端或者能够吸收SOAP消息的Web Service。IBM WebSphere Integration Developer(WID)在集成图(Assembly Diagram)上供给了SCA导入组件来引用外部的各类类型的办事组件,以及SCA导出组件来将内部的SCA组件裸露为可以和外部多种模块交互的办事接口,而所有这些交互类型都经由过程导入、导出组件上的绑定(Binding)类型来指定。截止到2007年头?年月IBM宣布的WID V6.0.2,用户可以指定的绑定类型包括:

SCA 绑定

Web办事绑定

无状态Session Bean绑定

消息绑定,包括JMS 绑定,MQ 绑定,MQ JMS 绑定

本文偏重于SCA导入、导出组件中对Web Serv和记娱乐和记怡情AGice Binding的利用。该绑定能够在标准SOAP消息和SDO之间进行款式转换。SDO在进入SCA天下后被包装了相关的SCA协议头而成为在SCA组件之间通报的SMO(Service Message Object)。理论上来讲,SMO应该有完备的和记娱乐和记怡情AG元数据款式以映射到SOAP的Schema,此中除了用于通报功能性调用的SOAP Body外,用于携带QoS以及非功能需求的SOAP Header也是紧张的组成部分。WID的实现也确凿做到了这一点,然则笔者在组内的项目中经历了一番挫折才熟识到WPS运行时情况对实现SOAP Header在SOAP和SMO之间通报的特殊设置设置设备摆设摆设要求。本文便是想共享这方面的履历,盼望无论是从事实际项目开拓的软件工程师,照样在实验室中从事相关课题技巧探索的钻研职员能够从中获益,节省宝贵的研发光阴。

2. 一个范例场景

笔者经由过程对所从事的项目进行技巧抽象,得出以下的范例场景:

图1 一个范例的应用SCA中心模块基于SOAP Header进行办事拔取的场景

如图1所示,假设一个Web办事哀求客户端必要哀求两个Web办事:Echo Web办事1和Echo Web 办事2。这两个Web办事虽然都供给了回应哀求字符串的功能,然则他们的接口描述不合。该场景盼望对办事哀求进行中介,并拔取了SCA中介模块来实现办事哀求的路由、哀求消息转换,面向办事哀求客户端樊篱中介细节,供给统一的办事调用界面。并且,办事哀求客户端可以经由过程在Web办事哀求的SOAP Header中嵌入路由信息,来标明每次哀求所盼望调用的远程Web办事。

该场景虽然只是一个技巧抽象,然则可以被付与多种IT内涵和营业语义,对照范例的有:

基于WS-Policy办事非功能属性的办事匹配和拔取。在这种环境下,每个当拔取的Web办事都经由过程WSDL绑定声清楚明了不合的WS-Policy断言。只有客户端SOAP哀求中所携带的非功能性需求与当前办事的WS-Policy断言能力切合,该办事才可以被匹配从而进行调用。而一样平常环境下这种动态办事拔取会将备选的Web办事元数据(包括WSDL,XSD以及WS-Policy)宣布到一个元数据注册中间(今朝IBM保举的主流产品是WebSphere Registry & Repository),由哀求中介在运行时进行查询匹配(WID V6.0.2已经有中介组件支持对WSRR的查询)。已有的基于WS-Policy框架的办事策略规范(如WS-RM, WS-Security等)都将每次办事调用中的非功能需求嵌在SOAP Header中,在这种环境下,办事中介必须实现基于SOAP Header的办事匹配;

至此,两个Echo Web办事已经成功完成了在WESB办事器中的安装和启动。

3.2 创建并设置设置设备摆设摆设SCA中介模块

接下来必要创建一个SCA中介模块来完成办事路由。依照以下步骤进行:

选择“File->New->Projects…->Mediation Module”,并在弹出的对话框中给定天生的中介模块名称为“EchoServiceRouter”。点击“Finish”;

拷贝以上导入的两个Web办事的WSDL文件到该中介模块工程中。详细的做法是:在“J2EE” 视图的“Project Explorer”子窗口中,选择“EJB Projects->EchoEJB1->ejbModule->META- INFO->wsdl->EchoSvr1.wsdl”,右键点击,选择Copy。切换到“Business Integration”视图,在“Business Integration”子窗口中选择“EchoServiceRouter->Interfaces”,右键点击并选择Paste。Echo Web办事1的WSDL被复制完毕。用同样的法子拷贝获得Echo Web办事2的WSDL;

在 “EchoServiceRouter”工程下双击“Assembly Diagram”,打开该中介模块的集成图。重命名缺省天生的中介组件为“EchoServiceRouter”。右键点击该组件,选择 “Add->Interface->EchoSvr1”。这样就把该中介模块对外的办事接口设为Echo Web办事1的接口类型。因为Echo Web办事2的接口类型与之不合,必要在编辑中介流程时对哀求消息做消息钱式转换;

在集成图空缺处点击右键,选择“Add->Import”,重命名天生的导入组件为“EchoService1Import”。用与上一步相同的法子设置该导入组件的接口为EchoSvr1。右键点击该导入组件,选择“Generate Binding…->Web Service Binding”,在弹出的窗口中选择“Use an existing web service port”,并经由过程“Browse”按钮选择EchoSvr1 Web办事端口。设置完毕后,选中“EchoService1Import”组件,它的Properties子窗口如图2所示:

图2 “EchoService1Import”导入组件的绑定设置设置设备摆设摆设

图片看不清楚?请点击这里查看原图(大年夜图)。

3.3 在SCA中和记娱乐和记怡情AG介模块中实现中介和记娱乐和记怡情AG流

SCA中介模块中,中介组件的实现为中介流。为第2节所述的场景实现中介流的步骤如下所示:

在集成图中双击“EchoServiceRouter”组件,在弹出的对话框中选择Yes;接着在弹出的“Generate Implementation”对话框中选择OK,中介流编辑器被打开。对应于集成图中的导入、导出组件的三个操作在编辑器的上部被显示出来;

分手将左部EchoSvr1接口中的echo操作和右部EchoSvr1Partner接口中echo操作以及EchoSvr2Partner接口中的echoMessage操作连接起来;

现在可以在中介流编辑器的下部编辑中介流的详细行径了。在哀求中介流的选择卡下,先拖拽一个“Message Filter”中介单元(Mediation Primitive)到编辑器中,它用于依据传入到中介模块的消息内容进行消息路由;再拖拽一个“XSL Transformation”中介单元到编辑器中,它用于转换从中介模块输入的消息钱式到Echo Web办事2可吸收的款式。着末拖拽两个“Message Logger”中介单元到编辑器中,它们分手用于将送往Echo Web办事1和Echo Web办事2的SMO以XML款式写入数据库,作为日志;

右键点击“Message Filter”中介单元,选择“Add Output Terminal”,吸收弹出对话框的缺省设置;

如下图所示将以上的中介单元连接起来形成哀求中介流:

图5 “EchoServiceRouter”中介模块的哀求中介流

选中“XSL Transformation”中介单元,在Properties子窗口红选择detail项,点击“New…”按钮。在弹出的“New XSLT Mapping”对话框中选择“Message Root”为“/”,并点击“Finish”以打开消息映射编辑器。如下图对哀求消息钱式进行映射:

图7 “XSL Transformation”中介单元在哀求中介流中的消息映射

图片看不清楚?请点击这里查看原图(大年夜图)。

保存并关闭该映射文件;

分手选中两个“Message Logger”中介单元,在Properties子窗口红选择detail项,选择“Root”为“/”。在中介流编辑器中进行保存,这样就完成了全部哀求中介流的编辑(现在上面的红叉将会消掉);

在中介流编辑器下部的相应中介流选择页面上,用类似的措施如下编辑相应中介流:

图8 “EchoServiceRouter”中介模块的相应中介流

图片看不清楚?请点击这里查看原图(大年夜图)。

此中“XSL Transformation”中介单元的消息映射如下所示:

图9 “XSL Transformation”中介单元在相应中介流中的消息映射

public String echo(String msg) throws Exception {

...

SOAPMessage message = mf.createMessage();

SOAPPart soapPart = message.getSOAPPart();

SOAPEnvelope env = soapPart.getEnvelope();

//构造SOAP Body

SOAPBody body = env.getBody();

Name name = env.createName("echo", "q0", "http://ejbs");

SOAPBodyElement bodyElem = body.addBodyElement(name);

name = env.createName("message");

SOAPElement soapElem = bodyElem.addChildElement(name);

soapElem.addTextNode(msg);

//构造SOAP Header

SOAPHeader header = env.getHeader();

name = env.createName("routerCriterion", "exp",

"http://cn.ibm.com/example");

SOAPHeaderElement headerElem = header.addHeaderElement(name);

headerElem.addTextNode("GOLD");

message.saveChanges();

...

}

从以上片断可以看出,该除了在SOAP消息中添加基础的消息体用于表达哀求的操作和参数外,在SOAP Header中添加了一个名为“routerCriterion”,值为“GOLD”的Header项,这与SCA中介模块哀求中介流中的消息过滤前提同等。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: