JMS 仕様は、あらゆる可能性を網羅しようとせずに、既存の MOM システムの多くの要素を結合した標準を作成しました。むしろ、異種および将来の成長に対応できる拡張可能な方式を確立しようとしました。JMS では、多くのメッセージング要素の定義と実装を、個々のプロバイダに任せています。これらの要素には、ロードバランス、標準エラーメッセージ、管理 API、セキュリティー、基本的なワイヤプロトコル、およびメッセージストアがあります。次の節の「Message Queue: 要素と機能 」では、Message Queue で、これらの要素の多くがどのように実装され、JMS 仕様がどのように拡張されているかについて説明します。
JMS で完全には規定されていない 2 つのメッセージング要素が、コネクションファクトリと送信先です。これらは JMS プログラミングモデルで不可欠な要素ですが、プロバイダによるこれらのオブジェクトの定義および管理方法には、非常に多くの相違点および予想される相違点があったため、共通の定義の作成は不可能であり、また望ましいことでもありませんでした。したがって、これらの 2 つのオブジェクトは、プログラムによって作成されるのではなく、通常、管理ツールを使用して、作成および設定されます。次にこれらのオブジェクトはオブジェクトストアに保存され、JNDI 検索を通じて JMS クライアントからアクセスされます。
コネクションファクトリ管理対象オブジェクトは、クライアントからブローカへのコネクションを生成するために使用されます。これらのオブジェクトは、メッセージング動作のある側面を制御する、プロバイダ固有の情報をカプセル化します。たとえば、コネクション処理、クライアントの識別、メッセージヘッダーのオーバーライド、信頼性、フロー制御などです。特定のコネクションファクトリから生成したすべてのコネクションは、そのファクトリに対して設定された動作を行います。
送信先管理対象オブジェクトは、ブローカ上の物理的な送信先を参照するために使用されます。プロバイダ固有の命名 (アドレス指定構文) 規則をカプセル化し、送信先を使用するメッセージングドメインが、キューかトピックかを指定します。
JMS クライアントは、管理対象オブジェクトの検索には必要ありません。これらのオブジェクトはプログラムによって作成された後、ブローカのメモリーに保存されます。プロトタイピングを迅速に行うには、これらのオブジェクトをプログラムによって作成する方法が最も簡単です。ただし、本稼働環境に配備する場合は、中央のリポジトリから管理対象オブジェクトを検索した方が、メッセージング動作の制御または管理をより簡単に行えます。
コネクションファクトリオブジェクトに対して管理オブジェクトを使用することによって、管理者は、これらのオブジェクトを設定し直して、メッセージングパフォーマンスを調整できます。コーディングし直さずに、パフォーマンスを改善できます。
物理的な送信先に対して管理オブジェクトを使用した場合、管理者は、設定済みのオブジェクトにクライアントをアクセスさせることにより、ブローカ上で送信先が拡大しないよう制御できます。
管理対象オブジェクトにより、開発者は、プロバイダ固有の実装詳細を意識せずに済みます。あるプロバイダ用に開発するコードが、ほとんどあるいはまったく変更せずに、ほかのプロバイダへ移植できるようになります。
管理対象オブジェクトの使用により、図 1–5 に示す基本的な JMS アプリケーションの図式に最後の要素が加わります。
図 1–5 では、メッセージプロデューサとメッセージコンシューマが、送信先管理対象オブジェクトを使用して、それに対応する物理的な送信先にアクセスする様子を示しています。番号の付いた手順は、このメカニズムを使用してメッセージを送受信する場合に、管理者およびクライアントアプリケーションが行う必要のある操作を指しています。
管理者が、ブローカ上に物理的な送信先を作成します。
管理者が、送信先管理対象オブジェクトを作成し、そのオブジェクトが対応する物理的な送信先の名前とそのタイプ (キューまたはトピック) を指定して、オブジェクトを設定します。
メッセージプロデューサが、JNDI 検索呼び出しを使用して、送信先管理対象オブジェクトを検索します。
メッセージプロデューサが、送信先にメッセージを送信します。
メッセージコンシューマが、メッセージを取得できると予想する送信先管理対象オブジェクトを検索します。
メッセージコンシューマが、送信先からメッセージを取得します。
コネクションファクトリ管理対象オブジェクトを使用するプロセスも同様です。管理者は、管理ツールを使用して、コネクションファクトリ管理対象オブジェクトを作成および設定します。クライアントは、コネクションファクトリオブジェクトを検索し、そのオブジェクトを使用してコネクションを作成します。
管理対象オブジェクトを使用すると、メッセージングプロセスの手順が増えますが、同時に、メッセージングアプリケーションの堅牢性と移植性も高まります。