快速业务通道

深入探讨EJB中新的消息驱动组件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
的关联。

深入探讨EJB中新的消息驱动组件 - 编程入门网

深入探讨EJB中新的消息驱动组件(3)

时间:2010-12-16

一旦完成了管理任务,接收到的消息酒杯传送到MessageDrivenBean实例的onMessage()方法中,而一旦这个方法完成后,消息所载的事务就会被执行或返回,然后组件重新返回可用实例池中。

当MessageDrivenBean实例被从容器中(通常从实例池中)的任何强的参考中逐出,都会调用ejbRemove()方法。ejbRemove()方法将释放任何被组件实例占用的资源。setMessageDrivenContext()方法有一个参数--javax.ejb.MessageDrivenContext类的一个实例。MessageDrivenContext类与定义在EJB1.1中的entity和session类有点类似,当一个组件实例被创建,容器就把它传递进一个实例占用的上下文中,这个类有取得环境信息的方法也有相应的方法取得JTA UserTransaction类(用于管理事务定界的组件)。

此外,组件提供者还应当在EJB2.0服务器中可摄制的组件提供一个没有参数的ejb.Create()方法。这个组件实例可以获得任何在ejb.Create()用于进行处理的所需要的资源,比如说,在这一点上,MessageDrivenBean实例可以取得一个数据库连接,如果ejb.Remove()方法被调用的话,它将关闭或释放。

值得注意的是,MessageDrivenBean现在已经大大的简化了创建JMS消息消费者的过程,下面的代码段3就创建并配置了一个EJB容器所委托创建的JMS消息消费者。开发者现在可以很容易的实现MessageDrivenBean接口,并可以把它配置在EJB服务器中且可以用来创建一个可收集消息的商业组件。

代码段3:

/** *MessageDrivenBean接口由每一个消息驱动企业级组件类实现。 *这个容器使用MessageDrivenBean 方法来通知 *企业级Bean实例的实例生命周期事件 */ public interface javax.ejb.MessageDrivenBean extends javax.jms.MessageListener { /** * 传送一个消息给监听者 * * 参数 message :Message对象。 */ public void onMessage(javax.jms.Message message); /** *容器在结束消息驱动对象的生命周期之前,调用这个方法。 */ public void ejbRemove(); /** *设置相关联的消息驱动上下文。 *容器在创建了实例后调用这个方法。 * 企业版 Bean 实例将保存context对象的参考到一个实例对象中 */ public void setMessageDrivenContext( javax.ejb.MessageDrivenContext context); }

在代码段4中给出了一个MessageDrivenBean实例的实现,在个组件从一个JMS TextMessage中取得一条字符串,并输出,它是根据代码段2种的JMS消息监听者程序改编的。

深入探讨EJB中新的消息驱动组件(4)

时间:2010-12-16

代码段: 4

/** * 这个类是 MessageDrivenBean的一个实现。 */ public class MyListenerMDB implements MessageDrivenBean { /** * 这是一个无参数构造器,这样 EJB容器可以使用Class.newInstance()方法来创建组件实例 */ public MyListenerMDB() { } /** *这个方法接受消息实例并执行消息处理过程。 * * 参数:message 。Message对象 */ public void onMessage(Message message) { // onMessage 实现仍然未变: // 从message对象中取出股票报价。 // StockQuoteProducer 发送 TextMessages // 并在适合的时候放出该对象。 try { String quote = ((TextMessage)message).getText(); System.out.println("股票报价: " + quote); } catch(JMSException e) { System.out.println( "不能处理消息: " + message); } } /** * 当MessageDrivenBean实例被从容器中抛出,该方法就被调用。 */ public void ejbRemove() throws javax.ejb.EJBException { System.out.println( "StockListenerMDB: ejbRemove被调用。"); } /** * 设置MessageDrivenContext实例。本方法将在组件

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号