パッケージ jakarta.jms
Jakarta Messaging API は、Java プログラムがエンタープライズメッセージングシステムのメッセージを作成、送信、受信、読み取るための一般的な方法を提供します。
Jakarta Messaging Applications
Jakarta Messaging アプリケーションは、次の部分で構成されています。
- Jakarta Messaging プロバイダー - フル機能のメッセージング製品に必要な他の管理および制御機能に加えて、Jakarta Messaging API を実装するメッセージングシステム
- Jakarta Messaging クライアント - メッセージを送受信する Java 言語プログラム
- メッセージ - アプリケーションのクライアント間で情報を通信するために使用されるオブジェクト
- 管理対象オブジェクト - クライアントが Jakarta Messaging プロバイダーと移植可能に対話するために検索および使用するプロバイダー固有のオブジェクト
- 非 Jakarta メッセージングクライアント -Jakarta Messaging API の代わりにメッセージシステムのネイティブクライアント API を使用するクライアント。アプリケーションが Jakarta Messaging API の可用性よりも前の場合、Jakarta Messaging クライアントと非 Jakarta メッセージングクライアントの両方が含まれる可能性があります。
管理
Jakarta Messaging プロバイダーは、基盤となるメッセージングテクノロジーの実装が大きく異なります。Jakarta Messaging プロバイダーのシステムのインストール方法と管理方法にも大きな違いがあります。
Jakarta Messaging クライアントを移植可能にするには、プロバイダーのこれらの独自の側面から分離する必要があります。これは、プロバイダーの管理者によって作成およびカスタマイズされ、後でクライアントによって使用される Jakarta Messaging 管理対象オブジェクトを定義することによって行われます。クライアントは、移植可能な Jakarta Messaging インターフェースを介して使用します。管理者は、プロバイダー固有の機能を使用して作成します。
Jakarta Messaging 管理対象オブジェクトには次の 2 つの型があります。
ConnectionFactory
- クライアントが Jakarta Messaging プロバイダーとの接続を作成するために使用するオブジェクトDestination
- クライアントが送信するメッセージの宛先と受信するメッセージのソースを指定するために使用するオブジェクト
管理対象オブジェクトは、管理者によって JNDI(Java Naming and Directory Interface)名前空間に配置されます。Jakarta Messaging クライアントは通常、ドキュメントに、必要な Jakarta Messaging 管理対象オブジェクトと、これらのオブジェクトの JNDI 名をどのように提供するかを記載しています。
2 つのメッセージングスタイル
Jakarta Messaging は、次の 2 つのメッセージングスタイルをサポートしています。
- キューを使用したポイントツーポイント(PTP)メッセージング
- トピックを使用したパブリッシュアンドサブスクライブ(pub/ サブ)メッセージング
これらの 2 つのスタイルは、現在使用されているメッセージングへの 2 つの主要なアプローチを表しています。
Jakarta Messaging API
歴史的な理由から、Jakarta Messaging は、メッセージを送受信するための 4 つの代替インターフェースセットを提供します。
- Java Message Service 1.0 は、2 つのドメイン固有 API を定義しました。1 つはポイントツーポイントメッセージング(キュー)用で、もう 1 つは pub/sub(トピック)用です。これらは下位互換性の理由から Jakarta Messaging の一部のままですが、後の API によって完全に置き換えられると見なす必要があります。
- Java メッセージサービス 1.1 は、ポイントツーポイントメッセージングと pub/ サブメッセージングの両方に使用できる単一のインターフェースセットを提供する新しい統合 API を導入しました。これは、ここではクラシック API と呼ばれます。
- Jakarta Messaging 2.0 は、従来の API のすべての機能を提供するが、必要なインターフェースが少なく、使用が簡単な簡略化された API を導入しています。
各 API は、Jakarta Messaging プロバイダーに接続し、メッセージを送受信するための異なるインターフェースのセットを提供します。ただし、これらはすべて、メッセージとメッセージの宛先を表し、さまざまなユーティリティ機能を提供するための共通のインターフェースセットを共有しています。
すべてのインターフェースは jakarta.jms
パッケージに含まれています。
Interfaces common to multiple API
複数の API に共通する主なインターフェースは次のとおりです。
Message
、BytesMessage
、MapMessage
、ObjectMessage
、StreamMessage
、TextMessage
- Jakarta Messaging プロバイダーとの間で送受信されるメッセージ。Queue
- ポイントツーポイントメッセージングのメッセージ宛先の ID をカプセル化する管理対象オブジェクトTopic
- pub/ サブメッセージングのメッセージ宛先の ID をカプセル化する管理対象オブジェクト。Destination
-Queue
とTopic
の一般的なスーパー型
Classic API interfaces
従来の API によって提供される主なインターフェースは次のとおりです。ConnectionFactory
- クライアントがConnection
を作成するために使用する管理対象オブジェクト。このインターフェースは、簡略化された API でも使用されます。Connection
- Jakarta Messaging プロバイダーへのアクティブな接続Session
- メッセージを送受信するためのシングルスレッドコンテキストMessageProducer
- キューまたはトピックにメッセージを送信するために使用されるセッションによって作成されたオブジェクトMessageConsumer
- キューまたはトピックに送信されたメッセージの受信に使用されるセッションによって作成されたオブジェクト
Simplified API interfaces
簡略化された API は、従来の API と同じメッセージング機能を提供しますが、必要なインターフェースが少なく、使用が簡単です。簡略化された API によって提供される主なインターフェースは次のとおりです。ConnectionFactory
- クライアントがJMSContext
を作成するために使用する管理対象オブジェクト。このインターフェースは、従来の API でも使用されます。JMSContext
- Jakarta Messaging プロバイダーへのアクティブな接続と、メッセージを送受信するためのシングルスレッドコンテキストJMSProducer
- キューまたはトピックにメッセージを送信するために使用されるJMSContext
によって作成されたオブジェクトJMSConsumer
- キューまたはトピックに送信されたメッセージを受信するために使用されるJMSContext
によって作成されたオブジェクト
Legacy domain-specific API interfaces
ドメイン固有の API は、下位互換性の理由から Jakarta Messaging の一部のままですが、従来の単純化された API に完全に取って代わられると見なす必要があります。
ポイントツーポイントメッセージング用のドメイン固有 API によって提供される主なインターフェースは次のとおりです。
QueueConnectionFactory
- クライアントがQueueConnection
を作成するために使用する管理対象オブジェクト。QueueConnection
- Jakarta Messaging プロバイダーへのアクティブな接続QueueSession
- メッセージを送受信するためのシングルスレッドコンテキストQueueSender
- キューにメッセージを送信するために使用されるQueueSession
によって作成されたオブジェクトQueueReceiver
- キューに送信されたメッセージの受信に使用されるQueueSession
によって作成されたオブジェクト
TopicConnectionFactory
- クライアントがTopicConnection
を作成するために使用する管理対象オブジェクト。TopicConnection
- Jakarta Messaging プロバイダーへのアクティブな接続TopicSession
- メッセージを送受信するためのシングルスレッドコンテキストTopicPublisher
- トピックにメッセージを送信するために使用されるTopicSession
によって作成されたオブジェクトTopicSubscriber
- トピックに送信されたメッセージの受信に使用されるTopicSession
によって作成されたオブジェクト
メッセージを送受信するための用語
このドキュメントでは、「消費」という用語は、Jakarta Messaging クライアントによるメッセージの受信を意味するために使用されます。つまり、Jakarta Messaging プロバイダーがメッセージを受信し、それをクライアントに渡しました。Jakarta Messaging はメッセージの同期受信と非同期受信の両方をサポートしているため、消費という用語は、区別する必要がない場合に使用されます。
生成という用語は、メッセージを送信するための最も一般的な用語として使用されます。これは、宛先に配信するために Jakarta Messaging プロバイダーにメッセージを送信することを意味します。
Jakarta Messaging Application の開発
大まかに言えば、Jakarta Messaging アプリケーションは、メッセージを交換する 1 つ以上の Jakarta Messaging クライアントです。このアプリケーションには、JakartaMessaging 以外のクライアントも含まれる場合があります。ただし、これらのクライアントは、Jakarta Messaging API の代わりに Jakarta Messaging プロバイダーのネイティブ API を使用します。
Jakarta Messaging アプリケーションは、ユニットとして設計およびデプロイできます。多くの場合、Jakarta Messaging クライアントは既存のアプリケーションに段階的に追加されます。
アプリケーションによって使用されるメッセージ定義は、JMS で作成されている場合もあれば、アプリケーションの非 Jakarta メッセージング部分によって定義されている場合もあります。
Jakarta Messaging Client の開発
従来の API を使用する一般的な Jakarta Messaging クライアントは、次の Jakarta Messaging セットアップ手順を実行します。
- JNDI を使用して
ConnectionFactory
オブジェクトを検索します - JNDI を使用して、1 つ以上の
Destination
オブジェクトを検索します - ConnectionFactory を使用して、メッセージ配信が禁止された Jakarta Messaging
Connection
オブジェクトを作成します - 接続を使用して、1 つ以上の Jakarta Messaging
Session
オブジェクトを作成します - セッションと宛先を使用して、必要な
MessageProducer
オブジェクトとMessageConsumer
オブジェクトを作成します - メッセージの配信を開始するように
Connection
に指示します
対照的に、簡略化された API を使用する一般的な Jakarta Messaging クライアントは、次のことを行います。
- JNDI を使用して
ConnectionFactory
オブジェクトを検索します - JNDI を使用して、1 つ以上の
Destination
オブジェクトを検索します ConnectionFactory
を使用してJMSContext
オブジェクトを作成しますJMSContext
を使用して、必要なJMSProducer
およびJMSConsumer
オブジェクトを作成します。- メッセージの配信が自動的に開始されます
この時点で、クライアントはメッセージを生成および消費するために必要な基本的な Jakarta Messaging セットアップを持っています。
パッケージ仕様
Jakarta Messaging 3.1 仕様
関連資料
Jakarta Enterprise Edition Technical Documentation
インターフェースのサマリー インターフェース 説明 BytesMessage BytesMessage
オブジェクトは、解釈されないバイトのストリームを含むメッセージを送信するために使用されます。CompletionListener CompletionListener
はアプリケーションによって実装され、メッセージが非同期に送信されるときに指定できます。Connection Connection
オブジェクトは、Jakarta Messaging プロバイダーへのクライアントのアクティブな接続です。ConnectionConsumer アプリケーションサーバーの場合、Connection
オブジェクトはConnectionConsumer
を作成するための特別な機能を提供します(オプション)。ConnectionFactory ConnectionFactory
オブジェクトは、管理者が定義した一連の接続構成パラメーターをカプセル化します。ConnectionMetaData ConnectionMetaData
オブジェクトは、Connection
オブジェクトを説明する情報を提供します。DeliveryMode Jakarta Messaging API でサポートされている配信モードはPERSISTENT
およびNON_PERSISTENT
です。Destination Destination
オブジェクトは、プロバイダー固有のアドレスをカプセル化します。ExceptionListener Jakarta Messaging プロバイダーは、Connection
オブジェクトに重大な問題を検出すると、Connection
オブジェクトのExceptionListener
が登録されているかどうかを通知します。JMSConsumer Jakarta Messaging 2.0 に導入された簡略化された Jakarta Messaging API を使用するクライアントは、JMSConsumer
オブジェクトを使用して、キューまたはトピックからメッセージを受信します。JMSContext JMSContext
は、Jakarta Messaging 2.0 用に導入された簡略化された Jakarta Messaging API のメインインターフェースです。JMSProducer JMSProducer
は、JMSContext
に代わってメッセージを送信するために使用される単純なオブジェクトです。MapMessage MapMessage
オブジェクトは、名前と値のペアのセットを送信するために使用されます。Message Message
インターフェースは、すべての Jakarta Messaging メッセージのルートインターフェースです。MessageConsumer クライアントはMessageConsumer
オブジェクトを使用して、宛先からメッセージを受信します。MessageListener MessageListener
オブジェクトは、非同期で配信されるメッセージを受信するために使用されます。MessageProducer クライアントはMessageProducer
オブジェクトを使用して宛先にメッセージを送信します。ObjectMessage ObjectMessage
オブジェクトは、Java プログラミング言語の直列化可能オブジェクト(「Java オブジェクト」)を含むメッセージを送信するために使用されます。Queue Queue
オブジェクトは、プロバイダー固有のキュー名をカプセル化します。QueueBrowser クライアントはQueueBrowser
オブジェクトを使用して、キューのメッセージを削除せずに調べます。QueueConnection QueueConnection
オブジェクトは、ポイントツーポイントの Jakarta Messaging プロバイダーへのアクティブな接続です。QueueConnectionFactory クライアントはQueueConnectionFactory
オブジェクトを使用して、ポイントツーポイントの Jakarta Messaging プロバイダーでQueueConnection
オブジェクトを作成します。QueueReceiver クライアントは、QueueReceiver
オブジェクトを使用して、キューに配信されたメッセージを受信します。QueueSender クライアントはQueueSender
オブジェクトを使用してメッセージをキューに送信します。QueueSession QueueSession
オブジェクトは、QueueReceiver
、QueueSender
、QueueBrowser
、TemporaryQueue
オブジェクトを作成するためのメソッドを提供します。ServerSession ServerSession
オブジェクトは、サーバーがスレッドを Jakarta Messaging セッションに関連付けるために使用するアプリケーションサーバーオブジェクトです(オプション)。ServerSessionPool ServerSessionPool
オブジェクトは、ConnectionConsumer
のメッセージを処理するためのServerSession
オブジェクトのプールを提供するためにアプリケーションサーバーによって実装されるオブジェクトです(オプション)。Session Session
オブジェクトは、メッセージを生成および消費するためのシングルスレッドコンテキストです。StreamMessage StreamMessage
オブジェクトは、Java プログラミング言語でプリミティブ型のストリームを送信するために使用されます。TemporaryQueue TemporaryQueue
オブジェクトは、Connection
の期間中に作成される一意のQueue
オブジェクトです。TemporaryTopic TemporaryTopic
オブジェクトは、Connection
の期間中に作成される一意のTopic
オブジェクトです。TextMessage TextMessage
オブジェクトは、java.lang.String
を含むメッセージを送信するために使用されます。Topic Topic
オブジェクトは、プロバイダー固有のトピック名をカプセル化します。TopicConnection TopicConnection
オブジェクトは、パブリッシュ / サブスクライブ Jakarta Messaging プロバイダーへのアクティブな接続です。TopicConnectionFactory クライアントはTopicConnectionFactory
オブジェクトを使用して、パブリッシュ / サブスクライブ Jakarta Messaging プロバイダーでTopicConnection
オブジェクトを作成します。TopicPublisher クライアントはTopicPublisher
オブジェクトを使用してトピックに関するメッセージを公開します。TopicSession TopicSession
オブジェクトは、TopicPublisher
、TopicSubscriber
、TemporaryTopic
オブジェクトを作成するためのメソッドを提供します。TopicSubscriber クライアントはTopicSubscriber
オブジェクトを使用して、トピックに発行されたメッセージを受信します。XAConnection XAConnection
インターフェースは、XASession
(オプション)を提供することにより、Connection
の機能を継承します。XAConnectionFactory XAConnectionFactory
インターフェースは、XAQueueConnectionFactory
およびXATopicConnectionFactory
インターフェースの基本インターフェースです。XAJMSContext XAJMSContext
インターフェースは、Jakarta Messaging プロバイダーの Java Transaction API(JTA)に対するサポートへのアクセスを追加することにより、JMSContext
の機能を継承します(オプション)。XAQueueConnection XAQueueConnection
は、QueueConnection
と同じ作成オプションを提供します(オプション)。XAQueueConnectionFactory XAQueueConnectionFactory
は、QueueConnectionFactory
と同じ作成オプションを提供します(オプション)。XAQueueSession XAQueueSession
は、通常のQueueSession
を提供します。これは、QueueReceiver
、QueueSender
、QueueBrowser
オブジェクトの作成に使用できます(オプション)。XASession XASession
インターフェースは、Jakarta Messaging プロバイダーの Java Transaction API(JTA)に対するサポートへのアクセスを追加することにより、Session
の機能を継承します(オプション)。XATopicConnection XATopicConnection
は、TopicConnection
と同じ作成オプションを提供します(オプション)。XATopicConnectionFactory XATopicConnectionFactory
は、TopicConnectionFactory
と同じ作成オプションを提供します(オプション)。XATopicSession XATopicSession
は通常のTopicSession
を提供します。クラスのサマリー クラス 説明 QueueRequestor QueueRequestor
ヘルパークラスは、サービスリクエストの作成を簡素化します。TopicRequestor TopicRequestor
ヘルパークラスは、サービスリクエストの作成を簡素化します。例外のサマリー 例外 説明 IllegalStateException この例外は、メソッドが不正または不適切なときに呼び出された場合、またはプロバイダーがリクエストされた操作に対して適切な状態にない場合にスローされます。IllegalStateRuntimeException このチェックされていない例外は、メソッドが不正または不適切なタイミングで呼び出された場合、またはプロバイダーがリクエストされた操作に対して適切な状態にない場合にスローされ、メソッドシグネチャーはIllegalStateRuntimeException
のスローを許可しません。InvalidClientIDException クライアントが接続のクライアント ID をプロバイダーによって拒否された値に設定しようとすると、この例外がスローされる必要があります。InvalidClientIDRuntimeException このチェックされていない例外は、クライアントが接続のクライアント ID をプロバイダーによって拒否された値に設定しようとしたときにスローする必要があり、メソッドシグネチャーはInvalidClientIDException
のスローを許可しません。InvalidDestinationException この例外は、宛先がプロバイダーに認識されないか、無効になった場合にスローする必要があります。InvalidDestinationRuntimeException このチェックされていない例外は、宛先がプロバイダーによって理解されないか、無効になった場合にスローする必要があり、メソッドシグネチャーがInvalidDestinationException
のスローを許可しません。InvalidSelectorException この例外は、Jakarta Messaging クライアントが無効な構文のメッセージセレクターをプロバイダーに提供しようとしたときにスローされる必要があります。InvalidSelectorRuntimeException このチェックされていない例外は、Jakarta Messaging クライアントが無効な構文を使用してプロバイダーにメッセージセレクターを提供しようとし、メソッドシグネチャーがInvalidSelectorException
のスローを許可していない場合にスローする必要があります。JMSException これは、Jakarta Messaging API のすべてのチェック済み例外のルートクラスです。JMSRuntimeException これは、Jakarta Messaging API のすべての未チェックの例外のルートクラスです。JMSSecurityException この例外は、プロバイダーがクライアントから送信されたユーザー名 / パスワードを拒否した場合にスローする必要があります。JMSSecurityRuntimeException このチェックされていない例外は、プロバイダーがクライアントから送信されたユーザー名 / パスワードを拒否した場合、またはセキュリティ制限によりメソッドが完了できず、メソッドシグネチャーがJMSSecurityException
のスローを許可していない場合にスローする必要があります。MessageEOFException この例外は、StreamMessage
またはBytesMessage
の読み取り中にストリームの予期しない終わりに達した場合にスローする必要があります。MessageFormatException この例外は、Jakarta Messaging クライアントがメッセージでサポートされていないデータ型を使用しようとしたり、メッセージ内のデータを間違った型として読み取ったりした場合にスローする必要があります。MessageFormatRuntimeException このチェックされていない例外は、Jakarta Messaging アプリケーションがメッセージでサポートされていないデータ型を使用しようとしたり、メッセージ内のデータを誤った型として読み取ったりしようとした場合にスローする必要があり、メソッドシグネチャーはMessageFormatException
のスローを許可しません。MessageNotReadableException この例外は、Jakarta Messaging クライアントが書き込み専用メッセージを読み取ろうとしたときにスローされる必要があります。MessageNotWriteableException この例外は、Jakarta Messaging クライアントが読み取り専用メッセージに書き込もうとしたときにスローされる必要があります。MessageNotWriteableRuntimeException このチェックされていない例外は、Jakarta Messaging クライアントが読み取り専用メッセージに書き込もうとしたときにスローされる必要があります。ResourceAllocationException この例外は、プロバイダーがメソッドに必要なリソースを割り当てることができない場合にスローされます。ResourceAllocationRuntimeException この未チェックの例外は、プロバイダーがメソッドに必要なリソースを割り当てることができない場合にスローされます。TransactionInProgressException この例外は、トランザクションが進行中であるために操作が無効な場合にスローされます。TransactionInProgressRuntimeException この未チェックの例外は、トランザクションが進行中であるために操作が無効な場合にスローされます。TransactionRolledBackException この例外は、Session.commit
の呼び出しにより現在のトランザクションがロールバックされる場合にスローする必要があります。TransactionRolledBackRuntimeException このチェックされていない例外は、JMSContext.commit
の呼び出しの結果、現在のトランザクションがロールバックされる場合にスローする必要があります。アノテーション型のサマリー アノテーション型 説明 JMSConnectionFactory このアノテーションをフィールドで使用して、jakarta.jms.JMSContext
オブジェクトを挿入するときに使用するjakarta.jms.ConnectionFactory
の JNDI ルックアップ名を指定できます。JMSConnectionFactoryDefinition アプリケーションはこのアノテーションを使用して、運用環境で必要な Jakarta MessagingConnectionFactory
リソースを指定できます。JMSConnectionFactoryDefinitions 1 つ以上のJMSConnectionFactoryDefinition
アノテーションを指定します。JMSDestinationDefinition アプリケーションはこのアノテーションを使用して、運用環境で必要な Jakarta MessagingDestination
リソースを指定できます。JMSDestinationDefinitions 1 つ以上のJMSDestinationDefinition
アノテーションを指定します。JMSPasswordCredential このアノテーションは、jakarta.jms.JMSContext
オブジェクトを挿入するときに使用する userName とパスワードを指定するために使用できます。JMSSessionMode このアノテーションは、jakarta.jms.JMSContext
オブジェクトを挿入するときに使用されるセッションモードを指定するために使用できます。