[Java規格支援機能]JMS

アプリケーション開発において、メッセージ配信を行う場合、Java規格であるJMS(Java Message Service)を使用します。

JMSとの接続は、送信側であれば、JNDIからjavax.jms.ConnectionFactoryをlookupして、そこからjavax.jms.Connectionを生成して、接続。 更に、Connectionからjavax.jms.Sessionを生成しセッションを確立。 JNDIから宛先であるjavax.jms.Destinationをlookupし、Sessionに渡して、javax.jms.MessageProducerを生成する。 Sessionから生成したjavax.jms.Messageに送信したいデータを設定して、MessageProducerにMessageを渡して送信という手順になります。

受信側は、JNDIからjavax.jms.ConnectionFactoryをlookupして、そこからjavax.jms.Connectionを生成して、接続。 更に、Connectionからjavax.jms.Sessionを生成しセッションを確立。 JNDIから宛先であるjavax.jms.Destinationをlookupし、Sessionに渡して、javax.jms.MessageConsumerを生成する。 MessageConsumerにjavax.jms.MessageListener実装クラスを登録して、Connectionに受信開始を要求という手順になります。

このような複雑な手順や、その都度必要となる設定パラメータなどを隠蔽して、簡潔にJMSへの送信、受信を可能にします。

javax.jms.Connectionを取得する機能を抽象化したのが、JMSConnectionFactoryです。
javax.jms.Sessionを取得する機能を抽象化したのが、JMSSessionFactoryです。
javax.jms.MessageProducerを取得する機能を抽象化したのが、JMSMessageProducerFactoryです。
javax.jms.MessageConsumerを取得する機能を抽象化したのが、JMSMessageConsumerFactoryです。

関連するパッケージは、以下です。

アプリケーション向けインタフェース JMSConnectionFactory

アプリケーション向けインタフェースJMSConnectionFactoryは、javax.jms.Connectionを簡易に取得するためにアプリケーションが直接使用することもできますが、他のサービスの下位サービスとしても使用されます。
以下に上位サービスの一覧を示します。

上位サービス用途
jp.ossc.nimbus.service.jms.JMSSessionFactoryConnectionを取得するために使用する。

JMSConnectionFactoryを使った簡単なアプリケーションのサンプルを示します。

  1. import javax.jms.Connection;
  2. import jp.ossc.nimbus.core.ServiceManagerFactory;
  3. import jp.ossc.nimbus.service.jms.JMSConnectionFactory;
  4. // JMSConnectionFactoryを取得
  5. JMSConnectionFactory factory = (JMSConnectionFactory)ServiceManagerFactory.getServiceObject("JMSConnectionFactory");
  6. // Connectionを生成する
  7. Connection con = factory.getConnection();

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.jms.JMSConnectionFactoryServiceJMS1.1以降でQueue及びTopicへ接続するConnectionを取得する
jp.ossc.nimbus.service.jms.JMSQueueConnectionFactoryServiceQueueへ接続するQueueConnectionを取得する
jp.ossc.nimbus.service.jms.JMSTopicConnectionFactoryServiceTopicへ接続するTopicConnectionを取得する

アプリケーション向けインタフェース JMSSessionFactory

アプリケーション向けインタフェースJMSSessionFactoryは、javax.jms.Sessionを簡易に取得するためにアプリケーションが直接使用することもできますが、他のサービスの下位サービスとしても使用されます。
以下に上位サービスの一覧を示します。

上位サービス用途
jp.ossc.nimbus.service.jms.JMSMessageProducerFactorySessionを取得するために使用する。
jp.ossc.nimbus.service.jms.JMSMessageConsumerFactorySessionを取得するために使用する。
jp.ossc.nimbus.service.scheduler2.JMSSchedulerServiceスケジュールをJMSQueueに投入するために使用する。
jp.ossc.nimbus.service.resource.jms.JMSSessionFactoryServiceJMSのSessionをリソースとして取得するために使用する。

