Messaging


  1. Servers: Message-Driven Beans
  2. JNDI Configuration
  3. Clients

JMS(Java Messaging Service)はキューイングシステムです。クライアントはキューにメッセージを追加し、サーバはそのメッセージを削除します。

ベースモジュール(Advanced版)のEJBコンテナ(ApplicationRuntime)の EJB message-bean はJMSを利用できるよう、仕様に忠実に実装したものです。ベースモジュール(Advanced版)のEJBコンテナは、JMSの basic memory-based を含んでいます。

Servers: Message-Driven Beans

message-driven bean server はメッセージを処理します。ベースモジュール(Advanced版)のEJBコンテナはbeanのonMessage()メソッドを個々の新しいメッセージとともに呼び出します。

package test;

import javax.ejb.*;
import javax.jms.*;

public class TestBean implements MessageDrivenBean, MessageListener {
  ...

  public void onMessage(Message msg)
  {
    // process the message
  }
}

JNDI Configuration

サーバはConnectionFactoryとDestinationの両方を形成します。DestinationはQueueまたはTopic objectのいずれかで、ConnectionFactoryはQueueConnectionFactoryかTopicConnectionFactoryのいずれかです。

他のJNDI リソース同様、 JMS オブジェクトはresource-ref directivesで形成されます。init-param値はそれらのオブジェクトのbeanプロパティを形成します。

<!-- conf/http.xml -->
<caucho.com>
<http-server>
  <resource-ref res-ref-name="jms/queue-connection-factory"
                res-type='com.caucho.jms.JVMQueueConnectionFactory'/>

  <resource-ref res-ref-name="jms/queue"
                res-type='com.caucho.jms.memory.MemoryQueue'/>
  ...
</http-server>
</caucho.com>

以下のfactory がベースモジュール(Advanced版)の JMS オブジェクトです。

Class Description
com.caucho.jms.JVMQueueConnectionFactory The connection factory for queues.
com.caucho.jms.memory.MemoryQueue A memory-based queue.
com.caucho.jms.JVMTopicConnectionFactory The connection factory for topics.
com.caucho.jms.memory.MemoryTopic A memory-based topic.

Clients

クライアントはメッセージを作り、それらをdestinationへ送ります。クライアントは以下のものが必要です。

  • Lookup the Destination and ConnectionFactory with JNDI
  • Create a Sender (or Publisher for Topics)
  • Create a message
  • Send the message

import javax.naming.*;
import javax.jms.*;

// look up the objects.
Context env = (Context) new InitialContext().lookup("java:comp/env");
Queue queue = (Queue) env.lookup("jms/queue");
QueueConnectionFactory factory;
factory =
  (QueueConnectionFactory) env.lookup("jms/queue-connection-factory");

QueueConnection connection = factory.createQueueConnection();
QueueSession jmsSession = connection.createQueueSession(false, 0);

QueueSender sender = jmsSession.createSender(queue);

// create the message
Message message = jmsSession.createTextMessage("hello, world");

// send the message
sender.send(message);