专注于Java EE平台、敏捷方法及Open Source技术咨询
用户可能已经注意到,这里并没有为TellerBean声明Home或远程接口。如果某会话
Bean仅供Web服务接口访问,则不需要声明Home或远程接口,因此在此省略了它们。其中,将TellerEndpoint类声明为端点接口。该接口暴露了两个操作,它们均对应于TellerBean中提供的方法。
public interface TellerEndpoint extends Remote {
public String[] getAccountsOfCustomer(String customerId) throws RemoteException;
public BigDecimal getAccountBalance(String accountID) throws RemoteException; }
接下来,需要借助于上述接口,并使用JBossWS附带的wstools工具生成Web服务相关部署描述府(WSDL、JAX-RPC映射文件、webservices部署描述府),即互操作Web服务定义。Ant目标wstools操作如下:
ant -f jboss-build.xml wstools
注意,wstools使用wstools-config.xml文件控制上述内容的生成。
www.open-v.com 拓宽视野,奔向成功 Open View, Victory Open 30 专注于Java EE平台、敏捷方法及Open Source技术咨询
上述Ant任务生成了如下配置信息:
z TellerService.wsdl:这是描述Web服务的WSDL定义。注意,在运行期,JBossWS
会替换其中的一些取值。
z jaxrpc-mapping.xml:它描述WSDL类型与底层Java实现间的映射关系。由于这里
的客户程序也是采用Java编写的,因此开发者在完成客户端映射时能够重用它。 z webservices.xml:描述webservice。它将Endpoint连接到服务器端组件(比如,会
话Bean)。同时,它还给出了相关部署文件的位置信息。
这里的Web服务是简单会话Bean,因此只需要将相关类和部署描述符打包到EJB jar文件中。其中,package-ws任务能够完成打包工作,deploy-ws目标能够将EJB jar部署到JBoss。
ant -f jboss-build.xml package-ws ant -f jboss-build.xml deploy-ws
一旦上述Web服务部署完成,用户通过如下URL能够查看到WSDL文件。
http://localhost:8080/bankws-ejb/TellerService?wsdl 在本实例中,创建了WSDL文件。反之,用户也可以手工编写用于Web服务的WSDL文件,然后借助于JBossWS附带的wstools工具生成Java端点接口。
5.3 运行Web服务客户
同时,本书还提供了从非J2EE环境中访问该Web服务的Java客户应用。
public class WSClient {
public static void main(String[] args) throws Exception {
URL url =
new URL(\
QName qname = new QName(\
www.open-v.com 拓宽视野,奔向成功
Open View, Victory Open
31 专注于Java EE平台、敏捷方法及Open Source技术咨询
\
ServiceFactory factory = ServiceFactory.newInstance(); Service service = factory.createService(url, qname);
TellerEndpoint endpoint = (TellerEndpoint) service.getPort(TellerEndpoint.class);
String customer = \
String[] ids = endpoint.getAccountsOfCustomer(customer);
System.out.println(\\+ customer); for (int i=0; i System.out.println(\+ ids[i] + \+ endpoint.getAccountBalance(ids[i])); } } } 用户能够使用Ant目标run-ws运行上述Java客户。 ant -f jboss-build.xml run-ws 客户端将显示出属于某给定顾客的账号收支情况。 [java] Customer: 200 [java] account[5005] 3300.00 [java] account[5006] 2458.32 [java] account[5007] 220.03 [java] account[5008] 59601.35 5.4 监控Web服务请求 在处理Web服务请求时,开发者都希望能够观察到客户同服务器间传递的实际消息。JBoss通过org.jboss.ws.server.ServiceEndpoint Category记录了这类信息。为了能够记录它们,需要往log4j.xml文件新增如下内容: www.open-v.com 拓宽视野,奔向成功 Open View, Victory Open 32 专注于Java EE平台、敏捷方法及Open Source技术咨询 一旦设置好后,所有的SOAP请求和响应都将记录到server.log文件中。比如,在调用getAccountOfCustomer方法后,能够在server.log中发现如下内容: 2005-05-16 17:50:43,479 DEBUG [org.jboss.axis.transport.http.AxisServlet] xmlns:xsi=\ 2005-05-16 17:50:44,240 DEBUG [org.jboss.axis.transport.http.AxisServlet] www.open-v.com 拓宽视野,奔向成功 Open View, Victory Open 33 专注于Java EE平台、敏捷方法及Open Source技术咨询 第6章 JMS和消息驱动Bean Duke银行应用并没有使用到JMS消息,因此本章将再次参考J2EE Tutorial中有关消息 驱动Bean(Message Driven Bean,MDB)的实例,从而研究如何在JBoss中使用消息。本书仍然假定用户已经熟悉JMS和MDB基本概念。其中,J2EE Tutorial中用于MDB的代码位于j2eetutorial14/examples/ejb/simplemessage。位于simplemessage目录下存在jboss-build.xml文件,供从头编译和运行JBoss版本的MDB使用。 实例代码很简单。仅仅有两个类,一个用于客户端,一个用于MDB(同其他EJB不同,它不需要其他接口)。客户将消息发布到JMS Queue中,MDB借助于标准的onMessage方法处理这些消息。其中,这些消息都是javax.jms.TextMessage类型,该MDB只是简单地打印出各个消息含有的文本信息。 同容器相关的任务有两个。其一,在JBoss中设置Queue。其二,配置MDB,以接收来自该Queue的消息。 6.1 构建实例 6.1.1 编译并打包MDB和客户 从simplemessage目录调用compile-mdb目标,能够完成代码的编译工作。 ant -f jboss-build.xml compile-mdb 然后,依次运行如下Ant目标,能够在jar目录生成MDB存档、客户存档以及由它们合并的EAR文件。 ant -f jboss-build.xml package-mdb ant -f jboss-build.xml package-mdb-client ant -f jboss-build.xml assemble-mdb 请注意,这同Duke银行应用建立的目录结构相同,即dd目录含有部署描述符、jar目录含有构建过程生成的存档。 6.1.1.1 指定MDB监听的Queue 同JBoss具体容器其他信息一样,通过jboss.xml能够指定MDB使用的Queue名。 www.open-v.com 拓宽视野,奔向成功 Open View, Victory Open 34