概念: Java Messaging Service (JMS)
トピック
概論
Java Messaging System (JMS) は、エンタープライズ全体でのビジネス・データとイベントの非同期通信に対するクロス・プラットフォームの標準を提供します。通信は一般に、複数のプロセスとコンピューターにまたがっています。アプリケーション内のオブジェクトは、一般に異なるコンピューター上で稼動し、JMS で定義されたインターフェースの標準セットを介してメッセージ指向ミドルウェア (MOM) のサービスへのアクセスによって通信します。

JMS は、Java プログラマー (メッセージ・プロジューサーとコンシューマーを実装する) を MOM プロバイダーから分離させるインターフェースのセットを提供します。
このページでは、JMS の主な概念と一般的な使用について説明します。
メッセージ
メッセージは、ビジネス・データの独立したパッケージです。次の 3 つの部分があります。
- ヘッダー: ネットワークのルーティング情報とメッセージ識別子を含みます。
- プロパティー: メッセージのメタデータを含みます。JMS はプロパティーのいくつかを設定しますが、アプリケーション・プログラマーも独自にプロパティーを追加できます。
- ペイロード: 実際のビジネス・データを含みます。ペイロードは、アプリケーション・プログラマーが完全に制御します。

JMS では、メッセージはインターフェース javax.jms.Message を実装するオブジェクトでカプセル化されます。Java プログラムは、次の図で示すように、このインターフェースを介して各部分にアクセスできます。ペイロードにはいくつかのバリエーションがありますが、それについては後で説明します。

ヘッダーは、常に存在する必要があるメッセージのプロパティーを含みます。ヘッダーからは、次のプロパティーが使用可能です。
- MessageID
- Timestamp
- CorrelationID
- ReplyTo
- Destination
- DeliveryMode
- Redelivered
- Type
- Expiration
- Priority
プロパティーは、アプリケーション・プログラマーによってメッセージのメタデータを提供するために使用できます。プロパティーは、名前と値の組み合わせの任意のセットから構成されます。
JMS でサポートされるペイロードには 6 種類あります。
- Text メッセージ
- Object メッセージ
- Byte メッセージ
- Map メッセージ
- Stream メッセージ
- Message (body は存在しない)
ペイロードの型はクラス階層に反映され、そこでインターフェースが javax.jms.Message を拡張します。次のクラス図では、頻繁に使用されるテキスト、オブジェクト、バイトのメッセージを示します。通常、テキスト・メッセージは XML データを伝達します。

宛先
JMS は、宛先の概念を定義します。メッセージは、宛先との間で送受信されます。宛先には、次の 2 つの形式があります。
キューは、メッセージが 1 つの受信側のみで処理される場合に使用されるメッセージ宛先です。メッセージを郵便の送信にたとえると、キューは特定の受信者の郵便受けです。キューを使用した通信をポイント・ツー・ポイント通信と呼びます。
トピックは、複数の受信側がメッセージを受信する必要がある場合に使用されるメッセージ宛先であり、それぞれの受信側は特定の種類のメッセージを受信する必要があります。これは、上記のたとえでいう郵便ではなく、新聞に記事を書くことと同じだといえます。つまり、1 つのメッセージは複数の受信側によって参照されます。この種の設計をパブリッシュ・サブスクライブ・モデルと呼びます。
メッセージ配信
メッセージの配信は、次の 2 つの方法で実行されます。
永続的な配信は、ファイルやデータベースへのメッセージの保管を含み、これによって配信が保証されます。非永続的な配信は、パフォーマンスを向上させ、保管のオーバーヘッドを削減しますが、メッセージが配信される保証はありません。JMS を使用する多くのアプリケーションでは、永続的な配信が一般に選択されています。
JMS クライアント
JMS クライアントは、JMS を使用する Java オブジェクトです。次の 2 つのロールが定義されています。
- メッセージ・プロジューサー: メッセージを作成し、送信する Java プログラム。
- メッセージ・コンシューマー: メッセージを受信する Java プログラム。
次の図は、プロジューサー、コンシューマー、JMS プロバイダーのやりとりの概要を示します。

メッセージ・プロジューサーは、JMS 実装にアクセスする任意の Java クラスです。メッセージ・プロジューサーは、メッセージを作成し、送信します。
メッセージ・コンシューマーは、JMS 実装にアクセスする任意の Java クラスです。メッセージ・コンシューマーは、メッセージを受信し、処理します。
JMS クライアントは、JMS にアクセスするインターフェースのセットを使用します。JMS インターフェースを実装するオブジェクトは、ファクトリーのセットを介して作成されます。初期ファクトリーは、ConnectionFactory です。コネクション・ファクトリーは、JNDI を介してルックアップされます。JMS クライアントは、コネクション・ファクトリーを使用して、コネクション・オブジェクトを作成します。コネクション・オブジェクトは、ほかの JMS オブジェクトのファクトリーとして使用されるセッション・オブジェクトの作成に使用されます。次の図は、キューとトピックの詳細からの抽象化によって、ファクトリー間の概念上の主な関係を示します。

コネクション・ファクトリー、コネクション、セッションは次の 2 つの形式になります。キュー用とトピック用です。次のクラス図は、主な JMS 概念のインターフェース階層を示します。

JMS プロバイダー
JMS プロバイダーは、JMS 仕様を満たす実装です。JMS プロバイダーは、メッセージの受信、永続化、配信を担当します。
詳細情報
JMS について詳しくは、http://java.sun.com/products/jms/ を参照してください。
|