WebLogic JMS プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

WebLogic JMS について

以下の節では、Java Message Service (JMS) のさまざまな概念と機能を簡単に紹介し、それらと他のアプリケーション オブジェクトおよび WebLogic Server との連携の仕組みについて説明します。

この章は、Java のプログラミングおよび JMS 1.1 の概念と機能に精通している読者を対象としています。

 


Java Message Service と WebLogic JMS の概要

WebLogic JMS は、WebLogic Server プラットフォームに緊密に統合されたエンタープライズ クラスのメッセージング システムです。JMS 仕様を完全にサポートし、標準の JMS API ではサポートされていないさまざまな WebLogic JMS 拡張を提供します。

Java Message Service とは

エンタープライズ メッセージング システムを使用すると、複数のアプリケーションがメッセージの交換を通じて通信できます。メッセージとは、異なるアプリケーション間の通信を調整するために必要な情報が含まれているリクエスト、レポート、またはイベントのことです。メッセージで提供される抽象化の階層により、送り先システムについての詳細情報をアプリケーション コードから切り離すことができます。

Java Message Service (JMS) は、エンタープライズ メッセージング システムにアクセスするための標準の API です。具体的な JMS の特長は以下のとおりです。

次の図は、WebLogic JMS メッセージングの仕組みを示しています。

図 2-1 WebLogic JMS メッセージング

WebLogic JMS メッセージング

上の図に示すとおり、WebLogic JMS はプロデューサ アプリケーションからメッセージを受信し、それらをコンシューマ アプリケーションに送信します。

Java 仕様の実装

WebLogic Server は次の Java 仕様に準拠しています。

J2EE 仕様

WebLogic Server は Sun Microsystems の J2EE 1.4 仕様に準拠しています。

JMS 仕様

WebLogic Server は JMS 1.1 仕様に完全に準拠しており、プロダクション環境で使用できます。

WebLogic JMS のアーキテクチャ

次の図は、WebLogic JMS のアーキテクチャを示しています。

図 2-2 WebLogic JMS のアーキテクチャ

WebLogic JMS のアーキテクチャ

主要な構成要素

図 2-2 に示されているように、WebLogic JMS Server のアーキテクチャは主に以下の要素で構成されています。

 


メッセージング モデルについて

JMS では、ポイント ツー ポイント (PTP) とパブリッシュ/サブスクライブ (pub/sub) の 2 つのメッセージング モデルがサポートされています。それらのメッセージング モデルは非常に似ていますが、以下の点で異なります。

各モデルは、共通の基本クラスを拡張したクラスで実装されます。たとえば、PTP クラス javax.jms.Queue と pub/sub クラス javax.jms.Topic は、ともに javax.jms.Destination クラスを拡張します。

各メッセージング モデルについては、以降の節で詳しく説明します。

注意 : プロデューサおよびコンシューマという用語は、メッセージング モデルに関係なく、それぞれメッセージを送信および受信するアプリケーションを表すために汎用的に使用します。ただし、各メッセージング モデルでは、それぞれに固有のユニークな用語でプロデューサとコンシューマを表します。

ポイント ツー ポイント メッセージング

ポイント ツー ポイント (PTP) メッセージング モデルでは、アプリケーションが別の 1 つのアプリケーションにメッセージを送信できます。PTP メッセージング アプリケーションでは、名前付きのキューを使用してメッセージが送信および受信されます。メッセージは、キュー センダ (プロデューサ) によって特定のキューに送信されます。キュー レシーバ (コンシューマ) では、特定のキューからメッセージを受信します。

次の図は、PTP メッセージングの仕組みを示しています。

図 2-3 ポイント ツー ポイント (PTP) メッセージング

ポイント ツー ポイント (PTP) メッセージング

複数のキュー センダおよびキュー レシーバを 1 つのキューに関連付けることができますが、個々のメッセージは 1 つのキュー レシーバにしか配信できません。

複数のキュー レシーバがキューのメッセージをリスンしている場合、次のメッセージを受信するキュー レシーバは先着順で決定されます。リスンしているキュー レシーバがない場合は、キュー レシーバがキューにアタッチされるまでメッセージはキューにとどまります。

パブリッシュ/サブスクライブ メッセージング

パブリッシュ/サブスクライブ (pub/sub) メッセージング モデルでは、アプリケーションが複数のアプリケーションにメッセージを送信できます。pub/sub メッセージング アプリケーションでは、トピックをサブスクライブすることでメッセージが送信および受信されます。トピック パブリッシャ (プロデューサ) によって、特定のトピックにメッセージが送信されます。トピック サブスクライバ (コンシューマ) では、特定のトピックからメッセージが受信されます。

次の図は、pub/sub メッセージングの仕組みを示しています。

図 2-4 パブリッシュ/サブスクライブ (pub/sub) メッセージング

パブリッシュ/サブスクライブ (pub/sub) メッセージング

PTP メッセージング モデルの場合と違って、pub/sub メッセージング モデルでは複数のトピック サブスクライバが同じメッセージを受信できます。メッセージは、すべてのトピック サブスクライバが受信するまで維持されます。

pub/sub メッセージング モデルでは恒久サブスクライバがサポートされるので、トピック サブスクライバに名前を割り当て、ユーザまたはアプリケーションと関連付けることができます。恒久サブスクライバの詳細については、「恒久サブスクリプションの設定」を参照してください。

メッセージの永続性

