Sun ONE Application Server 7, Update 1 管理者ガイド |
Sun ONE Application Server は、JMS (Java Message Service) API を使ってメッセージング処理を行うアプリケーションをサポートしています。JMS は、Java アプリケーションが分散環境でメッセージの作成、送受信、および読み取りを行うための共通の方法を提供するプログラミングインタフェースです。
J2EE (Java 2 Enterprise Edition) アプリケーションは、非同期メッセージングの標準ベースの手段として JMS を使用します。このため、J2EE コンポーネント (Web コンポーネントか Enterprise JavaBeans (EJB) コンポーネント) は、JMS API を使って、メッセージ駆動型 Beans (MDB) と呼ばれる特殊な EJB によって非同期で消費されるメッセージを送信できます。
一般に、Sun ONE Application Server では JMS メッセージングをサポートします。特に MDB をサポートするには、JMS 仕様を実装するメッセージングミドルウェア、すなわち JMS プロバイダが必要です。Sun ONE Application Server のネイティブ JMS プロバイダは、Sun ONE Message Queue (MQ) バージョン 3.01 です。
MQ は Sun ONE Application Server に緊密に統合されています。このため、JMS メッセージングは透過的にサポートされます。このサポートにより、必要な管理作業を最小限に抑えることができます。Sun ONE Application Server では、これを「JMS サービス」と呼びます。
この章では、Sun ONE Message Queue に組み込まれた JMS サービスについて説明します。さらに、このサービスを管理するために必要な情報を提供します。この節では次の項目について説明します。
JMS について
JMS 仕様には、分散エンタープライズメッセージングをサポートするプログラミングインタフェースが規定されています。エンタープライズメッセージングシステムにより、個々の分散型コンポーネントやアプリケーションは、メッセージを使って対話することができます。これらのコンポーネントは、同一システム上にある場合、同一ネットワーク上にある場合、インターネットを介して自由な状態で接続している場合がありますが、メッセージングを使ってデータの受け渡しを行い、相互の機能を調整する点で共通しています。
エンタープライズ規模のメッセージングをサポートするため、JMS は、信頼性の高い非同期メッセージ配信を行います。
高信頼性配信: ネットワークやシステムの障害が発生しても、一方のコンポーネントからもう一方のコンポーネントへのメッセージが失われることはありません。つまり、システムがメッセージを確実に配信できます。
非同期配信: 多数のコンポーネントが同時にメッセージを交換し、高密度のスループットをサポートするために、メッセージの送信はコンシューマ側で受信の準備ができているかどうかに左右されません。コンシューマがビジー状態またはオフラインになっている場合も、システムはメッセージを送信します。このメッセージは、コンシューマの準備ができた時点で受信されます。この方式を非同期メッセージ配信、または蓄積型 (store-and-forward) メッセージングと呼びます。
ここでは、JMS の概念と用語について簡単に説明します。
JMS の詳しい解説が必要な場合は JMS 1.0.2 仕様を参照してください。次の URL から参照できます。
http://java.sun.com/products/jms/docs.html
メッセージングシステムの基本概念
ここでは、エンタープライズメッセージングシステムの一般的な概念、および JMS に固有の概念について説明します。
メッセージ
メッセージは、何らかの形式のデータ (メッセージ本文) と、メッセージの特性またはプロパティ (たとえば、そのメッセージの送信先、寿命など、メッセージングシステムによって規定される特性) を説明するメタデータ (メッセージヘッダー) で設定されます。
メッセージサービスアーキテクチャ
次の図「メッセージサービスアーキテクチャ」は、メッセージングシステムの基本アーキテクチャを示しています。メッセージングシステムは、共通のメッセージングサービスを利用してメッセージを交換するメッセージプロデューサとメッセージコンシューマで構成されます。一般に、単一のメッセージコンポーネント内に存在できるメッセージプロデューサとメッセージコンシューマの数に制限はありません。メッセージプロデューサは、メッセージサービスにメッセージを送信します。すると、メッセージサービスは、メッセージルーティングコンポーネントとメッセージ配信コンポーネントを使って、配信対象として登録されている 1 個以上のメッセージコンシューマにメッセージを配信します。メッセージルーティングコンポーネントとメッセージ配信コンポーネントは、適切な全コンシューマに確実にメッセージを配信することになっています。
   メッセージサービスアーキテクチャ
