| | | 深入探讨EJB中新的消息驱动组件 | | 2001-09-24·
·wayne··yesky
| 上一页 1 2 3 4 5 6 下一页 代码段一:准备客户端
客户端应用程序使用了带有JMS 主题的MessageListener来接受和处理消息。
import javax.jms.*;
/**
*一个例程,演示如何取得一个JMS
*连接并取得一个消息监听者。在本例中
*我们将获取一个与一个JMS主题的连接
*/
public class JMSSample {
public static void main (String args[])
{
InitialContext context = new InitialContext();
// 查找主题
Topic topic (Topic)context.lookup("MyTopic");
file://取得我们创建JMS连接时所要用到的连接创建器
TopicConnectionFactory tcf =
(TopicConnectionFactory)context.lookup(
"TopicConnectionFactory");
// 创建JMS连接
TopicConnection conn = tcf.createTopicConnection();
// 从连接中创建JMS session。
// 这样我们就可以创建一个非事务处理、AUTO_ACKNOWLEDGE的连接
TopicSession session = conn.createTopicSession(
false, Session.AUTO_ACKNOWLEDGE);
// 创建主题订阅者
TopicSubscriber subscriber =
session.createSubscriber(topic);
// 监听者
subscriber.setMessageListener(myListener);
// 指出我们将要接受信息的连接
conn.start();
}
}
| 除了采用上面的步骤取得JMS MessageConsumer(消息消费者)的连接之外,开发者还可创建并注册一个或多个使用Message Consumer的JMS Message Listener(消息监听者)接口。Message Listener总是在一个单独的控制线程中执行,这就意味着在编写消息监听者时,开发者不需要担心并发性问题的出现,见图2。
 | 下面我给出了一个典型的JMS 消息监听者实现的代码。
代码段2:
/**
* 这个类是JMS MessageListener的一个实现
* 用来处理包含股票报价的消息
*/
class MyListener implements MessageListener {
/**
* 从收到的信息中取出股票报价
* 并且把它放入标准输出流中并显示。
*/
public void onMessage(Message message) {
// 从消息对象中取出报价
// 我们知道消息产生者发送TextMessages
try
{
String quote = ((TextMessage)message).getText();
System.out.println("股票报价: " + quote);
}
catch(JMSException e)
{
System.out.println(
"错误处理消息: "+message);
}
}
}
| 在这个实现中,MessageListener接收到的消息中包含了股票报价,消息监听者只是简单的从消息体中取得股票报价并把它输出到标准输出流中。
开发一个健壮的JMS客户端程序可能是非常困难的,程序员必须要考虑可能会同时接受多个消息,此外还有交易安全性、并发性消息处理、对象生命周期、容错性和可扩展性,这些都是开发者急切地想从EJB服务器中找到的功能。不过直到现在,程序员们还不得不自己动手把这些技术结合在一起应用。
为了整合EJB1.1和JMS,JMS监听者必须要使用我们在代码段2中描述的方法来建立。JMS客户端程序必须参考一个stateless(无状态)的用于响应处理JMS消息的session组件,然后,JMS消息要传递给EJB。然而,JMS消息并不要求被序列化,这就意味着这条消息在传递到远程的EJB实例之前必须被转换成为有序的消息类或在消息监听者中部分地解构。而且,应用程序开发者还有责任管理JMS服务器之间的事务联系,以及处理EJB、消息和并发性,这些都是非常复杂的事情。
即使一个应用程序开发者能把上面的这些都完成,并且也有能力访问JMS提供者并取得消息,但显然,他需要编写一大堆的代码,这对于我们这些常人往往是不大可能实现的。EJB2.0解决了这个问题,它通过扩展EJB组件类型,为需要异步消息支持的组件开发者提供简化的解决方案——新的MessageDriven组件类型。
上一页 1 2 3 4 5 6 下一页 | | | 感谢
访问天极网,如果您觉得该文章涉及版权问题,请看这里!
|
|