JMS 仕様の「Message Delivery Mode」の節に従って、メッセージを永続的または非永続的として指定できます。

システム レベルの WebLogic 永続ストアの詳細については、「WebLogic 永続ストアの使い方」を参照してください。

 


JMS パブリック API の付加価値拡張機能

WebLogic JMS は WebLogic Server プラットフォームと密接に統合されているため、非常にセキュアな J2EE アプリケーションを構築して、WebLogic Server コンソールで簡単にモニタしたり管理したりできます。XA トランザクションが完全にサポートされているだけでなく、クラスタ機能とサービス移行機能による高い可用性を特長としています。加えて、他のバージョンの WebLogic Server やサードパーティのメッセージ プロバイダとのシームレスな相互運用性も提供されます。

これらの付加価値機能の詳細については、『WebLogic JMS のコンフィグレーションと管理』の「WebLogic Server の付加価値 JMS 機能」を参照してください。

WebLogic Server の付加価値 JMS 機能

WebLogic Server には、JMS 仕様で指定されている標準 JMS API に加え、次の表で説明するクラスやメソッドを含むさまざまな weblogic.jms.extensions API が用意されています。

表 2-1 WebLogic JMS パブリック API の拡張機能
インタフェース/クラス
機能
コンシューマおよび送り先の情報を、CompositeData 形式で管理クライアントに提供する。
以下を作成するためのファクトリおよびメソッドを提供する。
  • JMS メッセージ
  • JMS バイト メッセージ
  • JMS マップ メッセージ
  • JMS オブジェクト メッセージ
  • JMS ストリーム メッセージ
  • JMS テキスト メッセージ
  • JMS XML メッセージ
JMX を使用したメッセージの表示と操作を提供する。
JMS 実行時 MBean をモニタし、JMS モジュール内の JMS モジュール コンフィグレーション エントリを管理する。
JMS 実行時 JMX MBean をモニタする。
MDB (メッセージ駆動型 Bean) に配信されたメッセージとトランザクションを関連付ける。
送り先がキューであるかトピックであるかを識別する。
メッセージの配信時間、再配信制限、および送信タイムアウトを設定する。
プロデューサのメッセージ配信時間、および順序単位の名前を設定する。
javax.jms.QueueSessionjavax.jms.Session、および javax.jms.TopicSession でサポートされない追加のフィールドやメソッドを提供する。
XML メッセージを作成する。
メッセージのスケジューリング済み配信時間を設定する。
JMS 実行時 MBean をモニタする。
このリリースの WebLogic Server では非推奨。JMSModuleHelper によって代替のこと。
サーバ セッション プールおよびメッセージ リスナを作成するためのインタフェースを提供する。

注意 : セッション プールのコンフィグレーション オブジェクトは、このリリースの WebLogic Server では非推奨となっている。これらは、J2EE 仕様の必須コンポーネントではなく、JTA ユーザ トランザクションもサポートしていない。代わりに、J2EE の必須コンポーネントであるメッセージ駆動型 Bean (MDB) が主に使用されている。MDB の設計の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」を参照してください。

この API では、NO_ACKNOWLEDGEMULTICAST_NO_ACKNOWLEDGE の確認応答モード、および以下のような例外の送出を含む拡張例外もサポートされています。

 


JMS API について

JMS アプリケーションを作成するには、javax.jms API を使用します。この API では、JMS への接続やメッセージの送受信に必要なクラス オブジェクトを作成できます。JMS クラス インタフェースは、共通の親クラスのキュー バージョンとトピック バージョンを提供するサブクラスとして作成されます。

次の表は、以降の節で詳しく説明する JMS クラスを示しています。すべての JMS クラスの詳細については、javax.jms または weblogic.jms.extensions の Javadoc を参照してください。

表 2-2 WebLogic JMS のクラス
JMS クラス
説明
接続のコンフィグレーション情報をカプセル化する。接続ファクトリは接続を作成するために使用する。接続ファクトリは JNDI を使用してルックアップする。
メッセージング システムへの開いている通信チャネルを表す。接続はセッションを作成するために使用する。
生成および消費されるメッセージの順序を定義する。
特定のプロバイダのアドレスをカプセル化して、キューまたはトピックを識別する。キューとトピックでは、それぞれ PTP メッセージング モデルおよび pub/sub メッセージング モデルから配信されるメッセージが管理される。
メッセージを送信および受信するためのインタフェースを提供する。メッセージ プロデューサではキューまたはトピックにメッセージが送信される。メッセージ コンシューマではキューまたはトピックからメッセージが受信される。
送信または受信される情報をカプセル化する。
メッセージ コンシューマのサーバ管理のプールに関するコンフィグレーション情報をカプセル化する。サーバ セッション プール ファクトリはサーバ セッション プールを作成するために使用する。
メッセージを並行処理するために使用できるサーバ セッションのプールを接続コンシューマに提供する。
スレッドと JMS セッションを関連付ける。
メッセージを並行処理するためにサーバ セッションを取り出すコンシューマを指定する。

1複数のメッセージを並行して処理するためのオプションの JMS インタフェースがサポートされます。

2複数のメッセージを並行して処理するためのオプションの JMS インタフェースがサポートされます。

3複数のメッセージを並行して処理するためのオプションの JMS インタフェースがサポートされます。

4複数のメッセージを並行して処理するためのオプションの JMS インタフェースがサポートされます。

