TomEE

連線能力 > 容器 > 資源介面卡 > TomEE

Apache TomEE 是一個 Tomcat 的發行版本,完全整合了 ActiveMQ Classic,為純 war 檔案、Servlet 等提供完整的 JMS 支援。不需要任何設定,像以下這樣的程式碼就能立即運作。

import javax.annotation.Resource; import javax.servlet.http.HttpServlet; import javax.jms.Topic; import javax.jms.Queue; import javax.jms.ConnectionFactory;

public class MyServet extends HttpServlet {

@Resource(name = "foo")
private Topic fooTopic;

@Resource(name = "bar")
private Queue barQueue;

@Resource
private ConnectionFactory connectionFactory;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //...

    Connection connection = connectionFactory.createConnection();
    connection.start();

    // Create a Session
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    // Create a MessageProducer from the Session to the Topic or Queue
    MessageProducer producer = session.createProducer(fooTopic);
    producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

    // Create a message
    TextMessage message = session.createTextMessage("Hello World!");

    // Tell the producer to send the message
    producer.send(message);

    //...
} }

當在程式碼中正確宣告時,所有主題和佇列都會自動建立,如上所示。例如,程式碼中的以下參考

@Resource(name = "foo")
private Topic fooTopic;

與以下在/conf/tomee.xml 檔案或 WEB-INF/resources.xml 檔案中的宣告相同

<Resource id="foo" type="javax.jms.Topic" />

在兩種情況下,主題名稱都會是 ‘foo’。

設定嵌入式訊息代理器

如果沒有設定訊息代理器,且在 webapp 中使用了 JMS,TomEE 會建立一個等同於以下宣告的訊息代理器

BrokerXmlConfig = broker:(tcp://someHostName:61616) ServerUrl = vm://127.0.0.1 ResourceAdapter = MyJmsResourceAdapter

這會建立一個在 TomEE 內部執行的 ActiveMQ Classic 訊息代理器,並繫結到 someHostName:61616 位址。這個訊息代理器將在 TomEE 啟動時啟動,並在 TomEE 關閉時關閉。所有在 TomEE 內部發生的 JMS 通訊,都將透過 ActiveMQ Classic 「vm」傳輸,使用嵌入式 ActiveMQ Classic 訊息代理器進行,該傳輸已針對在與訊息代理器相同的 JVM 中傳送和接收訊息進行了最佳化。

連線到外部訊息代理器

可以連線到在外部執行的 ActiveMQ Classic 訊息代理器。設定與上述類似,只有兩個變更。

BrokerXmlConfig = ServerUrl = tcp://someHostName:61616 ResourceAdapter = MyJmsResourceAdapter

這裡的 BrokerXmlConfig 屬性為空,因為我們沒有設定在 TomEE 內部執行的嵌入式訊息代理器。ServerUrl 現在指向一個明確的遠端主機和連接埠 someHostName:61616,其中必須執行一個 ActiveMQ Classic 訊息代理器。這個訊息代理器可以是普通的 ActiveMQ Classic 安裝,或是嵌入在 TomEE 安裝中的 ActiveMQ Classic 訊息代理器。

Apache、ActiveMQ、Apache ActiveMQ、Apache 羽毛標誌和 Apache ActiveMQ 專案標誌是 Apache 軟體基金會的商標。版權所有 © 2024,Apache 軟體基金會。根據 Apache 授權 2.0 授權。