一个Message-Driven Bean的示例原著:Dale Green、Kim Haase 译者前言 有关本章中相应源代码的下载,请参看一个Session Bean的示例。 正文 因为message-driven bean是基于Java消息服务(JMS)技术的,要理解以下示例,你必须已经熟悉基本的JMS概念,例如队列和消息。学习有关这些概念的最好的地方是Java消息服务指南: http://java.sun.com/products/jms/tutorial/index.html 这一章讲述了一个message-driven bean示例的源代码。在开始学习前,你必须首先阅读Message-Driven Bean是什么中的基本概念。 示例应用程序概览 这个应用程序包括下列组件: 1、SimpleMessageClient:一个发送几个消息到一个队列中的J2EE应用程序客户端。 2、SimpleMessageEJB:一个异步接收和处理发送到队列中的消息的message-driven bean。 图7-1说明了这个应用程序的结构。应用程序客户端发送消息到队列中,这个队列是用j2eeadmin命令创建的。JMS供应者(在这里也就是J2EE服务器)将消息递交给一个message-driven bean的实例,这个实例将处理这个消息。 图7-1 SimpleMessageApp应用程序 在j2eetutorial/examples/src/ejb/simplemessage目录下有这个应用程序的源代码。要编译这个代码,到j2eetutorial/examples目录下。输入ant simplemessage。在j2eetutorial/examples/ears目录下有SimpleMessageApp.ear文件的示例。 J2EE应用程序客户端 SimpleMessageClient发送消息到队列中,SimpleMessageBean将对这个队列进行监听。客户端首先将定位连接factory和队列:
然后,客户端创建队列连接、会话和发送端:
最后,客户端向队列中发送几条消息:
Message-Driven Bean类 SimpleMessageEJB类的代码阐明了一个message-driven bean类所需满足的基本条件: 1、它实现了MessageDrivenBean接口和MessageListener接口。 2、类被定义为public。 3、类不能定义为abstract或final。 4、它实现了一个onMessage方法。 5、它实现了一个ejbCreate方法和一个ejbRemove方法。 6、它包含了一个公用的无参数的构造函数。 7、它不能定义finalize方法。 与session bean或entity bean不同,message-driven bean不具有定义客户端访问的remote接口或local接口。客户端组件不能定位message-driven bean并调用其中的方法。尽管message-driven bean不包含商业方法,但是它可能包含由onMessage方法调用的辅助方法。 onMessage方法 当队列接受到一个消息时,EJB容器调用message-driven bean中的onMessage方法。在SimpleMessageBean类中,onMessage方法将消息引入TextMessage并显示其内容:
ejbCreate方法和ejbRemove方法 这些方法必须满足以下条件: 1、访问控制修饰必须是public。 2、返回类型必须是void。 3、修饰不能是static或final。 4、throws子句不能定义任何应用程序例外。 5、这个方法没有参数。 在SimpleMessageBean类中,ejbCreate方法和ejbRemove方法为空。 运行SimpleMessageEJB示例 启动J2EE服务 要显示message-driven bean的输出,你必须使用verbose模式启动服务:
创建队列 1、使用j2eeadmin命令创建队列:
|