JMS リソースのコンフィグレーションについては、『WebLogic JMS のコンフィグレーションと管理』の「基本 JMS システム リソースのコンフィグレーション」を参照してください。JMS アプリケーションを設定する手順については、「JMS アプリケーションの設定」を参照してください。

ConnectionFactory

ConnectionFactory は、接続のコンフィグレーション情報をカプセル化し、JMS アプリケーションが Connection を作成できるようにします。接続ファクトリでは同時使用がサポートされており、複数のスレッドがオブジェクトに同時にアクセスできます。WebLogic JMS が提供するあらかじめコンフィグレーションされたデフォルト接続ファクトリを使用するか、1 つまたは複数の接続ファクトリをコンフィグレーションすることで、アプリケーションに適したあらかじめ定義された属性で接続を作成できます。

デフォルト接続ファクトリの使い方

WebLogic JMS では 2 つのデフォルト接続ファクトリが定義されています。これらの接続ファクトリは、次の JNDI 名を使用してルックアップできます。

ユーザ定義の接続ファクトリは、デフォルト ファクトリの設定がアプリケーションに適さない場合にのみ作成します。デフォルト接続ファクトリのコンフィグレーション済み設定との主な違いは、次の表に示すように、JTA トランザクションを有効にするために使用する [XA コネクション ファクトリを有効化] 属性のデフォルト値です。

表 2-3 デフォルト接続ファクトリ用の XA トランザクション設定
デフォルト接続ファクトリ
[XA コネクション ファクトリを有効化] の設定値
weblogic.jms.ConnectionFactory
False
weblogic.jms.XAConnectionFactory
True

XA ファクトリは、JMS アプリケーションで JTA ユーザ トランザクションを使用する場合に必要となりますが、トランザクション セッションの場合は必要ありません。WebLogic JMS でのトランザクションの使用については、「WebLogic JMS によるトランザクションの使い方」を参照してください。

その他のすべてのデフォルト コンフィグレーション属性は、ユーザ定義の接続ファクトリと同じデフォルト値に設定されます。

[XA コネクション ファクトリを有効化] 属性と、その他の接続ファクトリ属性のデフォルト値については、Administration Console オンライン ヘルプの「JMS 接続ファクトリ : コンフィグレーション : トランザクション」を参照してください。

デフォルトの接続ファクトリを使用する場合のもう 1 つの違いは、接続ファクトリがデプロイされる可能性のある WebLogic Server を限定できない点です。ただし、デフォルトの接続ファクトリはサーバ単位で無効にできます。

デフォルト接続ファクトリの有効化または無効化については、Administration Console オンライン ヘルプの「サーバ : コンフィグレーション : サービス」を参照してください。

特定の独立したサーバ、クラスタ内の特定のサーバ、またはクラスタ全体に接続ファクトリをデプロイするには、新しい接続ファクトリを作成し、適切な対象を指定する必要があります (「接続ファクトリのコンフィグレーションとデプロイメント」を参照)。

注意 : 下位互換性を維持するため、WebLogic JMS では非推奨の 2 つのデフォルト接続ファクトリを現在もサポートしています。該当するファクトリの JNDI 名は次のとおりです。javax.jms.QueueConnectionFactory および javax.jms.TopicConnectionFactory

接続ファクトリのコンフィグレーションとデプロイメント

システム管理者が 1 つまたは複数の接続ファクトリを定義およびコンフィグレーションして、あらかじめ定義された属性で接続を作成すると、WebLogic Server では起動時にそれらの接続ファクトリが JNDI スペースに追加されます。アプリケーションでは、WebLogic JNDI を使用して接続ファクトリを取り出します。ユーザ定義の接続ファクトリにはユニークな名前を付ける必要があります。

接続ファクトリのコンフィグレーションについては、Administration Console オンライン ヘルプの「接続ファクトリのコンフィグレーション」を参照してください。

システム管理者は、クラスタに対象指定するか、クラスタ内の 1 つまたは複数のサーバ インスタンスに対象指定することで、クラスタ内のあらゆるサーバから JMS 送り先への透過的なアクセスをクラスタ全体にわたって確立します。これにより、各接続ファクトリを複数の WebLogic Server インスタンスにデプロイできます。JMS のクラスタ化の詳細については、『WebLogic JMS のコンフィグレーションと管理』の「拡張 JMS システム リソースのコンフィグレーション」を参照してください。

ConnectionFactory クラス

ConnectionFactory クラスではメソッドは定義されませんが、そのサブクラスでは各メッセージング モデルのメソッドが定義されます。接続ファクトリでは同時使用がサポートされており、複数のスレッドがオブジェクトに同時にアクセスできます。

注意 : このリリースでは、JMS 1.1 仕様の接続ファクトリを使用できます。または、そのサブクラスを使用することもできます。

次の表は、ConnectionFactory のサブクラスを説明しています。

表 2-4 ConnectionFactory のサブクラス
サブクラス
メッセージング モデル
作成するもの
QueueConnectionFactory
PTP
JMS PTP プロバイダへの QueueConnection
TopicConnectionFactory
pub/Sub
JMS pub/sub プロバイダへの TopicConnection

アプリケーションで ConnectionFactory クラスを使用する方法については、「基本的な JMS アプリケーションの開発」または javax.jms.ConnectionFactory Javadoc を参照してください。

Connection

Connection は、アプリケーションとメッセージング システムの間の開いている通信チャネルを表し、メッセージを生成および消費するための Session を作成するために使用します。接続では、アプリケーションと JMS の間のメッセージングを管理するサーバサイドとクライアントサイドのオブジェクトが作成されます。接続では、ユーザの認証も提供されます。

