好文档 - 专业文书写作范文服务资料分享网站

JBoss中文文档

天下 分享 时间: 加入收藏 我要投稿 点赞

专注于Java EE平台、敏捷方法及Open Source技术咨询

com.jboss.ebank.TellerEndpoint com.jboss.ebank.TellerBean Stateless Container

ejb/account Session

com.sun.ebank.ejb.customer.CustomerHome com.sun.ebank.ejb.customer.Customer

bankCustomer

用户可能已经注意到,这里并没有为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=\

200

...

2005-05-16 17:50:44,240 DEBUG [org.jboss.axis.transport.http.AxisServlet]

5005 5006 5007 5008

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名。

SimpleMessageBean

www.open-v.com 拓宽视野,奔向成功

Open View, Victory Open

34

38ywy891bi6tck19hlml
领取福利

微信扫码领取福利

微信扫码分享