、Queue:

客户端:

  1. public class MyMDBBeanClient {  
  2.     public static void main(String[] args) throws Exception {  
  3.         InitialContext ict = new InitialContext();  
  4.         //获取connectionFactory对象  
  5.         QueueConnectionFactory factory = (QueueConnectionFactory)ict.lookup("ConnectionFactory");  
  6.         //获取Connection对象  
  7.         QueueConnection connection = factory.createQueueConnection();  
  8.         //获取Session对象,第一个参数表示事务自动提交,第二个参数表示一旦消息被正确发送,将自动发回响应  
  9.         QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);       
  10.         //获取destination对象  
  11.         Queue queue = (Queue)ict.lookup("queue/myqueue");     
  12.         //设置消息  
  13.         TextMessage msg = session.createTextMessage("hello world ");          
  14.         //获取sender对象  
  15.         QueueSender sender = session.createSender(queue);     
  16.         //发送消息  
  17.         sender.send(msg);  
  18.           
  19.         session.close();  
  20.           
  21.         System.out.println("消息已经发送!");  
  22.     }  
  23. }  

MDB:

  1. public class MyMDBBeanClient {  
  2.     public static void main(String[] args) throws Exception {  
  3.         InitialContext ict = new InitialContext();  
  4.         //获取connectionFactory对象  
  5.         QueueConnectionFactory factory = (QueueConnectionFactory)ict.lookup("ConnectionFactory");  
  6.         //获取Connection对象  
  7.         QueueConnection connection = factory.createQueueConnection();  
  8.         //获取Session对象,第一个参数表示事务自动提交,第二个参数表示一旦消息被正确发送,将自动发回响应  
  9.         QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);       
  10.         //获取destination对象  
  11.         Queue queue = (Queue)ict.lookup("queue/myqueue");     
  12.         //设置消息  
  13.         TextMessage msg = session.createTextMessage("hello world ");          
  14.         //获取sender对象  
  15.         QueueSender sender = session.createSender(queue);     
  16.         //发送消息  
  17.         sender.send(msg);         
  18.         session.close();          
  19.         System.out.println("消息已经发送!");  
  20.     }  
  21. }  

2.Topic

客户端:

  1. public class MyTopicMDBBeanClient {  
  2.     public static void main(String[] args) throws Exception {  
  3.         InitialContext ict = new InitialContext();  
  4.         //获取connectionFactory对象  
  5.         TopicConnectionFactory factory = (TopicConnectionFactory)ict.lookup("ConnectionFactory");  
  6.         //获取Connection对象  
  7.         TopicConnection connection = factory.createTopicConnection();  
  8.         //获取Session对象,第一个参数表示事务自动提交,第二个参数表示一旦消息被正确发送,将自动发回响应  
  9.         TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);       
  10.         //获取destination对象  
  11.         Topic topic = (Topic)ict.lookup("topic/mytopic");     
  12.         //设置消息  
  13.         TextMessage msg = session.createTextMessage("hello world ");          
  14.         //获取sender对象  
  15.         TopicPublisher publisher = session.createPublisher(topic);        
  16.         //发送消息  
  17.         publisher.publish(msg);       
  18.         session.close();          
  19.         System.out.println("消息已经发送!");  
  20.     }  
  21. }  

MDB1:

  1. @MessageDriven (  
  2.         activationConfig = {  
  3.                 @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),  
  4.                 @ActivationConfigProperty(propertyName="destination",propertyValue="topic/mytopic")  
  5.         }  
  6. )  
  7. public class MyTopicMDBBean1 implements MessageListener {  
  8.     public void onMessage(Message msg) {  
  9.         TextMessage message = (TextMessage)msg;  
  10.         try {  
  11.             System.out.println("MyTopicMDBBean1调用了:"+ message.getText());  
  12.         } catch (JMSException e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.     }  
  16. }  

MDB2:

  1. @MessageDriven (  
  2.         activationConfig = {  
  3.                 @ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),  
  4.                 @ActivationConfigProperty(propertyName="destination",propertyValue="topic/mytopic")  
  5.         }  
  6. )  
  7. public class MyTopicMDBBean2 implements MessageListener {  
  8.     public void onMessage(Message msg) {  
  9.         TextMessage message = (TextMessage)msg;  
  10.         try {  
  11.             System.out.println("MyTopicMDBBean2调用了:"+ message.getText());  
  12.         } catch (JMSException e) {  
  13.             e.printStackTrace();  
  14.         }  
  15.     }  
  16. }  

3、部署运行测试

将ejb mdb(queue、toppic)部署到jboss服务器上,运行客户端。

注意:如果是部署到jboss4.0版本上,不会有问题,但直接部署到jboss5.0版本上会报错:javax.naming.NameNotFoundException:myqueue not bound

解决方法:

在JBoss根目录\server\default\deploy 下的mail-service.xml文件中加入如下:

<mbeancode="org.jboss.mq.server.jmx.Queue"name="jboss.org.destination:server=Queue,name=myqueue" >

  <attributename="JNDIName" >queue/myqueue</attribute>

  <dependsoptional-attribute-name = "DestinationManager" >jboss.mq:service=DestinationManager </depends>

</mbean>

topic找不到

 <mbean code="org.jboss.mq.server.jmx.Topic"name="jboss.org.destination:server=Topic,name=mytopic" >

    <!-- JNDI名称 -->

    <attributename="JNDIName">topic/mytopic</attribute>

    <dependsoptional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>

  </mbean>

重启JBoss问题即解决。

当然,如果有其他的MDB,还需要继续加入JNDIName。