ナビゲーションをスキップ

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

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

WebLogic JMS の基礎

以下の節では、WebLogic JMS コンポーネントと機能について説明します。

注意 : この節で説明する JMS クラスの詳細については、Sun Microsystems の Java Web サイトにある以下の JMS 仕様と Javadoc を参照してください。
http://java.sun.com/products/jms/docs.html

 


メッセージング モデル

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

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

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

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

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

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

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

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

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


 

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

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

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

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

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

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

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


 

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

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

メッセージの永続性

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

 


WebLogic JMS のクラス

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

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

表 2-1 WebLogic JMS のクラス

JMS クラス オブジェクト

説明

ConnectionFactory オブジェクト

接続のコンフィグレーション情報をカプセル化する。接続ファクトリは接続を作成するために使用する。接続ファクトリは JNDI を使用してルックアップする。

Connection オブジェクト

メッセージング システムへの開いている通信チャネルを表す。接続はセッションを作成するために使用する。

Session オブジェクト

生成および消費されるメッセージの順序を定義する。

Destination オブジェクト

特定のプロバイダのアドレスをカプセル化して、キューまたはトピックを識別する。キューとトピックでは、それぞれ PTP メッセージング モデルおよび pub/sub メッセージング モデルから配信されるメッセージが管理される。

MessageProducer オブジェクトと MessageConsumer オブジェクト

メッセージを送信および受信するためのインタフェースを提供する。メッセージ プロデューサではキューまたはトピックにメッセージが送信される。メッセージ コンシューマではキューまたはトピックからメッセージが受信される。

Message オブジェクト

送信または受信される情報をカプセル化する。

ServerSessionPoolFactory オブジェクト1

メッセージ コンシューマのサーバ管理のプールに関するコンフィグレーション情報をカプセル化する。サーバ セッション プール ファクトリはサーバ セッション プールを作成するために使用する。

ServerSessionPool オブジェクト1

メッセージを並行処理するために使用できるサーバ セッションのプールを接続コンシューマに提供する。

ServerSession オブジェクト1

スレッドと JMS セッションを関連付ける。

ConnectionConsumer オブジェクト1

メッセージを並行処理するためにサーバ セッションを取り出すコンシューマを指定する。


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

JMS オブジェクトのコンフィグレーションについては、「WebLogic JMS の管理」を参照してください。JMS アプリケーションを設定する手順については、「JMS アプリケーションの設定」を参照してください。

 


ConnectionFactory オブジェクト

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

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

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

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

表 2-2 デフォルト接続ファクトリ用の XA トランザクション設定

デフォルト接続ファクトリ . .

[XA コネクション ファクトリを有効化] の設定値 . .

weblogic.jms.ConnectionFactory

False

weblogic.jms.XAConnectionFactory

True

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

その他のすべてのデフォルト コンフィグレーション属性は、ユーザ定義の接続ファクトリと同じデフォルト値に設定されます。[XA コネクション ファクトリを有効化] 属性と、その他の接続ファクトリ属性のデフォルト値については、Administration Console オンライン ヘルプの「JMS に関する属性と Administration Console 画面のリファレンス」を参照してください。

デフォルトの接続ファクトリを使用する場合のもう 1 つの違いは、接続ファクトリがデプロイされる可能性のある WebLogic Server を限定できない点です。ただし、デフォルトの接続ファクトリはサーバ単位で無効にできます。デフォルト接続ファクトリの有効化または無効化については、Administration Console オンライン ヘルプの「[サーバ] --> [サービス] --> [JMS]」を参照してください。

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

注意 : 下位互換性を維持するため、WebLogic JMS では非推奨の 2 つのデフォルト接続ファクトリを現在もサポートしています。該当するファクトリの JNDI 名は次のとおりです。javax.jms.QueueConnectionFactory および javax.jms.TopicConnectionFactory。非推奨の接続ファクトリから新しいデフォルトまたはユーザ定義の接続ファクトリへの移行については、「WebLogic JMS アプリケーションの移植」を参照してください。

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

