• Ejb消息驱动bean


    一 点对点发送消息:

    首先配置文件XX_service.xml放到 到jboss-4.2.2.GA\server\default\deploy中

    配置代码如下:

    <server>  
      <mbean code="org.jboss.mq.server.jmx.Queue"
             name="jboss.mq.destination:service=Queue,name=xiaoyi">
        <attribute name="JNDIName">queue/xiaoyi</attribute>   
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
      </mbean>
    </server>

    新建一ejb工程,建一工具类(主要用来加载context)代码如下:

    public static Context getcontext(){
            
            Context cx = null;
                    Properties pro = new Properties();
            pro.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                    "org.jnp.interfaces.NamingContextFactory");
            pro.setProperty(Context.PROVIDER_URL, "localhost:1099");
            try {
                cx = new InitialContext(pro);
            } catch (NamingException e) {
                e.printStackTrace();
            }
            return cx;   
        }  

     建一消息发送类;发送代码如下:

    Context cx = null; //用来获得应用上下文  
            try {
                cx = JDBIUtil.getcontext();//调用工具文件,加载文本信息,连接到服务器,
                QueueConnectionFactory connfactory = (QueueConnectionFactory) cx.lookup("QueueConnectionFactory");// 获得链接工厂
                
                QueueConnection conn = connfactory.createQueueConnection();// 获得链接
                
                QueueSession qs = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);//创建会话
                
                Destination ds = (Destination) cx.lookup("queue/xiaoyi");//获得消息发送目的地
                
                TextMessage tm = qs.createTextMessage("测试信息"); //发送的内容
                
                MessageProducer mp = qs.createProducer(ds); //发送消息
                mp.send(tm);
                System.out.println("发送消息.....");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
    }

    监听消息,用来接收消息,新建一个EJB MESSAGE DRIVE BEAN,代码如下:
    package org.pxw.util;
    
    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    @MessageDriven(mappedName = "jms/MDBTest", activationConfig = {
            @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
            @ActivationConfigProperty(propertyName="destination",propertyValue="queue/xiaoyi")//消息地址
    })
    public class MDBTest implements MessageListener {
    
        @Override
        public void onMessage(Message msg) {
            // TODO Auto-generated method stub
    
            TextMessage tm = (TextMessage) msg;
            
            System.out.println("的到的值:"+tm);
            
        }
    
    }
    二 消息订阅
    同上在XX-service.xml中加上如下配置代码:
     <mbean code="org.jboss.mq.server.jmx.Topic"
         name="jboss.mq.destination:service=Topic,name=pxw">
        <attribute name="JNDIName">topic/pxw</attribute>
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
      </mbean>

    消息发送类的代码:

    Context cx = null;
            
            cx = Jndiutil.getcontext();
            
            try {
                TopicConnectionFactory  connFactory = (TopicConnectionFactory) cx.lookup("TopicConnectionFactory");
                
                TopicConnection conn = connFactory.createTopicConnection();
                
                Destination destination = (Destination) cx.lookup("topic/pxw");
                
                TopicSession session = conn.createTopicSession(false, QueueSession.AUTO_ACKNOWLEDGE);
                
                TextMessage tm = session.createTextMessage("topic.Test测试内容");
                
                MessageProducer mp = session.createProducer(destination);
                
                mp.send(tm);
                
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            

    消息接收类的代码,注意在创建EJB MESSAGE DRIVER BEAN时 Destination Type选择topic:

    import javax.ejb.ActivationConfigProperty;
    import javax.ejb.MessageDriven;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    @MessageDriven(mappedName = "jms/TopidMDB", activationConfig = {
            @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
            @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
            @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
            @ActivationConfigProperty(propertyName = "clientId", propertyValue = "TopidMDB"),
            @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "TopidMDB"),
            @ActivationConfigProperty(propertyName="destination",propertyValue="topic/pxw")
    })
    public class TopidMDB implements MessageListener {
    
        @Override
        public void onMessage(Message message) {
            // TODO Auto-generated method stub
            
            TextMessage tx = (TextMessage) message;
            
            System.out.println(tx);
        }
    
    }

     

     
  • 相关阅读:
    Android客户端与服务器交互方式-小结
    个人工作总结01
    第7周学习进度
    第6周学习进度
    PHP_D4_“简易聊天室 ”的具体技术实现
    php_D3_“简易聊天室 ”实现的关键技术 详解
    团队介绍
    最大联通子数组
    构建之法阅读笔记04
    大道至简阅读笔记04
  • 原文地址:https://www.cnblogs.com/b422/p/ejb_test.html
Copyright © 2020-2023  润新知