メッセージ配信モデル
プロデューサとコンシューマの間には、1 対 1、1 対多、多対多の関係があります。たとえば、次のようなメッセージ配信が可能です。
- 単一のプロデューサから単一のコンシューマへ
- 単一のプロデューサから複数のコンシューマへ
- 複数のプロデューサから単一のコンシューマへ
- 複数のプロデューサから複数のコンシューマへ
これらの関係は、ポイントツーポイントとパブリッシュ / サブスクライブという 2 種類のメッセージ配信モデルで表されます。ポイントツーポイント配信モデルは、主に、特定のプロデューサから発信され特定のコンシューマによって受信されるメッセージを取り扱います。パブリッシュ / サブスクライブ配信モデルは、主に、任意の数のプロデューサから発信され任意の数のコンシューマによって受信されるメッセージを取り扱います。2 つのメッセージ配信モデルには共通点があります。
これまで、メッセージングシステムは、この 2 つの配信モデルの多種多様な組み合わせをサポートしてきました。JMS API は、ポイントツーポイントモデルとパブリッシュ / サブスクライブモデルの両方をサポートする共通のプログラミングアプローチとして開発されたものです。
JMS 仕様
JMS 仕様には、メッセージ構造、プログラミングモデル、およびメッセージング処理の方法や意味を規定する一連の規則が指定されています。
JMS メッセージ構造
JMS 仕様では、メッセージは、ヘッダー、プロパティ (ヘッダーの拡張と考えられる)、および本文の 3 つの部分で設定されています。
ヘッダー: ヘッダーは、メッセージの JMS 特性、すなわち、メッセージの送信先、持続性があるかどうか、寿命、優先度を指定します。メッセージングシステムによるメッセージ配信の方法は、これらの特性によって決まります。
プロパティ: アプリケーションは、プロパティによって提供される値を元に、さまざまな選択基準に従ってメッセージをフィルタリングできます。プロパティはオプションです。
メッセージ本文: メッセージ本文には、実際に交換されるデータが含まれます。JMS は、6 種類のメッセージ本文をサポートします。
JMS プログラミングモデル
JMS プログラミングモデルでは、JMS クライアント (コンポーネントまたはアプリケーション) は JMS メッセージサービスを利用してメッセージを交換します。メッセージプロデューサはメッセージサービスにメッセージを送信します。メッセージコンシューマは、このメッセージサービスからメッセージを受信します。このようなメッセージング処理は、JMS API を実装する一連のオブジェクト (JMS プロバイダによって提供される) によって行われます。図「JMS プログラミングオブジェクト」は、メッセージ配信のプログラミングに使用される JMS オブジェクトを示しています。
JMS プログラミングモデルでは、JMS クライアントは、接続ファクトリオブジェクトを使って接続を確立し、この接続を介して JMS メッセージングサービスとメッセージをやりとりします。接続は、JMS クライアントのメッセージサービスとのアクティブな接続です。通信リソースの割り当てとクライアントの認証は、接続の確立時に行われます。
   JMS プログラミングオブジェクト
