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
}
}
|
サーバは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. |
クライアントはメッセージを作り、それらを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);
|
|