Connection は、JNDI ルックアップを通じて取得する ConnectionFactory によって作成されます。

ユーザの認証や通信の設定に関わるリソースのオーバーヘッドがあるため、ほとんどのアプリケーションではすべてのメッセージングで 1 つの接続を確立します。WebLogic Server では、JMS トラフィックはサーバとのクライアント接続で他の WebLogic サービスと多重化されます。JMS のために、新たな TCP/IP 接続が作成されることはありません。サーブレットや他のサーバサイド オブジェクトもまた、JMS Connection を使用する場合があります。

デフォルトでは、接続は停止モードで作成されます。停止している接続を開始する方法とタイミングについては、「接続の開始、停止、クローズ」を参照してください。

接続では同時使用がサポートされており、複数のスレッドがオブジェクトに同時にアクセスできます。

注意 : このリリースでは、JMS 1.1 仕様の connection オブジェクトを使用できます。または、そのサブクラスを使用することもできます。

次の表は、Connection のサブクラスを説明しています。

表 2-5 Connection のサブクラス
サブクラス
メッセージング モデル
作成するもの
QueueConnection
PTP
QueueSessionQueueConnectionFactory で作成された JMS PTP プロバイダへの接続で構成される。
TopicConnection
pub/sub
TopicSessionTopicConnectionFactory で作成された JMS pub/sub プロバイダへの接続で構成される。

アプリケーションで Connection クラスを使用する方法については、「基本的な JMS アプリケーションの開発」または javax.jms.Connection Javadoc を参照してください。

Session

Session オブジェクトでは、生成および消費されるメッセージの順序を定義し、複数のメッセージ プロデューサとメッセージ コンシューマを作成できます。メッセージの生成と消費には同じスレッドを使用できます。アプリケーションでメッセージの生成と消費に別々のスレッドが必要な場合は、そのアプリケーションで機能ごとに個別のセッションを作成する必要があります。

Session は、Connection で作成されます。

WebLogic JMS セッションのガイドライン

JMS 1.1 仕様では、汎用セッションであらゆる型の Destination オブジェクトの MessageConsumer を使用することが許可されています。しかし、WebLogic JMS では、単一のセッションで QueueConsumer 型と TopicSubscriber 型の MessageConsumer を一緒に使用することはできません。また、単一のセッションで複数のコンシューマを使用するのは、あまり一般的ではありません。以下の一般的な使用方法がサポートされています。

警告 : セッションおよびそのメッセージのプロデューサとコンシューマには、一度に 1 つのスレッドしかアクセスできません。それらに複数のスレッドが同時にアクセスした場合、それらの動作は定義されません。

Session のサブクラス

次の表は、Session のサブクラスを説明しています。

表 2-6 Session のサブクラス
サブクラス
メッセージング モデル
提供するコンテキストの用途
QueueSession
PTP
JMS PTP プロバイダのメッセージを生成および消費する。QueueConnection で作成される。
TopicSession
pub/sub
JMS pub/sub プロバイダのメッセージを生成および消費する。TopicConnection によって作成される。

アプリケーションで Session クラスを使用する方法については、「基本的な JMS アプリケーションの開発」、または javax.jms.Session Javadoc および weblogic.jms.extensions.WLSession Javadoc を参照してください。

非トランザクション セッション

非トランザクション セッションでは、セッションを作成するアプリケーションで、次の表で定義されている 5 つの確認応答モードのいずれかが選択されます。

表 2-7 非トランザクション セッションで使用する確認応答モード
確認応答モード
説明
AUTO_ACKNOWLEDGE
受信側アプリケーションのメソッドが処理を終えたときに、Session オブジェクトでメッセージ受信の確認応答が行われる。
CLIENT_ACKNOWLEDGE
Session オブジェクトの動作は、アプリケーションによる確認応答メソッドの呼び出しに依存する。メソッドが呼び出されると、セッションでは、前回の確認応答以降に受信されたすべてのメッセージに対して確認応答が行われる。
このモードを使用すると、アプリケーションでは 1 回の呼び出しで複数メッセージの受信、処理、および確認応答を行うことができる。

注意 : Administration Console では、接続ファクトリの [確認応答ポリシー] 属性が Previous に設定されているのに対し、指定のセッションでのすべての受信メッセージを確認応答したい場合、最後のメッセージを使用して確認応答メソッドを呼び出す。

[確認応答ポリシー] 属性の詳細については、Administration Console オンライン ヘルプの「JMS 接続ファクトリ : コンフィグレーション : 全般」を参照。
DUPS_OK_ACKNOWLEDGE
受信側アプリケーションのメソッドが処理を終えたときに、Session オブジェクトでメッセージ受信の確認応答が行われる。確認応答の重複が許可される。
このモードでは、最も効率的にリソースが利用される。

注意 : アプリケーションで重複メッセージを処理できない場合は、このモードは使用しない。重複メッセージは、メッセージを配信する最初の試行が失敗した場合に送信される。

NO_ACKNOWLEDGE
確認応答を必要としない。NO_ACKNOWLEDGE セッションに送信されたメッセージは、サーバから即座に削除される。このモードで受信されたメッセージは回復されないので、メッセージを配信する最初の試行が失敗した場合はメッセージが失われたり、重複メッセージが配信されたりする。
このモードは、セッションの確認応答で提供されるサービスの質を必要とせず、それに関連するオーバーヘッドを避ける必要があるアプリケーションで使用する。

