EJB-MDB
来源:互联网 发布:淘宝联盟鹊桥入口 编辑:程序博客网 时间:2024/06/06 02:18
MDB(Message DrivenBean)消息驱动Bean.它是EJB跟JMS的一个整合,跟SessionBean 一样,MDB是由EJB容器进行管理,同时也可以利用EJB所提供的系统服务诸如事务,安全等.
我们可以通过MDB的规范,能够使用更为简洁的方式来开发JMS异步消费者,作为开发者需要的是去实现onMessage方法即可,你不需要去获取JMS链接,不需要JMS Session,也不需要关心MDB启动,因为这些EJB容器会帮你来做,需要做的是通过Annotation来制定JMS消息的目的和类型即可.
因为MDB是从无状态的Session Bean 发展过来的,所以他们两个有很相似的地方.而在这里我们需要了解他们的不同即可.
无状态Session Bean提供了业务接口,客户端需要通过同步的方式来调用无状态的Session Bean .是一种同步的通讯方式.
MDB不需要客户端直接调用,它是一个消息监听者.是一种异步的通讯方式.
接下来我们通过一个MDB的例子来具体展示如何使用MDB.因为我们已经知道MDB不需要直接面向客户端,所以它不需要定义任何借口(跟Session Bean对比,它需要一个定义接口,为客户端服务.),一个Bean类即可,同时因为要做为消息监听器使用,因为要去实现MessageListener接口.
package com.tgb.ejb; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven( activationConfig = { @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Queue"), @ActivationConfigProperty(propertyName="destination",propertyValue="queue/myqueue") } ) public class MyQueueMDBBean implements MessageListener { public void onMessage(Message msg) { try { TextMessage textMessage = (TextMessage)msg; System.out.println("MyQueueMDBBean被调用了【"+textMessage.getText()+"】"); } catch (JMSException e) { e.printStackTrace(); } } }
上面的MDB在收到JMS消息之后只是简单的或许了JMS消息中的信息,它并没有调用SessionBean来处理所接受到的信息.
将此MDB编译并部署到JBoss应用服务器中,它就可以监听JDNI为queue/myqueue的消息目的.
接下来我们需要开发一个应用程序来向JBoss服务器的消息目的发送消息.客户端如下:
package com.tgb.ejb; import javax.jms.JMSException; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.TextMessage; import javax.naming.InitialContext; import javax.naming.NamingException; public class MyQueueBeanClient { /**建立Queue 客户端 * @param args * @throws NamingException * @throws JMSException */ public static void main(String[] args) throws NamingException, JMSException { InitialContext context = new InitialContext(); //创建QueueConnectionFactory QueueConnectionFactory factory=(QueueConnectionFactory)context.lookup("ConnectionFactory"); //创建QueueConnection QueueConnection queueConnection= factory.createQueueConnection(); //创建QueueSession QueueSession queueSession =queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); //获取Destination对象 Queue queue = (Queue)context.lookup("queue/myqueue"); //创建文本对象 TextMessage textMessage = queueSession.createTextMessage("hello world!"); //创建发送者 QueueSender sender = queueSession.createSender(queue); //发送消息 sender.send(textMessage); //关闭资源 queueSession.close(); queueConnection.close(); System.out.println("消息已发送"); } }
运行客户端我们就向JMS 的消息目的地发送一个简单的文本消息.随后MDB会被出发,以下是效果
小结:通过上面的实例我们能够看到,虽然客户端不能直接与EJB交互,但是依然能够跟它进行通讯,这是一种低耦合的方式通讯.虽然本实例获取消息之后仅仅简单的在控制台上打印消息,但在实际的项目中MDB会获取JMS消息中的信息之后需要调用Session Bean对信息进行处理,例如在用户注册信息之后通知用户并发送相关的邮件信息.这个业务可以通过MDB来完成,只需要通过依赖注入将Session Bean注入此MDB中即可.
在进行的过程中还会出现一个NameNotFoundException的问题,在下一篇文章中对此进行解决.
- EJB-MDB
- Jboss Ejb MDB
- JMX, JMS, MDB of EJB
- EJB MDB(消息驱动bean)
- 带你走进EJB--MDB
- EJB-MDB消息驱动Bean
- 带你走进EJB--MDB的NameNotFoundException
- 简单的Java Message Service编程 和 EJB MDB
- EJB整理3-消息驱动Bean(MDB)
- 带你走进EJB--MDB实现发送邮件(1)
- 带你走进EJB--MDB实现发送邮件(2)
- 带你走进EJB--MDB实现发送邮件(3)
- 【EJB系列】(三)——JMS和MDB
- 从头到尾讲解EJB MDB(消息驱动bean)二——MDB实现技术
- 从头到尾讲解EJB MDB(消息驱动bean)三——MDB Class、Client 代码规范
- MDB
- MDB
- Eclipse3.2.1中开发EJB 2.x的Message Driven Bean(MDB)
- 4 JAVA 数组的应用 金额变大写
- JVM垃圾回收总结
- poj 1287 Networking
- unity3d游戏开发经验之对于关卡类游戏的技巧
- unity3D游戏开发之浅谈如何提高游戏生命力
- EJB-MDB
- 标准的软件工程过程之文档标准
- 一个统计指定递增方式的基础向量的个数问题
- unity3f游戏开发之游戏设计中运营重用体系
- java Jstatd命令(Java Statistics Monitoring Daemon)
- unity3d游戏开发之我的游戏理念
- 蓝桥杯 回型嵌套 递归 解题报告
- JavaEE介绍
- Unity3D游戏开发之如何隐藏物体