8.7.2 创建SIBus Web服务资源适配器
资源适配器,英文为Resource Adapter,是J2EE Connector Architecture(JCA)所定义的一个组件,其目的在于使得J2EE的各种应用程序通过资源适配器的标准接口,对各种资源进行调用,类似大家熟悉的通过JDBC的标准接口来调用数据库的资源。这里安装Web服务资源适配器,以便服务总线能够调用Web服务,其创建过程如图8-72所示。
图8-72 资源适配器成功启动界面
在目录E:/rad/runtimes/base_v6/bin运行下面的命令。
wsadmin -f ../util/sibwsInstall.jacl INSTALL_RA -installRoot
"E:/rad/runtimes/base_v6" -nodeName liangahNode01
8.7.3 安装和配置端点监听器
创建端点监听器以便服务总线接收Web服务的请求,所有外部或者内部送给服务总线的请求都需要端点监听器来接收。
安装端点监听器之前,首先需要安装sibws,它是服务总线启动Web Service所需要的,过程如下。
1.安装sibws运行程序
运行命令“wsadmin -f ../util/sibwsInstall.jacl INSTALL”,如图8-73所示。在目录E:/rad/runtimes/base_v6/bin下运行如下的命令。
wsadmin -f ../util/sibwsInstall.jacl INSTALL -installRoot
"E:/rad/runtimes/base_v6" -serverName server1 -nodeName liangahNode01
图8-73 安装sibws运行程序
安装完毕sibws,启动sibws,可以看到sibws.liangahNode01.server1运行在企业应用程序中,如图8-74所示。
图8-74 启动sibws界面
2.安装支持HTTP协议的端点监听器应用程序
要使用支持HTTP协议的端点监听器,还需要安装两个应用程序,如图8-75所示。
运行命令“wsadmin -f ../util/sibwsInstall.jacl INSTALL_HTTP”,在目录E:/rad/ runtimes/base_v6/bin下运行如下命令。
wsadmin -f ../util/sibwsInstall.jacl INSTALL_HTTP -installRoot
"E:/rad/runtimes/base_v6" -serverName server1 -nodeName liangahNode01
图8-75 安装支持HTTP协议的端点监听器应用程序
安装完毕sibwshttp1,启动sibwshttp1,可以看到sibwshttp1.liangahNode01.server1运行在企业应用程序中,如图8-76所示。
安装完毕sibwshttp2,启动sibwshttp2,可以看到sibwshttp2.liangahNode01.server1运行在企业应用程序中,如图8-76所示。
图8-76 安装启动应用程序
3.创建端点监听器
安装完成基于HTTP协议的端点监听器应用程序后,这里就可以进一步创建端点监听器了,其创建过程如下。
(1)在Admin Console中的左边列表中选择“服务器”→“应用服务器”选项,打开“应用程序服务器”对话框,如图8-77所示。
图8-77 打开“应用程序服务器”对话框
选择“应用程序服务器”对话框的“名称”目录下面的“server1”选项,打开“server1”的属性对话框,如图8-78所示。
图8-78 打开“server1”的属性对话框
(2)创建端点监听器Endpoint Listeners
选取“其他属性”下面的“Endpoint Listeners”选项,进入“Endpoint Listeners”的新建对话框,如图8-79所示。
图8-79 “Endpoint Listeners”新建对话框
单击【新建】按钮,弹出“Endpoint Listeners”创建对话框,如图8-80所示,输入下面信息。
l 名称:SOAPHTTPChannel1
l URL根:http://localhost:9080/wsgwSOAPhttp1/
l WDSL服务HTTP URL 根:http://localhost:9080/wsgwSOAPhttp1/
图8-80 创建端点监听器Endpoint Listeners
配置完后,单击【应用】按钮,可以看到配置的Endpoint Listeners如图8-81所示。
图8-81 所创建的端点监听器Endpoint Listeners
8.7.4 创建服务总线
服务总线是一组相连的服务器和集群,创建服务总线就是先命名一个服务总线的名称,有了这个名称后,服务器将以总线成员的身份加入到此服务总线,服务器上的应用程序通过与该服务器相关联的消息传递引擎连接到服务总线上来。服务总线支持基于消息和棉线服务体系的应用程序。下面是创建服务总线的过程。
选择左边列表的“服务集成”→“总线”选项,弹出新建总线对话框,如图8-82所示。
图8-82 新建总线对话框
单击【新建】按钮,进入服务总线的创建对话框,如图8-83所示,在“名称”文本框中输入所创建的服务总线名称“BookStoreBus”。
图8-83 服务总线创建对话框
单击【应用】按钮,完成服务总线的创建,如图8-84所示。
图8-84 所创建的服务总线
8.7.5 创建总线成员
创建总线成员的目的是将应用服务器和节点加入到相应的服务总线,以便将服务器所提供的各种服务和服务总线建立联系,其创建过程如下。
选择图8-84中“名称”目录下的“BookStoreBus”选项,打开“总线”对话框,如图8-85所示。
图8-85 创建总线成员
在对话框中选取目录“其他属性”下面的“总线成员”选项,弹出总线成员的添加对话框,如图8-86所示。
图8-86 进入总线成员的添加对话框
单击【添加】按钮,弹出“选择服务器或集群”对话框。在“服务器”下拉列表中选择应用服务器,如图8-87所示,这里实际上就是本地的应用服务器Websphere 6.1所对应的节点名称和服务器名称。
图8-87 选择服务器或集群
单击【下一步】按钮弹出“确认新总线成员的添加”对话框,如图8-88所示。
图8-88 确认新总线成员的添加
单击【完成】按钮,完成总线成员的添加工作,如图8-89所示,将显示所添加的节点和服务器。
图8-89 所添加的总线成员
8.7.6 创建总线目标
创建总线目标的目的在于创造一个虚拟的信息交换的场所,是一个消息接收地,可以是队列(queue)、主题空间(topic)等,本章将采用队列。当端点监听器收到服务请求消息后,会根据入站服务的设定,将服务请求转发到总线目标来。总线目标会根据默认转发路由路径将服务请求转给出站服务器端口。出站服务器端口会进一步将请求消息转给外部服务提供者得到返回消息。总线目标在收到出站服务器端口的返回消息后,会转给端点监听器。
本章的网上书店系统有3个Web Service的服务接口。
(1)BookMgrService
(2)OrderMgrService
(3)UserAccountMgrService
本章将分别对上面3个服务接口创建总线目标,下面是创建对应BookMgr总线目标的过程。
打开服务总线“BookStoreBus”对话框,如图8-90所示。
图8-90 服务总线对话框
在服务总线对话框中选取“其他属性”目录下面的“目标”选项,弹出目标新建对话框,如图8-91所示。
图8-91 新建目标
单击【新建】按钮,弹出目标类型创建对话框,如图8-92所示,选择“队列”选项。
图8-92 目标类型创建对话框
单击【下一步】按钮,弹出“设置队列属性”对话框,如图8-93所示,在文本框“标识”中输入目标的名称“BookMgrDestination”。
图8-93 设置队列属性
单击【下一步】按钮,弹出“将队列指定给总线成员”对话框,如图8-94所示,在“总线成员”下拉列表中选择相应的服务器。
图8-94 将队列指定给总线成员
单击【下一步】按钮,弹出“确认队列创建”对话框,如图8-95所示。
图8-95 确认队列创建
单击【完成】按钮,完成目标的创建,如图8-96所示。
图8-96 所创建的目标
上面完成了对应于BookMgr服务的总线目标“BookMgrDestination”的创建,同样的方法可建立对应于OrderMgr和UserAccountMgr的总线目标OrderMgrDestination和UserAccountMgrDestionation,如图8-97所示。
图8-97 对每个服务创建总线目标
这些总线目标的名字可以随便起,在后面建立入站服务时要被选择到。
8.7.7 创建出站服务
如前所述,总线目标在收到服务请求后,会将请求消息送到出站服务器端口上。出站服务器端口会进一步将请求消息转给外部服务提供者,出站服务器端口在得到响应消息后,会返回给总线目标。下面是创建出站服务的过程。
创建出站服务前,首先要找到外部服务提供者的Web Service组件的WSDL的路径地址,如图8-98所示。
图8-98 创建出站服务
在BookMgr.wsdl中找到相应的wsdlSOAP:address,见下面的黑体部分。
<wsdl:service name="BookMgrService">
<wsdl:port binding="impl:BookMgrSOAPBinding" name="BookMgr">
<wsdlSOAP:address location=
"http://localhost:9080/routerProject/services/BookMgr"/>
</wsdl:port>
</wsdl:service>
在浏览器链接中输入http://localhost:9080/routerProject/services/BookMgr?wsdl,也就是在从WSDL文件中所得到的地址(Web服务地址)后面加上?wsdl,以便查出WSDL文件的地址,如图8-99所示。
图8-99 通过URL得到WSDL的地址
这样可以得到BookMgr.wsdl的路径如下。
http://localhost:9080/routerProject/services/BookMgr/wsdl/BookMgr.wsdl
同样的方法可以得到OrderMgr.wsdl和UserAccountMgr.wsdl的路径如下。
http://localhost:9080/routerProject/services/OrderMgr/wsdl/OrderMgr.wsdl
http://localhost:9080/routerProject/services/UserAccountMgr/wsdl/UserAccountMgr.wsdl
有了上面的WSDL文件的路径,就可以创建相应的出站服务了,下面是创建BookMgr的出站服务过程。
打开服务总线“BookStoreBus”对话框,如图8-100所示。
选择“其他属性”目录下面的“出站服务”菜单,弹出“出站服务”新建对话框,如图8-101所示。
图8-100 创建BookMgr出站服务
图8-101 新建出站服务
单击【新建】按钮,弹出“查找目标服务WSDL”对话框,在“WSDL位置”文本框中输入所得到的WSDL路径,在“WSDL 位置类型”目录下面选取“URL”选项,这里是直接通过WSDL中所提供的URI地址来查找服务的,如图8-102所示。
图8-102 查找目标服务WSDL
单击【下一步】按钮,在弹出的对话框中的“服务”下拉列表中选择相应的服务接口。一个WSDL文件中可能含有多个服务接口,选择一个要加入服务总线的服务接口,如图8-103所示。
图8-103 选择服务
单击【下一步】按钮,弹出“选择端口”对话框,如图8-104所示,选取默认设置。
图8-104 服务器端口
单击【下一步】按钮,在弹出的对话框中输入下面的属性值,如图8-105所示,以便以后在总线目标中创建默认转发路由路径时调用。
l 出站服务名称:BookMgrOutboundService
l Service destination名:BookMgrOutboundService
l Port destination名:BookMgrOutboundPort
图8-105 出站服务和destination的名称
单击【下一步】按钮,在弹出的对话框的“总线成员”下拉列表中选择相应的服务器,如图8-106所示。
图8-106 将端口指定给总线成员
单击【完成】按钮,所创建的出站服务如图8-107所示。
图8-107 所创建的出站服务
上面是所创建的对应于BookMgr的出站服务BookMgrOutboundServer,同理可建立对应于OrderMgr和UserAccountMgr的出站服务,如图8-108所示。
图8-108 建立对应于OrderMgr和UserAccountMgr的出站服务
8.7.8 创建默认转发路由路径
在总线目标中创建默认转发路径的目的在于当总线目标收到端点监听器传来的服务请求消息后,它将根据这里设置的默认转发路由路径将服务请求消息转到它所定义的出站服务器端口,出站服务器端口会进一步将请求消息转给外部服务提供者。下面是在BookMgrDestination中创建默认转发路由路径的过程。
打开“目标”对话框,如图8-109所示。
图8-109 选择目标
选择目标“BookMgrDestination”选项,打开如图8-110所示对话框,在“默认转发路由路径”文本框中输入相应的出站服务的名称,如“BookStoreBus: BookMgrOutboundService”。
图8-110 目标对话框
同理可在OrderMgrDestination和UserAccountMgrDestination中创建下面的默认转发路由路径。
l BookStoreBus:OrderMgrOutboundService
l BookStoreBus:UserAccountMgrOutboundService
8.7.9 创建入站服务
服务总线需要给它所提供的每个服务创建相应的入站服务,并同时与端点监听器和总线目标相关联,以便以后服务调用者根据入站服务的WSDL文件向服务总线发出SOAP请求消息时,能被该端点监听器收到,同时将请求消息转到这里定义的总线目标。下面是创建BookMgr入站服务的过程。
打开服务总线“BookStoreBus”对话框,如图8-111所示。
图8-111 创建BookStoreBus入站服务
选择“其他属性”目录下面的“入站服务”选项,弹出“入站服务”新建对话框,如图8-112所示。
图8-112 选择入站服务
单击【新建】按钮,在弹出对话框的“模板WSDL位置”文本框中输入BookMgr服务的WSDL路径;在“模板 WSDL 位置类型”目录下面选取“URL”选项,这里是直接通过WSDL中所提供的URI地址来查找服务的;在“Service destination 名”下拉列表中选择对应于该入站服务的总线目标,如图8-113所示。BookMgr的WSDL路径如下。
http://localhost:9080/routerProject/services/BookMgr/wsdl/BookMgr.wsdl
图8-113 选择service destination和模板WSDL位置
单击【下一步】按钮,在弹出的对话框中的“服务”下拉列表中选择相应的服务接口。一个WSDL文件中可能含有多个服务接口,选择一个要加入服务总线的服务接口,如图8-114所示。
图8-114 从模板WSDL选择服务
单击【下一步】按钮,弹出入站服务命名对话框,为入站服务起一个相应的名称,并选择端点监听器,如图8-115所示。
图8-115 命名入站服务并选择endpoint listeners
单击【下一步】按钮,弹出入站服务发布对话框,如图8-116所示。
图8-116 定义UDDI发布属性
单击【完成】按钮,则完成了BookMgr的入站服务的创建工作,如图8-117所示。
图8-117 完成BookMgr入站服务的创建
同样可根据OrderMgr和UserAccountMgr的WSDL路径创建相应的入站服务,如图8-118所示,它们的WSDL路径如下。
http://localhost:9080/routerProject/services/OrderMgr/wsdl/OrderMgr.wsdl
http://localhost:9080/routerProject/services/UserAccountMgr/wsdl/UserAccountMgr.wsdl
图8-118 根据OrderMgr和UserAccountMgr的WSDL路径创建相应的入站服务
8.7.10 发布入站服务
创建入站服务后,需要给外部请求者创建相应的入站服务的WSDL文件,以便外部请求者能根据WSDL文件向服务总线发出相应的服务请求。发布入站服务包括下面两个步骤。
(1)企业服务总线通过发布入站服务,创建相应的WSDL文件,给其他系统来调用。
进入服务总线页面,打开“入站服务”对话框,选择所要发布的入站服务的选项,打开相应的入站服务对话框,如图8-119所示。
图8-119 发布入站服务
在对话框的“其他属性”目录下面,选择“将WSDL文件发布到ZIP文件”选项,弹出“发布WSDL文件”对话框,如图8-120所示。
图8-120 将WSDL文件发布到ZIP文件
选中图8-120中的ZIP文件链接,则可将ZIP文件下载到本地目录,如图8-121所示。
图8-121 将ZIP文件下载到指定目录
每个入站服务可以得到4个WSDL文件。
(2)验证企业服务总线的服务是否正常工作。
打开BookStoreBus.BookMgrDestinationInboundServiceService.wsdl文件,参见如下代码。
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://www.ibm.com/websphere/sib
/webservices/liangahNode01Cell/BookStoreBus/Service"
xmlns:sibusbinding="http://www.ibm.com/websphere/sib/webservices
/liangahNode01Cell/BookStoreBus/
BookMgrDestinationInboundService/Binding"
xmlns:impl=http://sessionbean.ejb.bkstore.com
xmlns:intf="http://sessionbean.ejb.bkstore.com"
xmlns:wsdlSOAP=http://schemas.xmlSOAP.org/wsdl/SOAP/
xmlns:wsi="http://ws-i.org/profiles/basic/1.1/xsd"
xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:tns2="http://dto.service.model.bkstore.com"
xmlns:SOAP=http://schemas.xmlSOAP.org/wsdl/SOAP/
xmlns:wsdl="http://schemas.xmlSOAP.org/wsdl/">
<wsdl:import namespace="http://www.ibm.com/websphere/sib
/webservices/liangahNode01Cell/BookStoreBus/
BookMgrDestinationInboundService/Binding" location=
"BookStoreBus.BookMgrDestinationInboundServiceBindings.wsdl"/>
<wsdl:service name="BookMgrDestinationInboundService">
<wsdl:port name="SOAPHTTPChannel1InboundPort"
binding="sibusbinding:SOAPHTTPChannel1InboundPortBinding">
<!-- Web Service组件BookMgr在服务总线中进行入站服务的服务地址 -->
<wsdlSOAP:address location="http://localhost:9080/wsgwSOAPhttp1
/SOAPhttpengine/BookStoreBus/
BookMgrDestinationInboundService/SOAPHTTPChannel1InboundPort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
输入上面的入站服务的地址(在末尾加?wsdl):http://localhost:9080/ wsgwSOAPhttp1/SOAPhttpengine/BookStoreBus/BookMgrDestinationInboundService/SOAPHTTPChannel1InboundPort?wsdl,如图8-122所示。
图8-122 输入入站服务地址
页面有输出,表示企业服务总线服务正常。