Messaging


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

Consumer (MyListener)

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);
    }
}

Configuration

設定は以下の三つから成ります:

  • 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>

Clients

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