Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

一个Message-Driven Bean的示例

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  原著: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和队列:


queueConnectionFactory = (QueueConnectionFactory) 
jndiContext.lookup 
("java:comp/env/jms/MyQueueConnectionFactory"); 
queue = (Queue) 
 jndiContext.lookup("java:comp/env/jms/QueueName");

  然后,客户端创建队列连接、会话和发送端:


queueConnection = 
queueConnectionFactory.createQueueConnection(); 
queueSession = 
queueConnection.createQueueSession(false, 
Session.AUTO_ACKNOWLEDGE); 
queueSender = queueSession.createSender(queue);

  最后,客户端向队列中发送几条消息:


message = queueSession.createTextMessage(); 
for (int i = 0; i < NUM_MSGS; i++) { 
 message.setText("This is message " + (i + 1)); 
 System.out.println("Sending message: " + 
 message.getText()); 
 queueSender.send(message); 
}

  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并显示其内容:


public void onMessage(Message inMessage) { 
TextMessage msg = null; 
try { 
if (inMessage instanceof TextMessage) { 
msg = (TextMessage) inMessage; 
System.out.println 
("MESSAGE BEAN: Message received: " 
+ msg.getText()); 
} else { 
System.out.println 
("Message of wrong type: " 
+ inMessage.getClass().getName()); 
} 
} catch (JMSException e) { 
e.printStackTrace(); 
mdc.setRollbackOnly(); 
} catch (Throwable te) { 
te.printStackTrace(); 
} 
}

  ejbCreate方法和ejbRemove方法

  这些方法必须满足以下条件:

  1、访问控制修饰必须是public。

  2、返回类型必须是void。

  3、修饰不能是static或final。

  4、throws子句不能定义任何应用程序例外。

  5、这个方法没有参数。

  在SimpleMessageBean类中,ejbCreate方法和ejbRemove方法为空。

  运行SimpleMessageEJB示例

  启动J2EE服务

  要显示message-driven bean的输出,你必须使用verbose模式启动服务:


j2ee -verbose

  创建队列

  1、使用j2eeadmin命令创建队列:



 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:EJB的编程限制   下一篇:在GoF模式以外(1)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章

j2eeadmin -addJmsDestination jms/MyQueue queue