注意 : アプリケーションで、失われたメッセージや重複メッセージを処理できない場合は、このモードは使用しないようにする。重複メッセージは、メッセージを配信する最初の試行が失敗した場合に送信される。

MULTICAST_NO_ACKNOWLEDGE
確認応答を必要としないマルチキャスト モード。
MULTICAST_NO_ACKNOWLEDGE セッションに送信されたメッセージでは、前述の NO_ACKNOWLEDGE モードと同じ特性が共有される。
このモードは、マルチキャストをサポートし、セッションの確認応答で提供されるサービスの質を必要としないアプリケーションで使用する。マルチキャストの詳細については、「WebLogic Server でのマルチキャストの使い方」を参照。

注意 : トピックでのみ使用する。アプリケーションで、失われたメッセージや重複メッセージを処理できない場合は、このモードは使用しないようにする。重複メッセージは、メッセージを配信する最初の試行が失敗した場合に送信される。

トランザクション セッション

トランザクション セッションでは、一度に 1 つのトランザクションしかアクティブになりません。トランザクション中に送信または受信されたメッセージ数に関係なく、最小の単位として処理されます。

トランザクション セッションを作成すると、確認応答モードは無視されます。アプリケーションでトランザクションがコミットされると、そのトランザクションの間にアプリケーションで受信されたすべてのメッセージがメッセージング システムによって確認応答され、アプリケーションで送信されたメッセージは配信されるべく受け入れられます。アプリケーションでトランザクションがロールバックされると、そのトランザクションの間にアプリケーションで受信されたメッセージは確認応答されず、アプリケーションで送信されたメッセージは破棄されます。

JMS は、Java Transaction API (JTA) を使用する他の Java サービス (EJB など) との分散トランザクションに参加できます。トランザクションはそのトランザクションに関連付けられたメッセージへのアクセスが制限されているため、トランザクション セッションではこの機能をサポートしません。JTA の利用の詳細については、「JTA ユーザ トランザクションの使い方」を参照してください。

Destination

Destination オブジェクトはキューまたはトピックになり、特定プロバイダのアドレス構文をカプセル化します。プロバイダによって構文はさまざまであるため、JMS 仕様では標準のアドレス構文は定義されていません。

接続ファクトリの場合と同じように、管理者が送り先を定義し、コンフィグレーションすると、WebLogic Server の起動時にそれが JNDI スペースに追加されます。また、アプリケーションでは、それが作成された JMS 接続の間だけ存在する一時的な送り先を作成することもできます。

注意 : 管理者は、分散送り先をコンフィグレーションすることもできます。分散送り先は、単一の論理的な送り先としてクライアントからアクセス可能な 1 つの送り先セット (キューまたはトピック) です。詳細については、「送り先の分散」を参照してください。

クライアントサイドでは、Queue オブジェクトと Topic オブジェクトは、サーバ上のオブジェクトへのハンドルとして機能します。それらのメソッドは、それらの名前のみを返します。メッセージングを目的としてアクセスするには、それらにアタッチするメッセージ プロデューサとメッセージ コンシューマを作成します。

送り先では同時使用がサポートされており、複数のスレッドがオブジェクトに同時にアクセスできます。JMS の QueuesTopic は、javax.jms.Destination を拡張します。

注意 : このリリースでは、JMS 1.1 仕様の destination オブジェクトを使用できます。または、そのサブクラスを使用することもできます。

次の表は、Destination のサブクラスを説明しています。

表 2-8 Destination のサブクラス
サブクラス
メッセージング モデル
管理するメッセージ
Queue
PTP
JMS ポイント ツー ポイント プロバイダ
TemporaryQueue
PTP
JMS ポイント ツー ポイント プロバイダのメッセージ。メッセージが作成された JMS 接続の間だけ存在する。一時的なキューはそれを作成したキュー接続によってのみ消費される。
Topic
pub/sub
JMS pub/sub プロバイダのメッセージ。
TemporaryTopic
pub/sub
JMS pub/sub プロバイダのメッセージ。メッセージが作成された JMS 接続の間だけ存在する。一時的なトピックはそれを作成したトピック接続によってのみ消費される。

注意 : アプリケーションでは、キュー セッションで QueueBrowser オブジェクトを作成することによりキューを参照することができます。このオブジェクトでは、キュー ブラウザが作成された時点におけるキュー内のメッセージのスナップショットが生成されます。アプリケーションではキュー内のメッセージを表示できますが、メッセージは「読み込まれた」とは判断されず、したがってキューから削除されることはありません。キューの参照の詳細については、「メッセージ ヘッダ フィールドおよびメッセージ プロパティ フィールドの設定と参照」を参照してください。

アプリケーションで Destination クラスを使用する方法については、「基本的な JMS アプリケーションの開発」または javax.jms.Destination Javadoc を参照してください。

送り先の分散

分散送り先リソースは、単一の論理的な送り先としてクライアントからアクセス可能な 1 つの送り先セット (キューまたはトピック) です (たとえば分散トピックは独自の JNDI 名を持ちます)。このセットのメンバーは通常、クラスタ内の複数のサーバに分散されており、各メンバーは別々の JMS サーバに属しています。分散送り先を使用するアプリケーションは、スタンドアロンの送り先を使用するアプリケーションより可用性が高くなります。これは、WebLogic JMS に、クラスタ内の分散送り先メンバーのためのロード バランシングおよびフェイルオーバ機能があるためです。

