從頭到尾講解EJB MDB(訊息驅動bean)四——範例程式碼

來源:互聯網
上載者:User

1、Queue:

用戶端:

public class MyMDBBeanClient {public static void main(String[] args) throws Exception {InitialContext ict = new InitialContext();//擷取connectionFactory對象QueueConnectionFactory factory = (QueueConnectionFactory)ict.lookup("ConnectionFactory");//擷取Connection對象QueueConnection connection = factory.createQueueConnection();//擷取Session對象,第一個參數表示事務自動認可,第二個參數表示一旦訊息被正確發送,將自動發迴響應QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);//擷取destination對象Queue queue = (Queue)ict.lookup("queue/myqueue");//設定訊息TextMessage msg = session.createTextMessage("hello world ");//擷取sender對象QueueSender sender = session.createSender(queue);//發送訊息sender.send(msg);session.close();System.out.println("訊息已經發送!");}}

MDB:

public class MyMDBBeanClient {public static void main(String[] args) throws Exception {InitialContext ict = new InitialContext();//擷取connectionFactory對象QueueConnectionFactory factory = (QueueConnectionFactory)ict.lookup("ConnectionFactory");//擷取Connection對象QueueConnection connection = factory.createQueueConnection();//擷取Session對象,第一個參數表示事務自動認可,第二個參數表示一旦訊息被正確發送,將自動發迴響應QueueSession session = connection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);//擷取destination對象Queue queue = (Queue)ict.lookup("queue/myqueue");//設定訊息TextMessage msg = session.createTextMessage("hello world ");//擷取sender對象QueueSender sender = session.createSender(queue);//發送訊息sender.send(msg);session.close();System.out.println("訊息已經發送!");}}

2.Topic

用戶端:

public class MyTopicMDBBeanClient {public static void main(String[] args) throws Exception {InitialContext ict = new InitialContext();//擷取connectionFactory對象TopicConnectionFactory factory = (TopicConnectionFactory)ict.lookup("ConnectionFactory");//擷取Connection對象TopicConnection connection = factory.createTopicConnection();//擷取Session對象,第一個參數表示事務自動認可,第二個參數表示一旦訊息被正確發送,將自動發迴響應TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);//擷取destination對象Topic topic = (Topic)ict.lookup("topic/mytopic");//設定訊息TextMessage msg = session.createTextMessage("hello world ");//擷取sender對象TopicPublisher publisher = session.createPublisher(topic);//發送訊息publisher.publish(msg);session.close();System.out.println("訊息已經發送!");}}

MDB1:

@MessageDriven (activationConfig = {@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),@ActivationConfigProperty(propertyName="destination",propertyValue="topic/mytopic")})public class MyTopicMDBBean1 implements MessageListener {public void onMessage(Message msg) {TextMessage message = (TextMessage)msg;try {System.out.println("MyTopicMDBBean1調用了:"+ message.getText());} catch (JMSException e) {e.printStackTrace();}}}

MDB2:

@MessageDriven (activationConfig = {@ActivationConfigProperty(propertyName="destinationType",propertyValue="javax.jms.Topic"),@ActivationConfigProperty(propertyName="destination",propertyValue="topic/mytopic")})public class MyTopicMDBBean2 implements MessageListener {public void onMessage(Message msg) {TextMessage message = (TextMessage)msg;try {System.out.println("MyTopicMDBBean2調用了:"+ message.getText());} catch (JMSException e) {e.printStackTrace();}}}

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。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.