システム管理者が 1 つまたは複数の接続ファクトリを定義およびコンフィグレーションして、あらかじめ定義された属性で接続を作成すると、WebLogic Server では起動時にそれらの接続ファクトリが JNDI スペースに追加されます。アプリケーションでは、WebLogic JNDI を使用して接続ファクトリを取り出します。ユーザ定義の接続ファクトリにはユニークな名前を付ける必要があります。そうしないとサーバは起動しません。接続ファクトリのコンフィグレーションの詳細については、Administration Console オンライン ヘルプの「JMS 接続ファクトリのタスク」を参照してください。

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

ConnectionFactory クラス

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

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

表 2-3 ConnectionFactory のサブクラス

サブクラス . .

メッセージング モデル . .

作成内容 . .

QueueConnectionFactory

PTP

JMS PTP プロバイダへの QueueConnection

TopicConnectionFactory

pub/Sub

JMS pub/Sub プロバイダへの TopicConnection

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

 


Connection オブジェクト

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

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

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

デフォルトでは、接続は停止モードで作成されます。停止状態の接続をいつどのように開始するのかについては、「接続の開始、停止、クローズ」を参照してください。

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

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

表 2-4 Connection のサブクラス 

サブクラス . .

メッセージング モデル . .

作成内容 . .

QueueConnection

PTP

QueueSessionQueueConnectionFactory で作成された JMS PTP プロバイダへの接続で構成される。

TopicConnection

pub/sub

TopicSessionTopicConnectionFactory で作成された JMS pub/sub プロバイダへの接続で構成される。

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

 


Session オブジェクト

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

Session は、Connection オブジェクトで作成されます。

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

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

表 2-5 Session のサブクラス 

サブクラス . .

メッセージング モデル . .

提供するコンテキストの用途 . .

QueueSession

PTP

JMS PTP プロバイダのメッセージを生成および消費する。QueueConnection で作成される。

TopicSession

pub/sub

JMS pub/sub プロバイダのメッセージを生成および消費する。TopicConnection によって作成される。

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

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

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

表 2-6 非トランザクション セッションで使用する確認応答モード 

確認応答モード

説明

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 モードと同じ特性が共有される。

このモードは、マルチキャストをサポートし、セッションの確認応答で提供されるサービスの質を必要としないアプリケーションで使用する。マルチキャストの詳細については、「マルチキャストの使い方」を参照。

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

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

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

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

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

 


Destination オブジェクト

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

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

注意 : 管理者は、サーバのクラスタ内の単一の分散送り先セットのメンバーとして、複数の物理的な送り先をコンフィグレーションすることもできます。詳細については、「送り先の分散」を参照してください。

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

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

表 2-7 Destination のサブクラス 

サブクラス . .

メッセージング モデル . .

管理するメッセージの対象 . .

Queue

PTP

JMS ポイント ツー ポイント プロバイダ

TemporaryQueue

PTP

JMS ポイント ツー ポイント プロバイダのメッセージ。メッセージが作成された JMS 接続の間だけ存在する。一時的なキューはそれを作成したキュー接続によってのみ消費される。

Topic

pub/sub

JMS pub/sub プロバイダのメッセージ。

TemporaryTopic

pub/sub

JMS pub/sub プロバイダのメッセージ。メッセージが作成された JMS 接続の間だけ存在する。一時的なトピックはそれを作成したトピック接続によってのみ消費される。

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

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

 


送り先の分散

管理者は、WebLogic Server のクラスタ内の単一の分散送り先セットのメンバーとして、複数の物理的な送り先をコンフィグレーションすることができます。適切に構成すると、プロデューサとコンシューマがその分散送り先に対して送受信できるようになります。WebLogic JMS は、分散送り先内で利用可能な全送り先メンバーにメッセージの負荷を分散します。

 


MessageProducer オブジェクトと MessageConsumer オブジェクト

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

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

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

表 2-8 MessageProducer と MessageConsumer のサブクラス 

サブクラス . .

メッセージング モデル . .

機能 . .

QueueSender

PTP

JMS ポイント ツー ポイント プロバイダのメッセージを送信する。

QueueReceiver

PTP

JMS ポイント ツー ポイント プロバイダのメッセージを受信し、メッセージの作成された JMS 接続が閉じるまで存続する。