MessageProducer と MessageConsumer

MessageProducer では、メッセージがキューまたはトピックに送信されます。MessageConsumer では、メッセージがキューまたはトピックから受信されます。メッセージ プロデューサとメッセージ コンシューマは、互いに独立して機能します。メッセージ コンシューマが作成されてメッセージを待っているかどうかに関係なく、メッセージ プロデューサではメッセージが生成および送信されます (この逆も同様)。

Session では、キューおよびトピックにアタッチされる MessageProducersMessageConsumers が作成されます。

メッセージ センダ オブジェクトとメッセージ レシーバ オブジェクトは、MessageProducer クラスおよび MessageConsumer クラスのサブクラスとして作成されます。

注意 : このリリースでは、JMS 1.1 仕様の MessageProducer および MessageConsumer オブジェクトを使用できます。または、そのサブクラスを使用することもできます。

次の表は、MessageProducerMessageConsumer のサブクラスを説明しています。

表 2-9 MessageProducer と MessageConsumer のサブクラス
サブクラス
メッセージング モデル
機能
QueueSender
PTP
JMS ポイント ツー ポイント プロバイダのメッセージを送信する。
QueueReceiver
PTP
JMS ポイント ツー ポイント プロバイダのメッセージを受信する。
TopicPublisher
pub/sub
JMS pub/sub プロバイダのメッセージを送信する。
TopicSubscriber
pub/sub
JMS pub/sub プロバイダのメッセージを受信する。

ポイント ツー ポイント (PTP) メッセージングの図で示されているように、PTP モデルでは複数のセッションが同じキューからメッセージを受信できます。ただし、メッセージは、1 つのキュー レシーバにしか配信できません。複数のキュー レシーバがある場合、次にメッセージを受信するキュー レシーバは先着順で決まります。

パブリッシュ/サブスクライブ (pub/sub) メッセージングの図で示されているように、pub/sub モデルではメッセージを複数のトピック サブスクライバに配信できます。トピック サブスクライバは、「恒久サブスクリプションの設定」で説明されているように恒久にも非恒久にもなります。

アプリケーションでは、1 つのトピックのパブリッシュとサブスクライブに同じ JMS 接続を使用できます。トピック メッセージはすべてのサブスクライバに配信されるので、アプリケーションは自身がパブリッシュしたメッセージを受信する可能性があります。メッセージがパブリッシュ元のクライアントで受信されるのを防ぐために、JMS アプリケーションではトピック サブスクライバに対して noLocal 属性を設定できます。詳細については、「手順 5 : セッションと送り先を使用してメッセージ プロデューサとメッセージ コンシューマを作成する」を参照してください。

アプリケーションで MessageProducer クラスと MessageConsumer クラスを使用する方法については、「JMS アプリケーションの設定」、または javax.jms.MessageProducer Javadoc および javax.jms.MessageConsumer Javadoc を参照してください。

Message

Message では、アプリケーション間で交換される情報がカプセル化されます。この情報は、以下の 3 つの要素で構成されます。

メッセージ ヘッダ フィールド

すべての JMS メッセージには、デフォルトで挿入され、メッセージ コンシューマで利用できる標準のヘッダ フィールドがあります。一部のフィールドは、メッセージ プロデューサで設定できます。

メッセージ ヘッダ フィールドの設定については、「メッセージ ヘッダ フィールドおよびメッセージ プロパティ フィールドの設定と参照」または javax.jms.Message Javadoc を参照してください。

次の表は、メッセージ ヘッダのフィールドを説明し、各フィールドで値がどのように定義されるのかを示しています。

表 2-10 メッセージ ヘッダ フィールド
フィールド
説明
どこで定義されるか
JMSCorrelationID
WebLogic JMSMessageID (この表内で後述)、アプリケーション固有の文字列、または byte[] 配列のいずれかを指定する。JMSCorrelationID はメッセージを相関させるために使用する。send() の前に、アプリケーションによってメッセージに直接設定される。
このフィールドには 2 つの一般的な用途がある。
最初の用途は、次のようなリクエストと応答の方式を設定してメッセージをリンクすること。
  1. メッセージを送信するときに、アプリケーションではそのメッセージに割り当てられた JMSMessageID 値を格納する。
  2. そのメッセージを受信したアプリケーションでは、送信側アプリケーションに送り返す応答メッセージの JMSCorrelationID フィールドに JMSMessageID をコピーする。
