EJB-MDB

来源:互联网 发布:淘宝联盟鹊桥入口 编辑:程序博客网 时间:2024/06/06 02:18

        MDB(Message DrivenBean)消息驱动Bean.它是EJBJMS的一个整合,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会被出发,以下是效果

计算机生成了可选文字:16:47:26,767INFO[sTDouT]MyQueueMDBBean被调用7[heiioworid!]

        

       小结:通过上面的实例我们能够看到,虽然客户端不能直接与EJB交互,但是依然能够跟它进行通讯,这是一种低耦合的方式通讯.虽然本实例获取消息之后仅仅简单的在控制台上打印消息,但在实际的项目中MDB会获取JMS消息中的信息之后需要调用Session Bean对信息进行处理,例如在用户注册信息之后通知用户并发送相关的邮件信息.这个业务可以通过MDB来完成,只需要通过依赖注入将Session Bean注入此MDB中即可.

        在进行的过程中还会出现一个NameNotFoundException的问题,在下一篇文章中对此进行解决.




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鱼翅卡在喉咙里怎么办 斗鱼身份证被使用怎么办 做的鱼丸太腥了怎么办 做鱼丸太稀了怎么办 斗鱼手机号换了怎么办 斗鱼直播掉帧怎么办 手机一直卡顿点不动怎么办呢 斗鱼直播分值底怎么办 斗鱼6000鱼丸怎么办卡 斗鱼直播没人看怎么办 淘宝直播间没人气怎么办 挂水了还是有热度怎么办 陌陌工会不结算工资怎么办 滴滴给了差评怎么办 饿了么星级低怎么办 滴滴乘客给低星怎么办 蘑菇街自动收货前还没到怎么办 小主播人气太少别人看不到怎么办 税收分类编码不可用怎么办 斗鱼鱼翅充错了怎么办 苹果指纹摔坏了怎么办 小米5指纹坏了怎么办 苹果5s指纹失灵怎么办 学生赌博输了3万怎么办 电脑录屏没有声音怎么办 别人说你没有他美怎么办 没有你我怎么办歌词是什么意思 要是没有他我怎么办啊歌词 用喀秋莎保存的视频黑屏怎么办 电脑杀毒之后开不了机怎么办 夫妻离婚分房分车怎么办 请的护身符丢了怎么办 老车轻微烧机油怎么办 电脑下软件变卡怎么办 机械表日历偏了怎么办 子宫内膜异位痛经怎么办 凉着了坏肚子怎么办 昆虫叮咬后疼痛起水泡怎么办 每次来月经都痛经怎么办 人左肩的灯灭了怎么办 香港超过7天了怎么办?