TopicPublisher

pub/sub

JMS pub/sub プロバイダのメッセージを送信する。

TopicSubscriber

pub/sub

JMS pub/sub プロバイダのメッセージを受信し、メッセージの作成された JMS 接続が閉じるまで存続する。メッセージの送り先は、適切な JNDI インタフェースを使用して明示的にバインドしなければならない。

ポイント ツー ポイント (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-9 メッセージ ヘッダ フィールド 

フィールド

説明

どこで定義されるか

JMSCorrelationID

WebLogic JMSMessageID (この表内で後述)、アプリケーション固有の文字列、または byte[] 配列のいずれかを指定する。JMSCorrelationID はメッセージを相互に関連させるために使用する。

このフィールドには 2 つの一般的な用途がある。

最初の用途は、次のようなリクエストと応答の方式を設定してメッセージをリンクすること。

    1. メッセージを送信するときに、アプリケーションではそのメッセージに割り当てられた JMSMessageID 値を格納する。

    2. そのメッセージを受信したアプリケーションでは、送信側アプリケーションに送り返す応答メッセージの JMSCorrelationID フィールドに JMSMessageID をコピーする。

2 番目の用途は、選択した文字列を JMSCorrelationID フィールドに格納し、一連のメッセージをアプリケーション指定の値でリンクできるようにすること。

すべての JMSMessageIDID: というプレフィックスで始まる。他のアプリケーション固有の文字列で JMSCorrelationID を使用する場合は、文字列の先頭にプレフィクス ID: が付いてはならない。

アプリケーション

JMSDeliveryMode

PERSISTENT または NON_PERSISTENT を指定する。

永続的なメッセージが送信された場合、そのメッセージは JMS ファイルまたは JDBC データベースに格納される。send() 処理は、メッセージの配信を保証できるまで成功とは判断されない。永続的なメッセージは少なくとも 1 回は確実に配信される。

非永続的メッセージは JMS データベースに格納されない。このモードでは、処理のオーバーヘッドが最小限に抑えられる。メッセージは最低 1 回は配信が保証されるが、システム障害が発生すると失われる場合がある。接続を閉じるか回復すると、確認応答されていないすべての非永続的メッセージが再配信される。非永続的メッセージは確認応答されると再配信されない。

メッセージが送信されるときには、この値は無視される。メッセージが受信されるときには、送信側のメソッドで指定された配信モードが格納されている。

send() メソッド

JMSDeliveryTime

メッセージをコンシューマに配信できる最も早い絶対時間を定義する。このフィールドは、送り先でのメッセージのソート、またはメッセージの選択に使用できる。データ型変換の目的で、JMSDeliveryTime は長整数として保存される。

send() メソッド

JMSDestination

メッセージが配信される送り先 (キューまたはトピック) を指定する。このフィールドの値は、メッセージの送信時にアプリケーションのメッセージ プロデューサで設定される。

メッセージが送信されるときには、この値は無視される。メッセージが受信されるとき、その送り先の値は送信時に割り当てられた値と同じでなければならない。

send() メソッド

JMSExpiration

メッセージの有効期限 (存続時間値) を指定する。

JMSExpiration の値は、アプリケーションの存続時間とその時点の GMT の合計として算出される。アプリケーションで存続時間が 0 として指定されると、JMSExpiration は 0 に設定され、メッセージは無期限になる。

期限の切れたメッセージは、誤って配信されないようにシステムから削除される。

send() メソッド

JMSMessageID

JMS プロバイダによって送信される各メッセージをユニークに識別する文字列値を格納する。

すべての JMSMessageIDID: というプレフィックスで始まる。

メッセージが送信されるときには、この値は無視される。メッセージが受信されるときには、プロバイダの割り当てた値が格納されている。

send() メソッド

JMSPriority

優先順位のレベルを指定する。このフィールドはメッセージが送信される前に設定される。

JMS では、0 ~ 9 の 10 段階で優先順位が定義されている (0 が最低の優先順位)。レベル 0 ~ 4 は通常の範囲に属し、レベル 5 ~ 9 は至急の範囲に属する。

メッセージが受信されるときには、メッセージを送信するメソッドで指定された値が格納されている。

送り先キーをコンフィグレーションすれば、優先順位を基準に送り先をソートすることができる。詳細については、Administration Console オンライン ヘルプの「JMS : コンフィグレーション」を参照。

send() メソッド

JMSRedelivered

確認応答がないためメッセージが再配信されるときに設定されるフラグを指定する。このフラグは受信側アプリケーションのみに関係がある。

フラグが設定されている場合は、以下のいずれかの理由のために、同じメッセージが以前に配信されている可能性がある。

  • アプリケーションではすでにメッセージが受信されているが、確認応答が行われていない。

  • セッションの recover() メソッドが呼び出されて、最後に確認応答されたメッセージの後からセッションが再開された。recover() メソッドの詳細については、「受信メッセージの回復」を参照。

WebLogic JMS

JMSReplyTo

応答メッセージが送信されるキューまたはトピックを指定する。このフィールドはメッセージの送信前に送信側アプリケーションで設定される。

この機能は JMSCorrelationID ヘッダ フィールドと共に使用してリクエストと応答のメッセージを連係させることができる。

JMSReplyTo フィールドをただ設定するだけでは、受信側アプリケーションの応答が有効になるだけで、応答が保証されるわけではない。

JMSReplyTo は NULL に設定することもできる。それは、受信側アプリケーションにとって通知イベントなどの意味を持つ場合がある。

アプリケーション

JMSTimestamp

メッセージが送信されたときの時刻を格納する。タイムスタンプは、アプリケーションでメッセージが送信されたときではなく、WebLogic JMS で配信用にメッセージが受け付けられたときにメッセージに書き込まれる。

メッセージが受信されるときには、タイムスタンプが格納されている。

このフィールドには、Java のミリ時間の値が格納される。

WebLogic JMS

JMSType

送信側アプリケーションで設定されたメッセージ タイプ識別子 (String) を示す。

JMS 仕様では、多様な JMS プロバイダに適応するため、このフィールドに若干の柔軟性を持たせている。一部のメッセージング システムでは、アプリケーション固有のメッセージ タイプを使用できる。そのようなシステムの場合、JMSType フィールドは、格納されている型定義にアクセスするためのメッセージ タイプ ID を保持するために使用できる。

WebLogic JMS では、このフィールドの使用に制限を設けていない。

アプリケーション

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

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

メッセージ プロパティ フィールドは、アプリケーション固有の目的に使用できますが、それらは基本的にはメッセージ セレクタで使用するために用意されています。メッセージ セレクタの詳細については、「メッセージのフィルタ処理」を参照してください。

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

メッセージ本文

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

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

表 2-10 JMS メッセージ タイプ 

タイプ

説明

javax.jms.BytesMessage

未解釈バイトのストリーム。センダとレシーバによって理解されなければならない。このメッセージ タイプのアクセス メソッドは、java.io.DataInputStream および java.io.DataOutputStream に基づくストリーム対応のリーダとライター。

javax.jms.MapMessage

名前が文字列であり、値が Java プリミティブ型である、複数の名前と値の組み合わせ。名前と値の組み合わせは、名前を指定することによって順次的にもランダムにも読み込むことができる。

javax.jms.ObjectMessage

1 つのシリアライズ可能な Java オブジェクト。

javax.jms.StreamMessage

Java プリミティブ型だけがストリームで読み書きされること以外は、BytesMessage と同じ。

javax.jms.TextMessage

1 つの String。TextMessage では XML コンテンツも格納できる。

weblogic.jms.extensions.XMLMessage

XML コンテンツ。XMLMessage タイプを使用すると、TextMessage で送信される XML コンテンツでは処理しにくいメッセージのフィルタ処理を容易に行うことができる。

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

 


ServerSessionPoolFactory オブジェクト

注意 : セッション プールは現在ほとんど使用されていません。理由は、J2EE 仕様の必須の部分ではないこと、JTA ユーザ トランザクションをサポートしていないこと、そして大部分がメッセージ駆動型 Bean (MDB) に取って代わられたことです。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 で動作します。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次