2 番目の用途は、選択した文字列を JMSCorrelationID フィールドに格納し、一連のメッセージをアプリケーション指定の値でリンクできるようにすること。
アプリケーション
JMSDeliveryMode
PERSISTENT または NON_PERSISTENT を指定する。このフィールドは、プロデューサに設定されるか、send() の前にアプリケーションによって送信されるパラメータとして設定される。
永続的なメッセージが送信された場合、そのメッセージは WebLogic 永続ストアに格納される。send() 処理は、メッセージの配信を保証できるまで成功とは判断されない。永続的なメッセージは少なくとも 1 回は確実に配信される。
非永続的メッセージは永続ストアに格納されない。このモードでは、処理のオーバーヘッドが最小限に抑えられる。メッセージは最低 1 回は配信が保証されるが、システム障害が発生すると失われる場合がある。接続をクローズするか回復すると、確認応答されていないすべての非永続的メッセージが再配信されます。非永続的メッセージは確認応答されると再配信されません。
この値は、producer.send() への呼び出しによって上書きされる。この値をメッセージに直接設定しても無効となる。プロデューサによって設定された値は、producer.send() に提供されたメッセージを使用して問い合わせるか、コンシューマがメッセージを受信したときに問い合わせることができる。
send() メソッド
JMSDeliveryTime
メッセージをコンシューマに配信できる最も早い絶対時間を定義する。このフィールドは、プロデューサに設定された timeToDeliver に応じて、send() の前にアプリケーションによって設定される。
このフィールドは、送り先でのメッセージのソート、またはメッセージの選択に使用できる。データ型変換の目的で、JMSDeliveryTime は長整数として保存される。
send() メソッド
JMSDestination
メッセージが配信される送り先 (キューまたはトピック) を指定する。このフィールドは、プロデューサの作成時に設定されるか、send() の前にアプリケーションによって送信されるパラメータとして設定される。
この値は、producer.send() への呼び出しによって上書きされる。この値をメッセージに直接設定しても無効となる。プロデューサによって設定された値は、producer.send() に提供されたメッセージを使用して問い合わせるか、コンシューマがメッセージを受信したときに問い合わせることができる。メッセージが受信されるとき、その送り先の値は送信時に割り当てられた値と同じでなければならない。
send() メソッド
JMSExpiration
メッセージの有効期限 (存続時間値) を指定する。このフィールドは、send() の前にアプリケーションによって設定される。プロデューサに設定されるか、アプリケーションが send() に送信するパラメータとして設定される timeToLive に依存する。
JMSExpiration の値は、アプリケーションの存続時間とその時点の GMT の合計として算出される。アプリケーションで存続時間が 0 として指定されると、JMSExpiration は 0 に設定され、メッセージは無期限になる。
期限の切れたメッセージは、誤って配信されないようにシステムから削除される。
send() メソッド
JMSMessageID
JMS プロバイダによって送信される各メッセージをユニークに識別する文字列値を格納する。このフィールドは、send() によって内部的に設定される。
すべての JMSMessageIDID: というプレフィックスで始まる。
この値は、producer.send() への呼び出しによって上書きされる。この値をメッセージに直接設定しても無効となる。プロデューサによって設定された値は、producer.send() に提供されたメッセージを使用して問い合わせるか、コンシューマがメッセージを受信したときに問い合わせることができる。メッセージが受信されるときには、プロバイダの割り当てた値が格納されている。
send() メソッド
JMSPriority
優先順位のレベルを指定する。このフィールドは、プロデューサに設定されるか、send() の前にアプリケーションによって送信されるパラメータとして設定される。
JMS では、0 ~ 9 の 10 段階で優先順位が定義されている (0 が最低の優先順位)。レベル 0 ~ 4 は通常の範囲に属し、レベル 5 ~ 9 は至急の範囲に属する。
メッセージが受信されるときには、メッセージを送信するメソッドで指定された値が格納されている。
送り先キーをコンフィグレーションすれば、優先順位を基準に送り先をソートすることができる。詳細については、Administration Console オンライン ヘルプの「送り先キーのコンフィグレーション」を参照。
send() メソッド
JMSRedelivered
確認応答がないためメッセージが再配信されるときに設定されるフラグを指定する。このフラグは受信側アプリケーションに関係がある。
フラグが設定されている場合は、以下のいずれかの理由のために、同じメッセージが以前に配信されている可能性がある。
  • アプリケーションではすでにメッセージが受信されているが、確認応答が行われていない。
  • セッションの recover() メソッドが呼び出されて、最後に確認応答されたメッセージの後からセッションが再開された。recover() メソッドの詳細については、「受信メッセージの回復」を参照。
WebLogic JMS
JMSReplyTo
応答メッセージが送信されるキューまたはトピックを指定する。このフィールドは、send() の前に、アプリケーションによって直接メッセージに設定される。
この機能は JMSCorrelationID ヘッダ フィールドと共に使用してリクエストと応答のメッセージを連係させることができる。
JMSReplyTo フィールドをただ設定するだけでは、受信側アプリケーションの応答が有効になるだけで、応答が保証されるわけではない。
アプリケーション
JMSTimestamp
メッセージが送信されたときの時刻を格納する。タイムスタンプは、アプリケーションでメッセージが送信されたときではなく、WebLogic JMS で配信用にメッセージが受け付けられたときにメッセージに書き込まれる。
メッセージが受信されるときには、タイムスタンプが格納されている。
このフィールドには、Java のミリ時間の値が格納される。
WebLogic JMS
JMSType
send() の前にアプリケーションによって直接メッセージに設定されたメッセージ タイプ識別子 (String) を示す。
JMS 仕様では、多様な JMS プロバイダに適応するため、このフィールドに若干の柔軟性を持たせている。一部のメッセージング システムでは、アプリケーション固有のメッセージ タイプを使用できる。そのようなシステムの場合、JMSType フィールドは、格納されている型定義にアクセスするためのメッセージ タイプ ID を保持するために使用できる。
WebLogic JMS では、このフィールドの使用に制限を設けていない。
アプリケーション

メッセージ プロパティ フィールド

メッセージのプロパティ フィールドには、送信側アプリケーションによって追加されたヘッダ フィールドが格納されます。プロパティは、標準的な Java の名前と値の組み合わせです。プロパティ名は、javax.jms.Message Javadoc で定義されているメッセージ セレクタの構文仕様に準拠していなければなりません。有効な値は、boolean、byte、double、float、int、long、および String です。

