快速业务通道

J2EE组件开发 - 消息驱动的EJB - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
Connection接口的一种子类型,它代表着一个与JMS发布-订阅消息服务的连接。JMS客户程序调用TopicConnection.createTopicSession()方法创建Top icSession的实例。会话的事务支持和回执模式也在创建TopicSession时指定。

TopicSession.createTopic()方法返回一个Topic对象的实例。Topic接口封装了一个话题目的地,发布者向该目的地发送消息,订阅者从该目的地接收消息。不同的服务提供者按照不同的方式实现话题名称的层次结构,调用Topic.getTopicName()方法可以获得话题的String形式的描述。

TopicSession.createPublisher()方法创建一个TopicPublisher消息生产者,它用来把消息发布到Topic。消息可以通过各种不同的TopicPublisher.publish()方法发布到Topic,这些不同的publish()方法能够把消息发送给TopicPublisher对象关联的Topic对象,或者发送给publish()方法调用中指定的Topic对象。消息递送模式、优先级、消息的有效时间都可以在调用TopicPublisher.publish()方法时指定。发送给Topic的消息可以用Session接口中定义的各种消息构造方法创建。

五、实例

本示例应用是一个消息驱动Bean应用的简单例子,由以下两部分构成:

SimpleMessageClient:J2EE应用客户程序,向队列发送消息。

SimpleMessageEJB:一个消息驱动的Bean,异步地接收和处理由客户程序发送到队列的消息。

客户端应用把消息发送到队列,队列由管理员通过j2eeadmin命令创建。JMS提供者(这里是J2EE服务器)把消息传递给消息驱动Bean的实例,由Bean的实例处理消息。

5.1 客户端

SimpleMessageClient把消息发送到SimpleMessageBean监听的队列。客户程序首先确定连接工厂和队列:

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);

J2EE组件开发 - 消息驱动的EJB(4)

时间:2011-02-10

最后,客户程序把几个消息发送到队列:

message = queueSession.createTextMessage(); for (int i = 0; i < NUM_MSGS; i++) { message.setText("我是" + msgArray[i] ); System.out.println("Sending message: " + message.getText()); queueSender.send(message); }

5.2 MDB组件

SimpleMessageEJB类阐明了编写消息驱动Bean类的要求:

实现MessageDrivenBean接口和MessageListener接口。

类定义为public类型。

类不能定义成abstract或final。

实现一个onMessage()方法。

实现一个ejbCreate()方法和一个ejbRemove()方法。

包含一个public类型的不需要参数的构造方法。

不能定义finalize()方法。

与会话Bean和实体Bean不同,消息驱动的Bean不定义客户程序访问的接口。客户程序不是先定位消息驱动的Bean,再调用这些Bean上的方法。虽然消息驱动的Bean没有业务方法,但它们可以包含由onMessasge()方法内部调用的辅助方法。

当队列接收到一个消息,EJB容器将调用消息驱动Bean的onMessage()方法。在SimpleMessageBean类中,onMessage()方法把接收到的消息定型(cast)成为TextMessage类型,然后显示出文本信息:

public void onMessage(Message inMessage) {    TextMessage msg = null; try { if (inMessage instanceof TextMessage) { msg = (TextMessage) inMessage; System.out.println("MESSA

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号