接続を使って、セッションを作成できます。セッションは、メッセージを生成および消費するためのシングルスレッドコンテキストです。これを使って、メッセージを送受信するメッセージプロデューサとメッセージコンシューマを作成できます。セッションは、複数の承認オプションまたは分散トランザクションマネージャで管理できるトランザクションにより、高信頼性配信をサポートします。
JMS クライアントは、メッセージプロデューサを使って、API では送信先オブジェクトとして表される指定された物理的な送信先へ、メッセージを送信します。メッセージプロデューサは、物理的な送信先に送信するすべてのメッセージに適用される、デフォルトの配信モード (持続または非持続メッセージ)、優先度、および生存期間を指定できます。
同様に、JMS クライアントは、メッセージコンシューマを使って、API では送信先オブジェクトとして表される指定された物理的な送信先から、メッセージを受信します。メッセージコンシューマは、同期または非同期のメッセージコンシュームをサポートします。非同期消費をサポートするには、コンシューマにメッセージリスナーを登録する必要があります。クライアントは、セッションスレッドがメッセージリスナーオブジェクトの onMessage() メソッドを呼び出した時点でメッセージを消費します。
管理対象オブジェクト : プロバイダ非依存
「JMS プログラミングモデル」の図の 2 つのオブジェクトは、JMS プロバイダによる JMS メッセージサービスの実装方法に依存します。接続ファクトリオブジェクトは、プロバイダがメッセージの配信に使用する配下のプロトコルとメカニズムに依存します。送信先オブジェクトは特定の命名規則と、プロバイダによって使用される物理的な送信先の機能に依存します。
通常、こうしたプロバイダ固有の特性には、JMS クライアントコードを JMS API 実装の詳細から独立させる働きがあります。JMS 仕様によると、JMS クライアントコードをプロバイダ非依存にするには、プロバイダ固有のオブジェクト (管理対象オブジェクト) をクライアントコード内で直接インスタンス化するのではなく、標準化された方法でアクセスする必要があります。
管理対象オブジェクトは、プロバイダ固有の実装および設定情報をカプセル化します。これらは、管理者によって作成および設定され、ネームサービスに格納され、クライアントアプリケーションから JNDI ルックアップコードを介してアクセスされます。このような方法で管理対象オブジェクトを使用すれば、JMS クライアントコードをプロバイダから独立させることができます。
JMS は、接続ファクトリオブジェクトと送信先オブジェクトという 2 つの一般的な管理対象オブジェクトを提供します。どちらのオブジェクトもプロバイダ固有の情報をカプセル化しますが、JMS クライアント内での使用方法はまったく異なっています。接続ファクトリオブジェクトは、メッセージサーバーへの接続の確立に使用されます。一方、送信先オブジェクトは、JMS メッセージサービスによって使用される物理的な送信先の識別に使用されます。
注 Sun ONE Application Serverのコンテキストでは、JMS 管理オブジェクトはその他の Application Server リソースと同様に JMS リソースとして扱われます。
メッセージ駆動型 Beans
JMS クライアントプログラミングモデル (図「JMS プログラミングモデル」) のほかに、J2EE アプリケーションのコンテキスト内で使用される、JMS API の特殊なJMS クライアントがあります。この特殊な JMS クライアントをメッセージ駆動型 Beans と呼びます。メッセージ駆動型 Beans は、EJB 2.0 仕様 (http://java.sun.com/products/ejb/docs.html) で規定されている EJB コンポーネントのファミリです。
メッセージ駆動型 Beans が必要なのは、その他の EJB コンポーネント (セッション Beans およびエンティティ Beans) が同期呼び出ししかサポートしないからです。したがって、これらの Bean のメソッドを呼び出そうとしても、リソースはメソッドが完了するまでブロックされます。これらの EJB コンポーネントは、標準 EJB インタフェース経由でしかアクセスできないので、メッセージを非同期で受信する手段を持ちません。
しかし、多くのエンタープライズアプリケーションは、非同期メッセージングのニーズを抱えています。そこで、メッセージのプロデューサに密結合することなくメッセージを受信し、処理できる EJB コンポーネントが必要になります。
MDB は、特殊な EJB コンテナ (サポートするコンポーネントに対して分散サービスを提供するソフトウェア環境) によってサポートされる特殊な EJB コンポーネントです。
   MDB メッセージコンシューマ
メッセージ駆動型 Bean: MDB は、JMS メッセージリスナーインタフェースを実装する JMS メッセージコンシューマです。その onMessage メソッド (MDB 開発者が作成する) は、MDB コンテナによってメッセージが受信された時点で呼び出されます。onMessage メソッドは、JMS MessageListerner オブジェクトの onMessage と同様に、メッセージを消費します。MDB は、単一の送信先からのメッセージを消費できます。メッセージのプロデューサは、スタンドアロンの JMS クライアントアプリケーション、Web コンポーネント、その他の EJB コンポーネントなどです。「MDB メッセージコンシューマ」の図を参照してください。
MDB コンテナ: 特別な EJB コンテナによってサポートされる MDB は、MDB インスタンスを作成し、メッセージを非同期で消費できるように設定します。これには、メッセージサービス (認証を含む) との接続設定、指定された送信先のセッションプールの作成、セッションプールおよび関連 MDB インスタンスによって受信されるメッセージの配信管理が関連します。コンテナは MDB インスタンスのライフサイクルを制御するので、着信メッセージの負荷に応じて MDB インスタンスプールを調整します。
MDB には、メッセージ消費の設定時にコンテナによって使用される管理対象オブジェクト (接続ファクトリオブジェクトと送信先オブジェクト) の JNDI ルックアップ名を指定する配備記述子が 1 つずつ割り当てられます。配備記述子には、配備ツールがコンテナの設定に使用するその他の情報も含まれています。これらのコンテナは、複数の MDB のインスタンスをサポートできません。
EJB コンテナの MDB を Sun ONE Application Server 用に設定する方法については、「メッセージ駆動型 Beans について」を参照してください。
組み込み JMS サービス
Sun ONE Application Server には、JMS メッセージングのサポート、特に MDB のサポートが組み込まれています。このサポートは、Sun ONE Message Queue と Sun ONE Application Server の密接な統合によって実現されています。これにより、ネイティブの組み込み JMS サービスが提供されます。
この節では、この組み込み JMS サービスを理解する上で重要な項目を取り上げます。
組み込み JMS サービスの管理方法については、「組み込み JMS サービスの管理」を参照してください。
Sun ONE Message Queue (MQ) について
Sun ONE Message Queue (MQ) は、JMS オープン標準を実装するエンタープライズメッセージングシステムです。MQ は、JMS プロバイダの 1 つでもあります。
MQ 製品は、信頼性の高い非同期メッセージングを行うために JMS 仕様に規定されている最小限の条件を上回る機能を備えています。これらの機能の一部 (集中管理、パフォーマンス調整、複数のメッセージングトランスポートのサポート、ユーザーの認証および承認) は、Sun ONE Application Server に統合された MQ Platform Edition でも使用できます。その他の機能 (スケーラブルなメッセージサーバーと安全なメッセージング) を利用したい場合は、MQ Enterprise Edition にアップグレードする必要があります。
「MQ システムアーキテクチャ」の図に示すように、MQ メッセージングシステムは複数の部分で構成されています。個々の部分が、信頼性の高いメッセージ配信を行うために協調して動作します。
MQ メッセージングシステムの主要部分は次のとおりです。
これらについては、次のトピックで簡単に説明します。MQ メッセージングシステムの詳細については、MQ の『管理者ガイド』を参照してください。次に URL を示します。
MQ メッセージサーバー
「MQ システムアーキテクチャ」の図のように、MQ メッセージサーバーの主要部分は、ブローカと物理的な送信先です。
ブローカ: ブローカは、MQ メッセージングシステムの配信サービスを提供します。メッセージ配信は、接続サービス、メッセージルーティング、メッセージ配信、持続性、セキュリティ、およびログを処理する多数のコンポーネントに依存しています。メッセージサーバーのスケーラビリティは、1 個以上のブローカによって実現されます。
物理的な送信先: メッセージ配信は、プロデューサクライアントからブローカによって管理されている物理的な送信先への配信と、この送信先から 1 つ以上のコンシューマクライアントへの配信の 2 段階で行われます。物理的な送信先は、ブローカの物理メモリーや固定記憶領域内の場所を表します。詳細については、「物理的な送信先」を参照してください。
   MQ システムアーキテクチャ
ブローカ
MQ メッセージングシステムにおけるメッセージ配信 (プロデューサクライアントから送信先への配信と、この送信先から 1 つ以上のコンシューマクライアントへの配信) は、ブローカ (MQ 3.01 Enterprise Edition では連携して機能するブローカクラスタ) によって行われます。ブローカがメッセージ配信を行うために必要なことは、通信チャネルとクライアントの設定、認証と承認、メッセージの適切な送信先への配信、配信の信頼性の確保、およびシステムパフォーマンスの監視用データの提供です。
この複雑な一連の機能を実行するために、ブローカは、複数のコンポーネントを使用します。これらのコンポーネントは、それぞれが、配信プロセスにおいて特別な役割を果たします。これらの内部コンポーネントを設定することにより、負荷の条件やアプリケーションの複雑さに応じて、ブローカのパフォーマンスを最適化できます。詳細については、MQ の『管理者ガイド』を参照してください。
物理的な送信先
MQ メッセージングは、2 段階のメッセージ配信に基づいています。最初のメッセージ配信は、プロデューサクライアントからブローカ上の送信先への配信です。2 番目のメッセージ配信は、ブローカ上の送信先から 1 つ以上のコンシューマクライアントへの配信です。送信先は、キュー (ポイントツーポイント配信モデル) かトピック (パブリッシュ / サブスクライブ配信モデル) のどちらかになります。これらの送信先は、物理メモリー上にあります。着信メッセージは、ここで整列化されたあと、コンシューマクライアントへ配信されます。
しかし、このような送信先は、メッセージの受信時にブローカによって自動的に作成されることもあります。
送信先キュー: 送信先キューは、ポイントツーポイントメッセージングで使用されます。この場合、メッセージは、最終的に、送信先に配信対象として登録されている複数のコンシューマのうち 1 つだけに配信されます。プロデューサクライアントから着信したメッセージは、待ち行列に入ったあと、コンシューマクライアントへ配信されます。
送信先トピック: 送信先トピックは、パブリッシュ / サブスクライブメッセージングで使用されます。この場合、メッセージは、最終的に、送信先に配信対象として登録されているすべてのコンシューマに配信されます。プロデューサから着信したメッセージは、トピックに登録されているすべてのコンシューマへ配信されます。トピックに永続的に登録されているコンシューマは、トピックにメッセージが配信された時点でアクティブになっていなくてもかまいません。メッセージはブローカが格納し、コンシューマがアクティブになった時点で配信されます。
MQ クライアントランタイム
MQ クライアントランタイムは、JMS クライアント (スタンドアロンアプリケーション、Web コンポーネント、EJB コンポーネントなど) に対して、MQ メッセージサーバーへのインタフェースを提供します。つまり、送信先にメッセージを送信したり、これらの送信先からメッセージを受信したりするクライアントに必要な、すべてのプログラミングインタフェースの実装を提供します。
「メッセージング処理」の図は、メッセージの生成時および消費時の JMS クライアントと MQ クライアントランタイム間の対話、およびメッセージの配信時の MQ クライアントランタイムと MQ メッセージサーバーの対話を表しています。
   メッセージング処理
MQ 管理対象オブジェクト
MQ 管理対象オブジェクトは、プロバイダ固有の実装および設定情報をオブジェクト内にカプセル化することにより、JMS クライアントコードをプロバイダから独立させます (「管理対象オブジェクト : プロバイダ非依存」を参照)。クライアントアプリケーションは、カプセル化された情報を含むオブジェクトを、プロバイダに依存しない方法で使用します。MQ 管理対象オブジェクトは、管理者によって作成および設定され、ネームサービスに格納され、JMS クライアントから JNDI ルックアップコードを介してアクセスされます。
管理対象の接続ファクトリオブジェクト: 接続ファクトリオブジェクトは、JMS クライアント (スタンドアロンアプリケーション、Web コンポーネント、EJB コンポーネントなど) と MQ メッセージサーバー間の物理接続を作成するときに使用されます。接続ファクトリオブジェクトは、ブローカ内で物理的に表されることはありません。接続ファクトリオブジェクトは、JMS クライアントとブローカを接続するために使用されるだけです。また、接続の動作や、ブローカにアクセスするために接続を使用するクライアントランタイムの動作を指定するためにも使用されます。そのため、MQ 接続ファクトリは、MQ システムのパフォーマンス調整に使用する多数の設定可能な属性を備えています。
管理対象の送信先オブジェクト: 管理対象の送信先オブジェクト (キューまたはトピック) は、ブローカ内の物理的な送信先 (物理的なキューまたはトピック) を表します。公開指定された管理対象オブジェクトは、この送信先に対応付けられます。管理対象の送信先オブジェクトを作成することにより、JMS クライアント (メッセージコンシューマやメッセージプロデューサ) は対応する物理的な送信先にアクセスできるようになります。
MQ 管理ツール
MQ 管理ツールには、コマンド行ユーティリティと、グラフィカルユーザーインタフェース (GUI) である管理コンソールの 2 種類があります。
管理コンソール: 管理コンソールを使って、ブローカに接続して管理したり、ブローカ上に物理的な送信先を作成したりできます。また、オブジェクトストアに接続して、その管理対象オブジェクトを追加、更新、または削除することができます。管理コンソールでは実行できないタスクもあります。該当する主なタスクは、ブローカの起動、ブローカクラスタの作成、専門性の高い一部のブローカプロパティの設定、ユーザーデータベースの管理です。
コマンド行ユーティリティ: MQ ユーティリティでは、管理コンソールで実行できるすべてのタスクを実行できます。さらに、ブローカの起動および管理、専門性の高い一部のブローカのプロパティの設定、MQ ユーザーデータベースの管理も可能です。
MQ と Sun ONE Application Server の統合
MQ Platform Edition は、Sun ONE Application Server のインストール時に自動的にインストールされます。詳細は、『Sun ONE Application Server インストールガイド』を参照してください。
MQ をインストールすると、Sun ONE Application Server に、任意の数のSun ONE Application Serverインスタンスをサポートする JMS メッセージングシステムが提供されます。各サーバーインスタンスには、デフォルトで、そのインスタンスで実行中のすべての JMS クライアントをサポートする組み込み JMS サービスが割り当てられています。
ここでは次の項目について説明します。
組み込み JMS サービスは、Sun ONE Application Server 管理ツールで管理できます (「組み込み JMS サービスの管理」を参照)。
組み込み JMS サービスのアーキテクチャ
組み込み JMS サービス (「組み込み MQ メッセージングシステム」の図を参照) は、次の点を除いて、通常の MQ メッセージングシステム (「MQ システムアーキテクチャ」の図を参照) と同じです。
   組み込み MQ メッセージングシステム
MQ メッセージサーバー: Sun ONE Application Serverインスタンスは、それぞれ独自の組み込み JMS サービスに関連付けられています。組み込み JMS サービスは、1 つのブローカメッセージサーバーを利用します。上の図の「組み込み MQ メッセージングシステム」のように、ブローカはSun ONE Application Serverインスタンスの外部の独立したプロセス内で実行されます。デフォルトでは、ブローカインスタンス (組み込み JMS サービス) は、関連サーバーインスタンスの起動時に起動し、関連サーバーインスタンスの停止時に停止します。サーバーインスタンスの組み込み JMS サービスの設定情報は、Sun ONE Application Server 設定ストア (server.xml ファイル) に記録されます。この情報の変更方法については、「JMS サービスの設定」を参照してください。
MQ クライアントランタイム: JMS サービスのクライアントランタイムは、JMS API をサポートするライブラリのセットです。サーバーインスタンス内で実行されるすべての JMS クライアント (MDB を含む JMS クライアントコンポーネント) が、このライブラリセットにアクセスできます。
MQ 管理対象オブジェクト: 組み込み JMS サービスは、Sun ONE Application Server が提供するオブジェクトストアを使用します。それぞれのサーバーインスタンスが独自のオブジェクトストアを持ちます。JMS サービスは、このオブジェクトストア内に管理対象オブジェクト (接続ファクトリオブジェクトおよび送信先オブジェクト) を格納します。これらの管理対象オブジェクトリソースの作成方法については、「管理対象オブジェクトリソースの管理」を参照してください。JMS クライアントは、JNDI ルックアップコードを使ってこれらのオブジェクトにアクセスします。
Sun ONE Application Server の管理: Sun ONE Application Server の管理インタフェースとコマンド行ユーティリティは、MQ 管理機能の限定されたサブセットを実装します。管理インタフェースとコマンド行を使って、組み込み JMS サービスを設定できます。物理的な送信先の作成および削除、JMS クライアントが JMS メッセージング処理に使用する管理対象オブジェクトリソースの作成および削除も可能です。しかし、ブローカプロパティの設定、MQ クライアントラインタイムの調整、MQ ユーザーリポジトリの変更、MQ セキュリティ管理といった高度な管理タスクは、これらの管理ツールでは実行できません (または処理が複雑)。組み込み JMS サービスの高度な管理タスクを実行したい場合は、MQ のインストール時にインストールされた管理ツールを使用し、MQ の『管理者ガイド』の説明に従ってください。MQ と Sun ONE Application Server の管理機能については、「Sun ONE Message Queue と Sun ONE Application Server の管理機能の比較」の対照表を参照してください。
組み込み JMS サービスの無効化
デフォルトでは、組み込み JMS サービス (MQ ブローカ) は、Sun ONE Application Serverインスタンスの起動時に起動します。しかし、サーバーインスタンスで JMS メッセージングをサポートする必要がない場合や、サーバーインスタンスが外部 JMS サービスを使用する場合など、サーバーインスタンスの起動時に JMS サービスを自動的に起動したくない場合もあります。この場合は、「JMS サービスの設定」の説明に従って、組み込み JMS サービスを無効にします。
外部 JMS サービスは、Sun ONE Application Server 内で制御されないメッセージングシステムです。MQ、すなわちネイティブ JMS プロバイダの場合は、MQ 管理ツールを使って MQ メッセージサーバーを個別に起動し、管理します。サーバーインスタンス上で稼働している JMS クライアントも、MQ 管理対象オブジェクトを使って MQ メッセージサーバーにアクセスできます。これらの管理対象オブジェクトは、各アプリケーションサーバーインスタンスに関連づけられたオブジェクトストアに格納されるか、MQ 管理ツールによって管理される独立したオブジェクトストア (必要に応じて複数のサーバーインスタンスが共有します) に格納されます。
サーバーインスタンスは、さまざまな方法で外部 JMS サービスを使用します。もっとも典型的な例は、別々のサーバーインスタンス内の JMS クライアントから同一の物理的な送信先にアクセスする必要がある場合です。この場合、すべてのサーバーインスタンスが同一のメッセージサーバーにアクセスする必要があります。このためには、すべてのサーバーインスタンスの組み込み JMS サービスを無効にします。さらに、すべての JMS クライアントが適切な JNDI ルックアップを実行して外部 JMS サービスにアクセスするように設定します。なお、外部 JMS サービス (メッセージサーバーの管理、物理的な送信先の作成、必要なすべての管理対象オブジェクトの作成) は、外部 JMS サービスプロバイダの管理ツールを使って個別に管理されます。
複数のアプリケーションサーバーインスタンスが 1 つの MQ ブローカインスタンスを共有するように設定する方法は、次のとおりです。
- すべてのサーバーインスタンス上の JMS サービスを無効化します。
- すべてのサーバーインスタンスで共有 MQ ブローカを個別に管理します。つまり、外部サービスを管理する管理ツールを使ってブローカを起動、停止します。また、物理的な送信先を Sun ONE Application Server から独立して管理する必要があります。
- 各サーバーインスタンスの接続ファクトリ JMS リソースが外部 MQ ブローカを参照するように設定します (imqBrokerHostName プロパティと imqBrokerHostPort プロパティを適切に設定する)。
- JMS アプリケーションを Sun ONE Application Server に配備するときは、この接続ファクトリリソースを使います。
外部 JMS サービスと組み込み JMS サービスを同時に実行できます。サーバーインスタンス内の JMS クライアントは、必要な JMS サービスにアクセスできます。
複数のサーバーインスタンスに同一の組み込み JMS サービスを共有させる、すなわち、JMS サービスを 1 つだけ有効にして残りは無効にするという方法はお勧めしません。有効になっているこの JMS サービスは、関連サーバーインスタンスが実行されているときしか実行されないので、状況に対処するのが非常に困難になります。
組み込み JMS サービスを無効にしたら、その JMS サービスに関連付けられている管理タスクも、実行できないように無効にします。また、外部 JMS サービスをサポートするために必要なすべての管理タスクは、その外部サービスの管理用ツールで実行する必要があります。
組み込み JMS サービスの管理
この節では、組み込み JMS サービスの管理について取り上げます。組み込み JMS サービスの管理は、サーバーインスタンス単位で行います。
組み込み JMS サービスの管理タスクは次のとおりです。
管理には、Sun ONE Application Server の管理インタフェースまたはコマンド行ユーティリティを使用します。これらの管理ツールと MQ 管理ツールについては、「Sun ONE Message Queue と Sun ONE Application Server の管理機能の比較」の表を参照してください。
次に、Sun ONE Application Server の管理インタフェースを使用して、 JMS サービスの管理タスクを実行する方法について説明します。
JMS サービスの設定
組み込み JMS サービスには、インストール時に多数の JMS サービスプロパティが設定されます。JMS サービスを設定すると、これらのプロパティのデフォルト値を変更できます。
JMS サービスプロパティについては、「JMS サービスプロパティ」の表を参照してください。
   JMS サービスプロパティ
プロパティ
説明
デフォルト値
ログレベル
Sun ONE Application Server ログファイルに書き込むログ情報のレベル。詳細については、「ログの使用」を参照してください。
DEBUG_HIGH
ポート
組み込み JMS サービスを提供するブローカインスタンスのプライマリポート番号。デフォルトでは、組み込み JMS サービスはデフォルトのプライマリポート番号を使用する。ただし、このポートがほかのソフトウェアと競合する場合や、複数のSun ONE Application Serverインスタンスを起動する場合は、それぞれに固有のプライマリポート番号を指定することが必要
JMS サービスのインストール時に割り当てられたポート番号を後から別のサービスが使用すると、ポートが競合する可能性がある。この場合は、JMS サービスに別のポート番号を割り当てる必要がある
7676
管理者のユーザー名 /パスワード
物理的な送信先の管理など、ブローカ管理タスクの実行に必要なユーザー名とパスワード (「物理的な送信先の管理」を参照)。セキュリティ上の理由からブローカインスタンスへの管理者としてのアクセスを制限したい場合 (デフォルトではすべてのユーザーがアクセス可能) は、MQ の『管理者ガイド』の説明に従って、ブローカのユーザーリポジトリ内に適切なエントリを最初に作成する。さらに、このプロパティに管理者のユーザー名とパスワードに対応する値を指定する
admin/admin
起動タイムアウト
サーバーインスタンスが JMS サービスの起動を待機する時間を秒単位で指定する。このタイムアウトが経過すると、サーバーインスタンスの起動は中断される
60
起動引数
JMS サービスの起動時に使用される引数を指定する。imqbroker コマンドの起動引数とその指定方法については、MQ の『管理者ガイド』を参照。なお、-name 引数と -port 引数は指定しても無視される
起動的に有効
サーバーインスタンスの起動時に、組み込み JMS サービスを起動するかどうかを指定する。JMS メッセージングをサポートしない場合や、外部 JMS メッセージサービスを使用する場合は、このプロパティの値を FALSE にする
TRUE
組み込み JMS サービスは、対応するサーバーインスタンスを起動する前に設定できます。サーバーインスタンスの実行中に、組み込み JMS サービスの設定に変更を加えた場合、変更内容を有効にするには、サーバーインスタンスを停止して再起動する必要があります。
組み込み JMS サービスを設定するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「サービス」リンクを選択します。
右側のペインに JMS サービスの設定画面が表示されます。
   JMS サービスの設定画面
- 「JMS サービスプロパティ」の表を参照して、目的のプロパティの値を変更します。
- 「保存」ボタンをクリックします。
JMS サービス画面が更新されます。
物理的な送信先の管理
JMS メッセージングでは、JMS プロデューサはメッセージサービス上の物理的な送信先にメッセージを送信します。その後、この送信先から JMS コンシューマにメッセージが振り分けられます。
組み込み型の JMS サービスでは、こうした物理的な送信先は明示的に作成できますが、メッセージの受信時に JMS サービス (MQ ブローカ) によって自動的に作成することもできます。通常は、メッセージングアプリケーションに必要な物理的な送信先を明示的に作成したほうが、メッセージングシステムとそのリソースを制御しやすくなります。これらの送信先は、不要になったら削除できます。
組み込み JMS サービスの物理的な送信先を作成または削除するためには、JMS サービスが実行されていて、 (組み込み JMS サービスを設定する時に指定した) 管理者のユーザー名とパスワードがブローカのユーザーリポジトリ内の有効なエントリと一致している必要があります。「JMS サービスプロパティ」 の表を参照してください。
管理インタフェースでは、組み込み JMS サービス上の物理的な送信先に対して、次の管理タスクを実行できます。
送信先キューまたは送信先トピックの作成
送信先キューまたは送信先トピックを作成するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「サービス」リンクを選択します。
- 「物理送信先」リンクを選択します。
右側のペインに「物理送信先」画面が表示されます。
- 「新規」ボタンをクリックします。
右側のペインに「物理送信先 : 新規」画面が表示されます。
   「物理送信先 : 新規」画面
- 物理的な送信先の名前を入力します。
- 「タイプ」プルダウンから queue または topic を選択します。
- 「了解」ボタンをクリックします。
右側のペインが更新され、既存の送信先キューと送信先トピックのリストに新しいキューまたはトピックが表示されます。
物理的な送信先の管理
既存の送信先キューや送信先トピックを一覧表示するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「サービス」リンクを選択します。
- 「物理送信先」リンクを選択します。
右側のペインに現在の物理送信先が表示されます。
物理的な送信先の削除
必要に応じて、送信先キューまたは送信先トピックを削除できます。
物理的な送信先を削除するには、次の手順に従います。
- 「物理的な送信先の管理」の手順に従って、既存の送信先を一覧表示します。
- 削除したい送信先の選択ボックスをクリックします。
   JMS の「物理送信先 (Physical Destinations)」画面
- 「削除」ボタンをクリックすると、選択された送信先が削除されます。
リストが更新され、残りの送信先が表示されます。
管理対象オブジェクトリソースの管理
Sun ONE Application Server は、MQ 管理対象オブジェクトを JMS リソースと見なします。JMS クライアントは、これらのオブジェクトを使って JMS サービス (組み込み型サービスまたは外部サービス) にアクセスします。
J2EE コンポーネントは、管理対象の接続ファクトリオブジェクトリソースと送信先オブジェクトリソースを使って JMS サービスへの接続を確立し、サービス上の物理的な送信先とメッセージをやりとりします (「MQ 管理対象オブジェクト」を参照)。
管理対象オブジェクトリソースの作成には、JMS サービスは直接関わらないため、JMS サービスを有効にする必要はありません。また、サーバーインスタンスの管理対象オブジェクトリソースを作成するために、有効なユーザー名とパスワード (「JMS サービスプロパティ」の表を参照) を入力する必要もありません。
管理対象オブジェクトの属性
JMS メッセージングをサポートするには、サーバーインスタンスで実行中のすべての JMS クライアントに必要な管理対象オブジェクトリソースを作成します。少なくとも、各管理対象オブジェクトリソースの JNDI ルックアップ名、型 (接続ファクトリ、キュー、またはトピック)、説明 (オプション)、リソースが有効であるかどうかを指定する必要があります。その他の属性については、次の項で説明します。
送信先 (キューまたはトピック)
管理対象のキューオブジェクトまたはトピックオブジェクトの場合は、対応する物理的な送信先の名前も指定する必要があります。
接続ファクトリ
接続ファクトリの管理対象オブジェクトの場合、管理インタフェースは、組み込み JMS サービスを使用する接続ファクトリを作成します。この組み込み JMS サービスは、ホスト名がローカルホストで、JMS サービスの設定時にポート番号が設定されるブローカインスタンスです (「JMS サービスプロパティ」の表を参照)。
ただし、特定のサーバーインスタンスで JMS サービスが無効になっている場合、このサーバーインスタンスでサポートされるすべての JMS クライアントは、外部 JMS サービスを使用しなければなりません。この外部 JMS サービスへの接続の確立に使われる接続ファクトリを作成するときは、適切なブローカインスタンスのホスト名とポート番号を示す属性を設定する必要があります。
接続ファクトリの管理対象オブジェクトには、サーバーインスタンスの MQ クライアントランタイムの調整に使われる追加属性があります。これについては、MQ の『開発者ガイド』を参照してください。
管理インタフェースによって作成された管理対象の接続ファクトリオブジェクトは、分散トランザクションマネージャをサポートします。
管理対象オブジェクトリソースの管理タスク
管理インタフェースでは、管理対象オブジェクトリソースに対して次の管理タスクを実行できます。
- キューオブジェクトまたはトピックオブジェクトの作成 (送信先リソース)
- 管理対象の ConnectionFactory オブジェクトの作成
- 管理対象オブジェクトリソースの一覧表示
- 管理対象オブジェクトリソースの削除
キューオブジェクトまたはトピックオブジェクトの作成 (送信先リソース)
管理対象のキューオブジェクトまたはトピックオブジェクトを作成するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「送信先リソース」リンクを選択します。
右側のペインに「送信先リソース」画面が表示されます。
- 「新規」ボタンをクリックします。
「送信先リソース : 新規」画面が表示されます。
   「送信先リソース : 新規」画面
- 管理対象の送信先オブジェクトの JNDI ルックアップ名を入力します。
- プルダウンリストからオブジェクトタイプとして「Queue」または「Topic」を選択します。
- 「了解」ボタンをクリックします。
右側のペインに「送信先リソース : 新規」画面が再表示されます。
また、オブジェクトの送信先名を imqDestinationName プロパティに指定する必要があります。このプロパティの値は、物理的な送信先名と一致している必要があります。
このプロパティの値を変更するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「送信先リソース」フォルダを開きます。
- 編集する送信先リソースを選択します。
右側のペインに「送信先リソース」画面が表示されます。
- 右側のペインの「プロパティ」をクリックします。
「プロパティを編集」画面が表示されます。
- 「名前」フィールドに imqDestinationName と入力します。
- 「値」フィールドに物理的な送信先名を入力します。
- 「了解」をクリックします。
右側のペインに「送信先リソース」画面が再表示されます。
管理対象の ConnectionFactory オブジェクトの作成
管理対象のキュー接続ファクトリオブジェクトまたはトピック接続ファクトリオブジェクトを作成するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「接続ファクトリ」リンクを選択します。
右側のペインに「接続ファクトリ」画面が表示されます。
- 「新規」ボタンをクリックします。
「接続ファクトリ : 新規」画面が表示されます。
   「接続ファクトリ : 新規」画面
- 管理対象の接続ファクトリオブジェクトの JNDI ルックアップ名を入力します。
- プルダウンリストから接続ファクトリオブジェクトタイプを選択します。
- 「了解」ボタンをクリックします。
右側のペインの「接続ファクトリ」画面のリストに、新しく作成された接続ファクトリオブジェクトが再表示されます。
組み込み JMS サービス以外のブローカへの接続を確立する接続ファクトリの場合は、imqBrokerHostName プロパティと imqBrokerHostPort プロパティに適切な値を設定する必要があります。
これらのプロパティの値を変更するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「接続ファクトリ」フォルダを開きます。
- 編集する接続ファクトリリソースを選択します。
右側のペインに「接続ファクトリ」画面が表示されます。
- 右側のペインの「プロパティ」をクリックします。
「プロパティを編集」画面が表示されます。
- 「名前」フィールドに imqBrokerHostName と入力します。
- 「値」フィールドにプロパティの値を入力します。
- 「名前」フィールドに imqBrokerHostPort と入力します。
- 「値」フィールドにプロパティの値を入力します。
- 「了解」をクリックします。
右側のペインに「接続ファクトリ」画面が再表示されます。
管理対象オブジェクトリソースの一覧表示
既存の管理対象オブジェクトを一覧表示するには、次の手順に従います。
- 管理インタフェースを開きます。
- 左側のペインのサーバーインスタンスを開きます。
- JMS フォルダを開きます。
- 「送信先リソース」リンクまたは「接続ファクトリ」リンクを選択します。
現在の管理対象送信先オブジェクトまたは管理対象接続ファクトリオブジェクトが表示されます。
管理対象オブジェクトリソースの削除
管理対象オブジェクトリソースを削除するには、次の手順に従います。
- 「管理対象オブジェクトリソースの一覧表示」の手順に従って、既存の管理対象オブジェクトリソースを一覧表示します。
右側のペインに現在の管理対象オブジェクトリソースが表示されます。
- 削除したいオブジェクトの「選択」ボックスをクリックします。
   「JMS 接続ファクトリ」画面が更新されます。
- 「削除」ボタンをクリックすると、選択されたオブジェクトが削除されます。
リストが更新され、残りの管理対象オブジェクトリソースが表示されます。
コマンド行インタフェースによる組み込み JMS サービスの管理
Sun ONE Application Server には、コマンド行ユーティリティ asadmin が用意されています。このユーティリティを使って、管理インタフェースと同じタスクを実行できます。
組み込み JMS サービスを設定、管理するには、次の asadmin コマンドを使います。
これらのコマンドの構文については、asadmin のオンラインヘルプを参照してください。asadmin の詳細と、jms-service および jms-resource の属性リストについては、「コマンド行インタフェースの使用」を参照してください。