使用 WebSphere ESB 实现协议转换和数据转换概要.docx
《使用 WebSphere ESB 实现协议转换和数据转换概要.docx》由会员分享,可在线阅读,更多相关《使用 WebSphere ESB 实现协议转换和数据转换概要.docx(26页珍藏版)》请在三一办公上搜索。
1、使用WebSphere ESB实现协议转换和数据转换简介:本文主要介绍如何通过WebSphere ESB实现协议转换和数据转换功能:通过Websphere ESB实现SOAP/HTTP和JMS之间的协议转换;实现JMS Object Message 与 Business Object 之间、以及 Business Object 与 Java Object的数据转换;实现客户端与ESB之间request/response的交互方式, 客户端向ESB发送带有数据对象的请求,ESB请求Web服务后,将结果以数据 对象的形式返回给客户端。引言已有许多文章介绍了如何将xml message传入ESB进行
2、协议转换和数据 转换,而在实际的应用环境中,面向对象的设计会显得更实用些。本文主要介绍 如何基于JMS和WebSphere ESB构建企业服务总线,实现SOAP/HTTP和JMS 之间的协议转换;实现 JMS Object Message, Business Object 及 Java Object 之间的数据转换;以及如何实现通过ESB来实现request/response的交互方 式。示例场景图1:示例场景图1示例展示了一个典型的端到端的SOA场景:(1)Service Provider 以 SOAP/HTTP 方式发布 Web Service,该 Web Service 输入和返回都是J
3、ava Object;(2)客户端以JMS方式去调用这个Web Service,需要经过WehSphere ESB进 行协议转换,WehSphere ESB将客户端的JMS协议转换为服务端需要的 SOAP/HTTP 协议;(3)客户端将 JMS Object Message 发送给 WehSphere ESB, WehSphere ESB 通 过SOAP/HTTP方式请求Web Service。在服务请求的过程中,WehSphere ESB将 客户端传入的 JMS Object Message 转换为 Business Object,又将 Business Object转换为服务端需要的Jav
4、a Object;在服务返回的过程中,WehSphere ESB 将服务端返回的 Java Object 转换为 Business Object,又将 Business Object 转换为客户端能识别的JMS Object Message;(4) 客户端向WebSphere ESB发送请求和接收返回数据分别在两个队列上进 行,客户端只需关注如何将请求的数据转化为JMS Object Message并放入 WehSphere ESB的接收队列,以及如何从WehSphere ESB的发送队列里取出JMS Object Message并解析所需的结果即可。本示例是基于WID6.0.2和ESB6.0
5、.2实现的,下面来详细介绍如何实现这一示 例场景。创建 Service provider建立工程 BookOrderService,来担任 Service Provider。该 service 提 供了一个接口方法order(),其输入和输出分别是java object: OrderRequest 和OrderResponse,将此方法发布成Web Service,如下:1. 建立一个 Dynamic Web Project: BookOrderService2. 添加对象类、接口和实现类对象类:Address.java包含属性:private String street;private St
6、ring city;OrderRequest.java包含属性:private String name;private int count;private Address address;OrderResponse.java包含属性:private double totalPrice;接口类:BookOrderIf.java public interface BookOrderIf ( public OrderResponse order(OrderRequest req);实现类:BookOrderImpl.java实现了一个简单的业务逻辑。public OrderResponse orde
7、r(OrderRequest req) ( double totalPrice = 10.0 * req.getCount();OrderResponse resp = new OrderResponse();resp.setTotalPrice(totalPrice);System.out.println(Service Provider: The book is + req.getName() + , the city is+req.getAddress().getCity()+, total price is +totalPrice);return resp;3. 将 BookOrder
8、Impl 发布为 SOAP/HTTP Web service,产生 WSDL 文件 BookOrderImpl.wsdl。创建 WebSphere ESBWebSphere ESB的数据转换和协议转换功能通过Mediation Module工程来 实现,Mediation Module工程包含三个重要组件:Mediation Flow Import和 Export组件。Mediation Flow组件实现数据转换功能;Import组件负责对 Service Provider 的 Web Service 进行调用;Export 组件是外界(JMS Client) 访问 Mediation Mod
9、ule 的接口。创建新的 Mediation Module 建立新的 Mediation Module: SOAPHTTP2JMSBinding。建立Mediation Module的同时,会自动创建名称为Mediationl的Mediation Flow的组件。Mediation Module需要访问刚刚创建的Service Provider,就需要导入 BookOrderImpl.wsdl 文件。从 BookOrderService Porject 里找到 BookOrderImpl.wsdl,复制到 SOAPHTTP2JMSBinding Projecto WebSphere ESB 就
10、 是通过 BookOrderImpl.wsdl 来建立对 Service Provider 调用的。添加Import组件Import组件负责完成对Service Provider的Web Service进行调用。打开 SOAPHTTP2JMSBinding 的 Assemble Diagram,添加 Import,更名为: SOAPHTTPImport。选择 SOAPHTTPImport,添加接口 “Add Interface”,选择 BookOrderImpl,这正是 BookOrderImpl.wsdl 提供的接口。Import组件有几种方式可以访问Mediation Module之外的s
11、ervice provider:Messaging Binding 方式,包括 JMS Binding、MQ Binding 和 JMS MQBinding;Web Service Binding 方式。因为我们刚才建立的service provider的接口是SOAP/HTTP Web Service,所 以Import组件需要选用Web Service Binding方式。为 SOAPHTTPImport 添加绑定:“Generate Binding”,选择 Web Service Binding,如图 2。图 2: Web Service Binding在接下来的对话框中选择 “Use
12、an existing web service port”,并“Browse”选择service ports: BookOrderImpl (因为之前已经导入了BookOrderImpl.wsdl 文件,该文件提供了访问 service provider 的 web service port)。新建 Business ObjectMediation Module要进行数据对象的转换,就需要建立内部的数据对象Business Object,来担任数据转换的中间者。为 SOAPHTTP2JMSBinding 建立新的 Business Object:OrderBO:添加属性:bookname, c
13、ount, city 和 streetRespBO:添加属性:totalPrice新建接口建立新的WebSphere ESB接口,为service provider提供新的展现方式,以 便向外界提供各种接口方式(各种Binding方式,见添加Export组件”)。添口 Request Response Operation”,修改 operation name 为:order,修改参数,如图3:InputName: orderBOType: OrderBOOutPutName: respBOType: RespBO图 3: New Interface添加Export组件为了使外界(JMS Cli
14、ent)访问到Mediation Module,需要添加Export组件。添加 Export,更名为 JMSExport。为 JMSExport 添加接口,“Add Interface”, 选择“BookOrderIF”(注意是新建的接口,不是BookOrderImpl.wsdl提供的 接口)。Mediation Module可以向外界提供几种方式的接口: Messaging Binding:包括 JMS Binding、MQ Binding 和 MQ JMS Binding; SCA Binding: SCA 方式提供给其他 Mediation Module 来访问; Web Service
15、 Binding:提供外界 Web Service 的访问方式。这里,我们提供JMS的访问方式。为 JMSExport 添加绑定:Generate Binding,选择“JMS Binding”,如图 4。图 4: JMS Binding弹出对话框,JMS Export Binding需要复杂的资源设置,如图5:图 5: JMS Export Binding Configuration因为JMS协议要求访问者(JMS Client和JMSExport都是ESB资源的访问 者)通过JNDI来访问队列、队列工厂等ESB资源的,因此需要在ESB上设置 各资源的JNDI (参见WAS配置ESB)。在此
16、处需要为JMSExport指定各资源 的 JNDI。选择“use pre-configured messaging provider resource”,设置激活规范、 接收目标和发送目标: JNDI name for activation specification: jms/JMSBindingAS4Export 这个JNDI是JMSExport访问队列的激活规范(参见WAS配置ESB); JNDI name for receive destination: jms/JMSBingQExportRecv这个JNDI指向ESB的接收队列(参见WAS配置ESB); JNDI name for
17、send destination: jms/JMSBingQExportSend这个JNDI指向ESB的发送队列(参见WAS配置ESB);选择 serialization type: “Serialized Business Object usingJMSObjectMessage”。因为ESB队列接收和返回的数据都是JMSObjectMessage 对象,因此需要选择此项。如果接收到数据是XML,可选择“Business Object XML using JMSTextMessage”。为了使WebSphere ESB能将数据返回给客户端,还需要设置CallBack Desitination
18、 和 Managed Connection Factory。如图 6 和图 7。图 6: CallBack Desitination在 JMSExport Properties 的 Binding / End-point configuration 窗口,设置:JMS Destinations/Callback Destination Properties: jms/JMSBindingQ图 7: Managed Connection Factory Properties在 JMSExport Properties 的 Binding / End-point configuration 窗口,
19、设置:Response Connection/ Managed Connection Factory Properties: jms/JMSBindingQCFCallback Destination 和 Managed Connection Factory 是为 JMSExport 返回 数据而设置的,如果JMS客户端不需要返回数据,则此两项可以不设置。创建JMSExport的自定义实现类 为实现JMS客户端的JMSObjectMessage对象与Service Provider端的纯 Java对象进行数据转换,就需要建立JMSExport的自定义实现类,通过该类先 实现 JMSObject
20、Message 和 Business Object 的转换。为 SOAPHTTP2JMSBinding 新建 JMSExport 自定义实现类: JMSObjectBindingImpl.java。接口选择 com.ibm.websphere.sca.jms.data.JMSObjectBinding。此接口提供了 一些数据转换的方法。添加JMSExport自定义实现类的代码: 首先新建java类:为SOAPHTTP2JMSBinding新建普通的java数据对象,以承载从JMSExport传 入的JMSObjectMessage对象,该类也可以作为JMS客户端的业务对象,客户 端在访问ESB
21、队列时,将此业务对象与JMSObjectMessag对象进行转换(详见 客户端 Servlet 和 ServiceConsumer 的代码):JMSDataObject.java实现接口: java.io.Serializable添加以下属性到该类:private String bookname;private int count;private String city;private String street;private double totalPrice;打开实现类JMSObjectBindingImpl,添加下列代码:public class JMSObjectBindingImp
22、l implements JMSObjectBinding ( private JMSDataObject jmsdata;private DataObject bo;public void setObject(Object arg0) throws DataBindingException ( System.out.println(set JMS Object.);jmsdata = (JMSDataObject)arg0;public Object getObject() throws DataBindingException (return jmsdata;public boolean
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 WebSphere ESB 实现协议转换和数据转换概要 实现 协议 转换 数据 概要
链接地址:https://www.31ppt.com/p-5010499.html