EJB3.0開發指南:訊息驅動Bean

來源:互聯網
上載者:User
 訊息驅動Bean的業務介面已經被定義,對於使用JMS來說那就是MessageListener介面,這個介面定義了OnMessage方法。

實作類別必須使用MessageDriven注釋。可以實現也可以不實現setMessageDrivenContext和ejbRemove方法。

在JBOSS中,通過ConnectionConfig指定訊息的隊列的JNDI名稱。

@ConnectionConfig(destinationType = javax.jms.Queue.class, destinationJndiName = "queue/kuaffejb3/sample", durable = true, subscriptionId = "kuaffMessage")
 

在Eclipse中匯入本文提供的例子Messager。

這個例子從用戶端發送一個TextMessage,這個Bean組件接收到這個訊息後,將把這個訊息輸出到控制台上。

這個例子主要有5個檔案:

Messager.java:業務組件。

Client.java:測試EJB的用戶端類。

jndi.properties:jndi屬性檔案,提供訪問jdni的基本配置屬性。

Build.xml:ant 設定檔,用以編譯、發布、測試、清除EJB。

queue-example-service.xml:Message Service,用來測試訊息。

下面針對每個檔案的內容做一個介紹。

 

Messager.java

package com.kuaff.ejb3.messager;

import org.jboss.ejb3.mdb.ConnectionConfig;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;
import javax.jms.MessageListener;

@MessageDriven 
@ConnectionConfig(destinationType = javax.jms.Queue.class, destinationJndiName = "queue/kuaffejb3/sample", durable = true, subscriptionId = "kuaffMessage") 

public class Messager implements MessageListener

{

 

    public void onMessage(Message recvMsg)

    {

        

        System.out.println("接收到的訊息:");

        try

        {

            TextMessage message = (TextMessage)recvMsg;

            System.out.println(message.getText());

        }

        catch (JMSException e)

        {

            e.printStackTrace();

        }

    }

}
 

這個訊息Bean很簡單,接收到訊息後不做什麼處理,就是將訊息內容輸出到控制台上,

 

Client.java

package com.kuaff.ejb3.messager;

 

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;

 

public class Client

{

 

    public static void main(String[] args) throws Exception

    {

        QueueConnection cnn = null;

        QueueSender sender = null;

        QueueSession session = null;

        InitialContext ctx = new InitialContext();

        Queue queue = (Queue) ctx.lookup("queue/kuaffejb3/sample");

        QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");

        cnn = factory.createQueueConnection();

        session = cnn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);

 

        TextMessage msg = session.createTextMessage("江湖快報:玉樹臨風風流倜儻的公子小巢又出現了。");

 

        sender = session.createSender(queue);

        sender.send(msg);

        System.out.println("訊息已經發出");

    }

}
這個用戶端將發送一個簡訊到隊列中。

 

queue-example-service.xml

<?xml version="1.0" encoding="UTF-8"?>

<server>

   <mbean code="org.jboss.mq.server.jmx.Queue"

      name="jboss.mq.destination:service=Queue,name=kuaffMessage">

      <attribute name="JNDIName">queue/kuaffejb3/sample</attribute>

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

   </mbean>

 </server>
 
配置這個程式所需的Message Service。

 

請運行{$JBOSS_HOME}/bin目錄下的run.bat:  run ?c all,啟動JBOSS。

在Eclipse的Ant視圖中執行ejbjar target。或者在命令列下,進入到此工程目錄下,執行ant ejbjar,將編譯打包發布此EJB。

在Eclipse的Ant視圖中執行run target。或者在命令列下,進入到此工程目錄下,執行ant run,測試這個EJB。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.