JMSSessionFactoryを使った簡単なアプリケーションのサンプルを示します。

  1. import javax.jms.Session;
  2. import jp.ossc.nimbus.core.ServiceManagerFactory;
  3. import jp.ossc.nimbus.service.jms.JMSSessionFactory;
  4. // JMSSessionFactoryを取得
  5. JMSSessionFactory factory = (JMSSessionFactory)ServiceManagerFactory.getServiceObject("JMSSessionFactory");
  6. // Sessionを生成する
  7. Session session = factory.getSession();

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.jms.JMSSessionFactoryServiceJMS1.1以降でQueue及びTopicとのセッションを確立するSessionを取得する
jp.ossc.nimbus.service.jms.JMSQueueSessionFactoryServiceQueueとのセッションを確立するQueueSessionを取得する
jp.ossc.nimbus.service.jms.JMSTopicSessionFactoryServiceTopicとのセッションを確立するTopicSessionを取得する

アプリケーション向けインタフェース JMSMessageProducerFactory

アプリケーション向けインタフェースJMSMessageProducerFactoryは、javax.jms.MessageProducerを簡易に取得するためにアプリケーションが直接使用することもできますが、他のサービスの下位サービスとしても使用されます。
以下に上位サービスの一覧を示します。

上位サービス用途
jp.ossc.nimbus.service.scheduler2.JMSSchedulerServiceスケジュールをJMSQueueに投入するために使用する。
jp.ossc.nimbus.service.writer.jms.DestinationWriterServiceJMSの宛先に出力するために使用する。

JMSMessageProducerFactoryを使った簡単なアプリケーションのサンプルを示します。

  1. import javax.jms.MessageProducer;
  2. import jp.ossc.nimbus.core.ServiceManagerFactory;
  3. import jp.ossc.nimbus.service.jms.JMSMessageProducerFactory;
  4. // JMSMessageProducerFactoryを取得
  5. JMSMessageProducerFactory factory = (JMSMessageProducerFactory)ServiceManagerFactory.getServiceObject("JMSMessageProducerFactory");
  6. // MessageProducerを生成する
  7. MessageProducer producer = factory.createProducer();

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.jms.JMSMessageProducerFactoryServiceJMS1.1以降でQueue及びTopicにメッセージを送信するMessageProducerを取得する
jp.ossc.nimbus.service.jms.JMSQueueSenderFactoryServiceQueueにメッセージを送信するQueueSenderを取得する
jp.ossc.nimbus.service.jms.JMSTopicPublisherFactoryServiceTopicにメッセージを送信するTopicPublisherを取得する

アプリケーション向けインタフェース JMSMessageConsumerFactory

アプリケーション向けインタフェースJMSMessageConsumerFactoryは、javax.jms.MessageConsumerを簡易に取得するためにアプリケーションが直接使用することもできますが、他のサービスの下位サービスとしても使用されます。
以下に上位サービスの一覧を示します。

上位サービス用途
jp.ossc.nimbus.service.scheduler2.JMSSchedulerServiceスケジュールをJMSQueueから取得するために使用する。
jp.ossc.nimbus.service.codemaster.CodeMasterServiceマスタの更新通知をJMSTopicから受信するために使用する。

JMSMessageConsumerFactoryを使った簡単なアプリケーションのサンプルを示します。

  1. import javax.jms.MessageConsumer;
  2. import jp.ossc.nimbus.core.ServiceManagerFactory;
  3. import jp.ossc.nimbus.service.jms.JMSMessageConsumerFactory;
  4. // JMSMessageConsumerFactoryを取得
  5. JMSMessageConsumerFactory factory = (JMSMessageConsumerFactory)ServiceManagerFactory.getServiceObject("JMSMessageConsumerFactory");
  6. // MessageConsumerを生成する
  7. MessageConsumer consumer = factory.createConsumer();

実装サービスの一覧は以下のとおりです。

実装サービス実装概要
jp.ossc.nimbus.service.jms.JMSMessageConsumerFactoryServiceJMS1.1以降でQueue及びTopicからメッセージを受信するMessageConsumerを取得する
jp.ossc.nimbus.service.jms.JMSQueueReceiverFactoryServiceQueueからメッセージを受信するQueueReceiverを取得する
jp.ossc.nimbus.service.jms.JMSTopicSubscriberFactoryServiceTopicからメッセージを受信するTopicSubscriberを取得する