8.5.1 在RAD上创建Entity Bean CMP
在RAD上创建的所有的Entity Bean CMP如图8-55所示。本例有6个数据库表,每个CMP对应相应的数据库表如下。
l AccountCMP对应于数据库表ACCOUNT。
l BkSequenceNumCMP对应于数据库表BK-SEQUENCE-NUM。
l BookCMP对应于数据库表BOOK。
l OrderCMP对应于数据库表ORDER。
l OrderItemCMP对应于数据库表ORDER_ITEM。
l UserCMP对应于数据库表USER。
图8-55 在RAD上创建的Entity Bean CMP
下面是各个Entity Bean CMP。
(1)AccountCMP:负责对ACCOUNT数据库表的select、insert、update和delete,如图8-56所示。
l CMP实现类:AccountCMPBean
l CMP主键类:AccountCMPKey
l CMP本地接口:AccountCMPLocal
l CMP本地Home接口:AccountCMPLocalHome
图8-56 AccountCMP
(2)BkSequenceNumCMP:负责对BK-SEQUENCE-NUM数据库表的select、insert、update和delete,如图8-57所示。
l CMP实现类:BkSequenceNumCMPBean
l CMP主键类:BkSequenceNumCMPKey
l CMP本地接口:BkSequenceNumCMPLocal
l CMP本地Home接口:BkSequenceNumCMPLocalHome
图8-57 BkSequenceNumCMP
(3)BookCMP:负责对BOOK数据库表的select、insert、update和delete,如图8-58所示。
l CMP实现类:BookCMPBean
l CMP主键类:BkSequenceNumCMPKey
l CMP本地接口:BkSequenceNumCMPLocal
l CMP本地Home接口:BkSequenceNumCMPLocalHome
图8-58 BookCMP
(4)OrderCMP:负责对ORDER数据库表的select、insert、update和delete,如图8-59所示。
l CMP实现类:OrderCMPBean
l CMP主键类:OrderCMPKey
l CMP本地接口:OrderCMPLocal
l CMP本地Home接口:OrderCMPLocalHome
图8-59 OrderCMP
(5)OrderItemCMP:负责对ORDER-ITEM数据库表的select、insert、update和delete,如图8-60所示。
l CMP实现类:OrderItemCMPBean
l CMP主键类:OrderItemCMPKey
l CMP本地接口:OrderItemCMPLocal
l CMP本地Home接口:OrderCMPLocalHome
图8-60 OrderItemCMP
(6)UserCMP:负责对USER数据库表的select、insert、update和delete,如图8-61所示。
l CMP实现类:UserCMPBean
l CMP主键类:UserCMPKey
l CMP本地接口:UserCMPLocal
l CMP本地Home接口:UserCMPLocalHome
图8-61 UserCMP
8.5.2 在RAD上创建Session Bean
Session Bean负责实际的业务需求,归根到底可以分为以下两大类。
(1)根据前端所传来的数据,调用相应的Entity Bean CMP,对相应的数据库的数据进行相应的insert、update或delete操作。
(2)根据前端所传来的数据,调用相应的Entity Bean CMP,对相应的数据库的数据进行相应的select操作,形成相应的数据结果传到前端。
Session Bean形成相应的处理各种业务需求的接口供调用,如图8-62所示。
图8-62 RAD所创建的Session Bean
在此将创建3个Session Bean。
(1)BookMgr,如图8-63所示。
l Session Bean远程实现类:BookMgrBean
l Session Bean远程接口类:BookMgr
l Session Bean的远程Home接口:BookMgrHome
(2)OrderMgr,如图8-64所示。
l Session Bean远程实现类:OrderMgrBean
l Session Bean远程接口类:OrderMgr
l Session Bean的远程Home接口:OrderMgrHome
图8-63 Session Bean BookMgr 图8-64 Session Bean OrderMgr
(3)UserAccountMgr,如图8-65所示。
l Session Bean远程实现类:UserAccountMgr Bean
l Session Bean远程接口类:UserAccountMgr
l Session Bean的远程Home接口:UserAccountMgrHome
图8-65 Session Bean UserAccountMgr
8.5.3 在RAD上将Session Bean发布为Web Service
上面所创建的Session Bean的远端接口需要用RMI传输协议来调用。可以使用分布式系统的集成,也可以基于服务总线的应用协议转换功能来集成,本章基于标准化的考虑,将Session Bean发布为基于HTTP/SOAP传输协议的Web Service。
将上面的Session Bean发布成相应的Web Service如图8-66所示,包括如下3个Web Service。
l BookMgrService
l OrderMgrService
l UserAccountMgrService
图8-66 将Session Bean发布成Web Service
8.6 SIBus服务总线的基本原理
在介绍具体的如何实现SIBus服务总线之前,简单介绍一下服务总线的创建过程(后面会一步步详细介绍创建过程),然后再介绍其基本原理。
首先创建一个服务总线的名称,然后将应用服务器作为总线成员加入到服务总线中来,接着创建端点监听器来接收外部的服务请求。
接下来为每个服务总线创建目标队列,以便端点监听器在收到服务请求后,将请求消息传到目标队列。
再创建出站服务,建立相应的出站服务器端口,接下来在目标队列中配置默认转发路由路径,以便目标队列在收到端点监听器的请求消息后,通过默认路径转给出站服务器端口。
最后为每一个服务创建相应的入站服务,并绑定相应的端点监听器和相应的目标队列,以便端点监听器在收到入站服务的外部请求消息后,将请求消息转发到相应的目标队列。进一步将入站服务发布成Web Service的WSDL,以便外部调用。
下面进一步介绍服务总线工作的基本原理。
服务请求者在收到服务总线入站服务发布的WSDL文件后,将创建相应的SOAP请求信息给服务总线。因为创建每个服务的入站服务时,已经将每个入站服务与端点监听器及目标队列进行了关联,所以当服务请求者根据入站服务的WSDL发出服务请求时,这个服务请求就会发给相应的端点监听器,并有端点监听器将这个服务请求转给建立入站服务时所指定的目标队列。
以下代码是本章网上书店图书管理服务接口的入站服务的WSDL文件的service部分(将会在下面章节创建),当服务请求者根据这个地址向服务总线发出服务请求时,它自然会被对应图书管理入站服务的端点监听器收到,端点监听器会将这个服务转发给对应于图书管理入站服务的目标队列。
<wsdl:service name="BookMgrDestinationInboundService">
<wsdl:port name="SOAPHTTPChannel1InboundPort"
binding="sibusbinding:SOAPHTTPChannel1InboundPortBinding">
<wsdlSOAP:address
location="http://localhost:9080/wsgwSOAPhttp1/SOAPhttpengine
/BookStoreBus/BookMgrDestinationInboundService
/SOAPHTTPChannel1InboundPort"/>
</wsdl:port>
</wsdl:service>
目标队列将服务请求消息根据所创建的默认转发路由路径(创建为指向图书管理出站服务)转给图书管理的出站服务器端口,图书管理的出站服务器端口将服务请求转给外部的真正的图书管理服务提供者(这里服务总线可以根据业务需求进行相应的消息格式转换,甚至传输协议的转换)。
外部的服务管理提供者在实现服务请求后,会将服务响应消息返回给出站服务器端口,出站服务会返回给目标队列,端点监听器从目标队列得到响应消息后,将响应消息返回给服务请求者。
SIBus服务总线的工作原理如图8-67所示。
图8-67 SIBus服务总线的工作原理
8.7 创建基于Websphere 6.0 SIBus服务总线的
SOA架构的服务集成系统
上一节介绍了SIBus的工作原理,前面章节已经在Websphere RAD上创建了Entity Bean CMP、Session Bean和Web Service。网上书店系统的所有业务通过3个Web Service组件(BookMgrService、OrderMgrService和UserAccountMgrService)来分别对外发布。下面将详细介绍如何通过基于SOA架构的Websphere 6.0 SIBus服务总线来将这3个Web Service组件集成到服务总线上来。
8.7.1 创建SDO库
SDO,其全称为Service Data Objects,中文为“服务数据对象”,是IBM和BEA共同发布的一个基于Java平台的编程框架和API,目的在于使对数据的检查、读取和更新更加容易,前面提到ESB需要有消息格式转换的功能。SIBus上的所有消息格式都是基于SDO接口的,这样可以调用SDO的接口对消息格式实现转换,所有SDO的数据类型都存在SDO库中。
此外,SIBus会用SDO库存储WSDL的定义以支持进一步的Web 服务请求。
所以,需要先在Websphere自带的Cloudscape上创建SDO库。下面是创建SDO Repository的过程。
首先从Admin Console中找到相应的应用服务器的名称和节点,以便在下面的命令行中调用,下面是笔者的服务器的信息,如图8-68所示。
l 应用服务器的名称:server1
l 节点:liangahNode01
图8-68 应用程序服务器
在下列命令窗口中,读者需要将路径改为自己所安装的RAD的目录(如笔者将RAD安装在E:/rad/),然后执行相关命令。
注意:E:/rad/runtimes/base_v6/bin路径是笔者安装的RAD所带的Websphere 6.0的bin路径,读者需要根据自己安装的RAD目录确定相应的bin路径;如果读者直接安装Websphere 6.0(不通过RAD),也可以直接找到相应的Websphere 6.0的“bin”路径。
在目录E:/rad/runtimes/base_v6/bin中运行下面的命令,如图8-69所示。
wsadmin -f installSdoRepository.jacl -createDb liangahNode01 server1
图8-69 运行创建SDO Repository命令
通过上面的liangahNode01和server1,读者要根据图8-68来查找自己的应用服务器的名称和节点,SDO库创建成功后,读者可以在Console中看到成功信息,如图8-70所示。
图8-70 SDO库安装完成
在Admin Console中的“企业应用程序”下面可以看到多了一个相应的“SDO Repository”运行程序如图8-71所示。
图8-71 Repository运行程序