4 簡略化APIプログラミング・モデルの理解

Java Message Service (JMS) 2.0仕様によって定義されているJMS簡略化APIの主要な機能を説明します。また、WebLogic ServerでのJMSアプリケーション作成用に、それがどのように実装されているかも学習します。

JMS 2.0簡略化APIについて

JMS 2.0簡略化APIにはJMS 1.1 API (クラシックAPI)と同じ基本機能がありますが、新しいインタフェースと、いくつかのAPIの変更により、使用しやすくなりました。

簡略化APIで提供される次のインタフェースは、Oracle WebLogic Server 12.2.1リリースで実装されました。

  • ConnectionFactory: Connectionを作成するためにクライアントが使用する管理対象オブジェクト。このインタフェースは、クラシックAPIによっても使用されます。

  • JMSContext: メッセージの送受信に使用される、JMSプロバイダと単一スレッド・コンテキストへのアクティブな接続。

  • JMSProducer: JMSContextによって作成され、メッセージをキューまたはトピックに送信するオブジェクト。

  • JMSConsumer: JMSContextによって作成され、キューまたはトピックに送信されたメッセージを受信するオブジェクト

図4-1は、これらのオブジェクトがJMSクライアント・アプリケーション内でどのように組み合されるかを示しています。

図4-1 簡略化APIプログラミング・モデル

図4-1の説明が続きます
「図4-1 簡略化APIプログラミング・モデル」の説明

JMS 2.0インタフェースの詳細は、javax.jmsパッケージのドキュメント(https://javaee.github.io/javaee-spec/javadocs/javax/jms/package-summary.html)を参照してください。

簡略化JMS APIの新しいインタフェース

JMS 2.0簡略化APIは、3つの新しいインタフェースで構成されています。

JMSContext

簡略化APIの主要なインタフェースは、JMSContextです。これは、JMS 1.1 APIのConnectionおよびSessionオブジェクトの機能を結合します。単一のJMSContextオブジェクトを作成すると、接続、セッションおよびテキスト・メッセージを別々に作成する必要がなくなります。

JMSContextインタフェースの詳細は、https://javaee.github.io/javaee-spec/javadocs/javax/jms/JMSContext.htmlを参照してください。

weblogic.jms.extensionsパッケージのWLJMSContextインタフェースは、javax.jms.JMSContextがサポートしていないフィールドおよびメソッドを定義します。それは、WLConnectionおよびWLSessionと同じ拡張機能を提供します。Oracle WebLogic Server Java APIリファレンスにあるWLJMSContextのJavadocを参照してください。

JMSProducer

簡略化APIでメッセージを送信するには、JMSProducerオブジェクトを使用します。JMSContextオブジェクト上でcreateProducerメソッドをコールすることによって、JMSProducerオブジェクトを作成できます。

ノート:

JMSProducerオブジェクトを変数に保存する必要はありません。メッセージを送信する場合、このオブジェクトを作成することをお薦めします。詳細は、「簡略化JMS APIを使用したメッセージ送信」を参照してください。

JMSProducerインタフェースの詳細は、https://javaee.github.io/javaee-spec/javadocs/javax/jms/JMSProducer.htmlを参照してください。

WLJMSProducerインタフェースは、WebLogic JMSに固有のメソッドと属性を定義します。これらの機能は、weblogic.jms.extensionsパッケージで定義されている WLSJMSProducerインタフェースにJMSProducerインスタンスをキャストすることによって使用できます。Oracle WebLogic Server Java APIリファレンスにあるWLJMSProducerのJavadocを参照してください。

JMSConsumer

JMSConsumerオブジェクトは、キューまたはトピックからメッセージを受け取ります。JMSConsumerオブジェクトを作成するには、JMSContext上のcreateConsumerメソッドの1つにQueueまたはTopicオブジェクトを渡すか、JMSContextオブジェクト上のcreateSharedConsumerまたはcreateDurableConsumerメソッドの1つにTopicオブジェクトを渡します。

JMSConsumerインタフェースの詳細は、https://javaee.github.io/javaee-spec/javadocs/javax/jms/JMSConsumer.htmlを参照してください。

JMS 2.0でのメッセージを簡略化する新しいメソッド

JMSContextオブジェクト上でメッセージを送受信するメソッドに加え、JMS 2.0では、コードを簡略化するメソッドをいくつか導入します。

メッセージから直接ボディを抽出するメソッド

getBodyメソッドは、メッセージからボディを取得する簡単な方法を提供します。このメソッドは、クラシックおよび簡略化の両方のAPIに適用されます。

void onMessage(Message message){ // delivers a BytesMessage
   byte[] bytes = message.getBody(byte[].class);
   ...

詳細は次のJavadocを参照してください

https://javaee.github.io/javaee-spec/javadocs/javax/jms/Message.html

メッセージ・ボディを直接受信するメソッド

予期されるボディのクラスがあらかじめわかっている場合にかぎり、receiveBodyメソッドを使用して、StreamMessageおよびMessageを除く、任意のタイプのメッセージを受信できます。

JMSConsumer consumer = ...
String body = consumer.receiveBody(String.class,1000);

詳細は次のJavadocを参照してください。

https://javaee.github.io/javaee-spec/javadocs/javax/jms/JMSConsumer.html

セッションを作成するメソッド

単一またはゼロ個のパラメータを受け付ける、新しいcreateSessionメソッドが、javax.jms.Connectionに追加されました。createSessionメソッドを使用したセッションの作成を参照