JMS(Java Messaging Service)はキューイングシステムです。クライアントはキューにメッセージを追加し、サーバはそのメッセージを受け取ります
Consumerはjavax.jms.MessageListenerを実装します。intra-mart WebPlatfoemはConsumerのonMessage()メソッドを個々の新しいメッセージとともに呼び出します。
// doc/imart/WEB-INF/classes/test/jms/MyListener.java
package test.jms;
import javax.jms.Message;
import javax.jms.MessageListener;
public class MyListener implements MessageListener {
public void onMessage(Message msg) {
System.out.println(msg);
}
}
|
設定は以下の三つから成ります:
- Configuring the Queue
- Configuring the MessageSender
- Configuring the MessageListener
この例はJDBC storeを使用します。
<!-- doc/imart/WEB-IN/web.xml -->
<resource var="queue" jndi-name="jms/my-queue"
type="com.caucho.jms.jdbc.JdbcQueue">
<init>
<queue-name>resin</queue-name>
<data-source>jdbc/sample</data-source>
</init>
</resource>
<resource var="jmsFactory" jndi-name="jms/factory"
type="com.caucho.jms.JVMQueueConnectionFactory">
</resource>
<resource type="com.caucho.jms.resource.ListenerResource">
<init>
<connection-factory>${jmsFactory}</connection-factory>
<destination>${queue}</destination>
<listener type="test.jms.MyListener"/>
</init>
</resource>
<resource jndi-name="jms/sender"
type="com.caucho.jms.resource.MessageSenderResource">
<init>
<connection-factory>${jmsFactory}</connection-factory>
<destination>${queue}</destination>
</init>
</resource>
</web-app>
|
クライアントはメッセージを作り、それらをdestinationへ送ります。クライアントは以下のものが必要です。
- Lookup the Destination and ConnectionFactory with JNDI
- Create a Sender
- Create a message
- Send the message
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
String queueName = "jms/my-queue"; //"queue";
String factoryName = "jms/factory"; //"jmsFactory";
// look up the objects.
Context env = (Context) new InitialContext().lookup("java:comp/env");
Queue queue = (Queue) env.lookup(queueName);
QueueConnectionFactory factory;
factory = (QueueConnectionFactory) env.lookup(factoryName);
QueueConnection connection = factory.createQueueConnection();
QueueSession jmsSession = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
QueueSender sender = jmsSession.createSender(queue);
// create the message
Message message = jmsSession.createTextMessage("hello, world");
// send the message
sender.send(message);
|
|