WebLogic Server では、JMS 1.1.仕様での定義に従って、以下の JMS (JMSX) 定義済みプロパティの使用をサポートしています。

表 2-11 JMSX プロパティ
タイプ
説明
JMSXUserID
メッセージの送信者であるユーザを識別するシステム生成のプロパティ。「接続ファクトリのセキュリティ パラメータのコンフィグレーション」および「メッセージ ID 伝播セキュリティの拡張」を参照。
JMSXDeliveryCount
メッセージの配信試行回数を指定するシステム生成のプロパティ。1 回目の試行を 1 とする。
JMSXGroupID
メッセージ グループの ID。
JMSXGroupSeq
グループ内のメッセージの連続番号。

メッセージ プロパティ フィールドは、アプリケーション固有の目的に使用できますが、それらは基本的にはメッセージ セレクタで使用するために用意されています。JMS プロパティをそれぞれの環境でどのように使用するかはユーザが決定します。たとえば、処理条件に応じて一部のメッセージにだけ含め、その他のメッセージでは省略することもできます。詳細については以下を参照してください。

メッセージ本文

メッセージ本文は、プロデューサからコンシューマに配信される内容です。

次の表は、JMS で定義されているメッセージ タイプを説明しています。すべてのメッセージ タイプは、メッセージ ヘッダとメッセージ プロパティ (メッセージ本文はなし) で構成される javax.jms.Message を拡張します。

表 2-12 JMS メッセージ タイプ
タイプ
説明
未解釈バイトのストリーム。センダとレシーバによって理解されなければならない。このメッセージ タイプのアクセス メソッドは、java.io.DataInputStream および java.io.DataOutputStream に基づくストリーム対応のリーダーとライター。
名前が文字列であり、値が Java プリミティブ型である、複数の名前と値の組み合わせ。名前と値の組み合わせは、名前を指定することによって順次的にもランダムにも読み込むことができる。
1 つのシリアライズ可能な Java オブジェクト。
Java プリミティブ型だけがストリームで読み書きされること以外は、BytesMessage と同じ。
1 つの String。TextMessage では XML コンテンツも格納できる。
XML コンテンツ。XMLMessage タイプを使用すると、TextMessage で送信される XML コンテンツでは処理しにくいメッセージのフィルタ処理を容易に行うことができる。

詳細については、javax.jms.Message Javadoc を参照してください。特定のメッセージ タイプのアクセス メソッドや変換表については、そのメッセージ タイプの Javadoc を参照してください。

ServerSessionPoolFactory

注意 : セッション プールおよび接続コンシューマのコンフィグレーション オブジェクトは、WebLogic Server の本リリースでは非推奨となっています。これらは、J2EE 仕様の必須コンポーネントではなく、JTA ユーザ トランザクションもサポートしていないためです。代わりに、より単純で可用性が高く、管理も容易なメッセージ駆動型 Bean (MDB) が主に使用されています。MDB の設計の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」を参照してください。

サーバ セッション プールは、メッセージの並行処理を実現する WebLogic 固有の JMS 機能です。サーバ セッション プール ファクトリは、サーバサイドの ServerSessionPool を作成するために使用します。

WebLogic JMS では、デフォルトで次のような ServerSessionPoolFactory オブジェクトが定義されています。weblogic.jms.extensions.ServerSessionPoolFactory:<name>。ここで <name> には、セッション プールの作成先になる JMS サーバの名前を指定します。WebLogic Server ではデフォルトのサーバ セッション プール ファクトリが起動時に JNDI スペースに追加され、アプリケーションでは WebLogic JNDI を使用してサーバ セッション プール ファクトリが取り出されます。

アプリケーションでサーバ セッション プール ファクトリを使用する方法については、「サーバ セッション プールの定義」または weblogic.jms.extnesions.ServerSessionPoolFactory Javadoc を参照してください。

ServerSessionPool

ServerSessionPool アプリケーション サーバ オブジェクトでは、メッセージを並行処理するために接続コンシューマで取り出すことができるサーバ セッションのプールが提供されます。

ServerSessionPool は、JNDI ルックアップで取得される ServerSessionPoolFactory オブジェクトによって作成されます。

アプリケーションでサーバ セッション プールを使用する方法については、「サーバ セッション プールの定義」または javax.jms.ServerSessionPool Javadoc を参照してください。

ServerSession

ServerSession アプリケーション サーバ オブジェクトでは、メッセージを作成、送信、および受信するためのコンテキストが提供され、スレッドと JMS セッションを関連付けることができます。

ServerSession は、ServerSessionPool オブジェクトによって作成されます。

アプリケーションでサーバ セッションを使用する方法については、「サーバ セッション プールの定義」または javax.jms.ServerSession Javadoc を参照してください。

ConnectionConsumer

ConnectionConsumer オブジェクトでは、サーバ セッションを使用して受信メッセージを処理します。メッセージ トラフィックが大きい場合は、スレッド コンテキストの切り替えを最小限に抑えるために、接続コンシューマでは複数のメッセージで各サーバ セッションをロードすることができます。

ConnectionConsumer は、Connection オブジェクトによって作成されます。

アプリケーションで接続コンシューマを使用する方法については、「サーバ セッション プールの定義」または javax.jms.ConnectionConsumer Javadoc を参照してください。

注意 : 接続コンシューマ リスナは、サーバと同じ JVM で動作します。

  ページの先頭       前  次