インターフェース JMSContext
- すべてのスーパーインターフェース:
AutoCloseableSE
- すべての既知のサブインターフェース:
XAJMSContext
public interface JMSContext extends AutoCloseableSE
JMSContextは、Jakarta Messaging 2.0 用に導入された簡略化された Jakarta Messaging API のメインインターフェースです。これにより、Java Message Service 1.1 API の 2 つの別個のオブジェクト(ConnectionとSession)の機能が 1 つのオブジェクトに結合されます。アプリケーションがメッセージを送信する必要がある場合は、
createProducerメソッドを使用して、メッセージを構成および送信するためのメソッドを提供するJMSProducerを作成します。メッセージは、同期的または非同期的に送信できます。アプリケーションがメッセージを受信する必要がある場合、アプリケーションはいくつかの
createConsumerまたはcreateDurableConsumerメソッドのいずれかを使用してJMSConsumerを作成します。JMSConsumerは、同期的または非同期的にメッセージを受信するためのメソッドを提供します。Java Message Service 1.1 API の観点から、
JMSContextはConnectionとSessionの両方を表すと考える必要があります。簡略化された API により、アプリケーションがこれらのオブジェクトを使用する必要がなくなりますが、接続とセッションの概念は依然として重要です。接続は Jakarta Messaging サーバーへの物理リンクを表し、セッションはメッセージを送受信するためのシングルスレッドコンテキストを表します。JMSContextは、ConnectionFactoryでいくつかのcreateContextメソッドの 1 つを呼び出すことによって作成できます。この方法で作成されたJMSContextは、 アプリケーション管理であると説明されています。アプリケーション管理のJMSContextは、closeメソッドを呼び出して、不要になったときに閉じる必要があります。あるいは、Jakarta EE Web および EJB コンテナーで実行されているアプリケーションは、
@Injectアノテーションを使用してアプリケーションにJMSContextを挿入することもできます。この方法で作成されたJMSContextは、 コンテナー管理されていると説明されています。コンテナー管理のJMSContextは、コンテナーによって自動的に閉じられます。Jakarta EE Web および EJB コンテナーで実行されているアプリケーションは、接続上に複数のアクティブセッションを作成することは許可されていないため、1 つのオブジェクトに結合すると、この制限を利用してより単純な API を提供できます。
ただし、Java SE 環境または Jakarta EE アプリケーションクライアントコンテナーで実行されているアプリケーションは、同じ接続で複数のアクティブなセッションを作成できます。これにより、同じ物理接続を複数のスレッドで同時に使用できます。同じ接続で複数のセッションを作成する必要があるこのようなアプリケーションは、
ConnectionFactoryでcreateContextメソッドの 1 つを使用して最初のJMSContextを作成し、次にJMSContextでcreateContextメソッドを使用して同じ接続を使用する追加のJMSContextオブジェクトを作成する必要があります。これらのJMSContextオブジェクトはすべてアプリケーションで管理されており、必要がなくなったらcloseメソッドを呼び出して閉じる必要があります。- 導入:
- JMS 2.0
- バージョン:
- Jakarta Messaging 2.0
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static intAUTO_ACKNOWLEDGEこのセッションモードでは、JMSContext のセッションは、セッションがreceiveの呼び出しから正常に戻ったとき、またはセッションがメッセージを処理するために呼び出したメッセージリスナーが正常に戻ったときに、クライアントがメッセージを受信したことを自動的に確認します。static intCLIENT_ACKNOWLEDGEこのセッションモードでは、クライアントはメッセージのacknowledgeメソッドを呼び出すことにより、消費されたメッセージを確認します。static intDUPS_OK_ACKNOWLEDGEこのセッションモードは、JMSContext のセッションにメッセージの配信を遅延確認するように指示します。static intSESSION_TRANSACTEDこのセッションモードは、JMSContext のセッションに、ローカルトランザクションでメッセージを配信および消費するように指示します。メッセージは、後でcommitを呼び出すことによってコミットされるか、rollbackを呼び出すことによってロールバックされます。
方法の概要
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 voidacknowledge()JMSContext のセッションによって消費されたすべてのメッセージを確認します。voidclose()JMSContext を閉じますvoidcommit()このトランザクションで実行されたすべてのメッセージをコミットし、現在保持されているロックを解放します。QueueBrowsercreateBrowser(Queue queue)QueueBrowserオブジェクトを作成して、指定されたキューのメッセージを確認します。QueueBrowsercreateBrowser(Queue queue, StringSE messageSelector)QueueBrowserオブジェクトを作成して、メッセージセレクターを使用して、指定されたキューのメッセージを確認します。BytesMessagecreateBytesMessage()BytesMessageオブジェクトを作成します。JMSConsumercreateConsumer(Destination destination)指定された宛先のJMSConsumerを作成します。JMSConsumercreateConsumer(Destination destination, StringSE messageSelector)メッセージセレクターを使用して、指定した宛先のJMSConsumerを作成します。JMSConsumercreateConsumer(Destination destination, StringSE messageSelector, boolean noLocal)メッセージセレクターとnoLocalパラメーターを指定して、指定した宛先のJMSConsumerを作成します。JMSContextcreateContext(int sessionMode)このJMSContextと同じ接続を使用して、指定されたセッションモードで新しいJMSContextを作成し、新しいセッションを作成します。JMSConsumercreateDurableConsumer(Topic topic, StringSE name)指定されたトピックに共有されていない永続サブスクリプションを作成し(まだ存在しない場合)、その永続サブスクリプションにコンシューマーを作成します。JMSConsumercreateDurableConsumer(Topic topic, StringSE name, StringSE messageSelector, boolean noLocal)メッセージセレクターとnoLocalパラメーターを指定して、指定されたトピック(まだ存在しない場合)に非共有の永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。MapMessagecreateMapMessage()MapMessageオブジェクトを作成します。MessagecreateMessage()Messageオブジェクトを作成します。ObjectMessagecreateObjectMessage()ObjectMessageオブジェクトを作成します。ObjectMessagecreateObjectMessage(SerializableSE object)初期化されたObjectMessageオブジェクトを作成します。JMSProducercreateProducer()メッセージの構成と送信に使用できる新しいJMSProducerオブジェクトを作成しますQueuecreateQueue(StringSE queueName)指定されたプロバイダー固有のキュー名をカプセル化するQueueオブジェクトを作成します。JMSConsumercreateSharedConsumer(Topic topic, StringSE sharedSubscriptionName)指定されたトピックに指定された名前で共有の非永続サブスクリプションを作成し(まだ存在しない場合)、そのサブスクリプションにコンシューマーを作成します。JMSConsumercreateSharedConsumer(Topic topic, StringSE sharedSubscriptionName, StringSE messageSelector)メッセージセレクターを指定して、指定されたトピック(指定されていない場合)に指定された名前で共有の非永続サブスクリプションを作成し、そのサブスクリプションにコンシューマーを作成します。JMSConsumercreateSharedDurableConsumer(Topic topic, StringSE name)メッセージセレクターを指定して、指定されたトピック(まだ存在しない場合)に共有永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。JMSConsumercreateSharedDurableConsumer(Topic topic, StringSE name, StringSE messageSelector)メッセージセレクターを指定して、指定されたトピック(まだ存在しない場合)に共有永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。StreamMessagecreateStreamMessage()StreamMessageオブジェクトを作成します。TemporaryQueuecreateTemporaryQueue()TemporaryQueueオブジェクトを作成します。TemporaryTopiccreateTemporaryTopic()TemporaryTopicオブジェクトを作成します。TextMessagecreateTextMessage()TextMessageオブジェクトを作成します。TextMessagecreateTextMessage(StringSE text)初期化されたTextMessageオブジェクトを作成します。TopiccreateTopic(StringSE topicName)指定されたプロバイダー固有のトピック名をカプセル化するTopicオブジェクトを作成します。booleangetAutoStart()このJMSContextで使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうかを返します。StringSEgetClientID()JMSContext の接続のクライアント識別子を取得します。ExceptionListenergetExceptionListener()JMSContext の接続用のExceptionListenerオブジェクトを取得します。ConnectionMetaDatagetMetaData()JMSContext の接続の接続メタデータを取得します。intgetSessionMode()JMSContext のセッションのセッションモードを返します。booleangetTransacted()JMSContext のセッションがトランザクションモードであるかどうかを示します。voidrecover()JMSContext のセッションでメッセージ配信を停止し、最も古い未確認メッセージでメッセージ配信を再開します。voidrollback()このトランザクションで実行されたメッセージをロールバックし、現在保持されているロックを解放します。voidsetAutoStart(boolean autoStart)このJMSContextによって使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうかを指定します。voidsetClientID(StringSE clientID)JMSContext の接続のクライアント識別子を設定します。voidsetExceptionListener(ExceptionListener listener)JMSContext の接続の例外リスナーを設定します。voidstart()JMSContext の接続による受信メッセージの配信を開始(または再開)します。voidstop()JMSContext の接続による受信メッセージの配信を一時的に停止します。voidunsubscribe(StringSE name)クライアントによって作成された永続サブスクリプションを登録解除します。
フィールドの詳細
AUTO_ACKNOWLEDGE
static final int AUTO_ACKNOWLEDGE
このセッションモードでは、JMSContext のセッションは、セッションがreceiveの呼び出しから正常に戻ったとき、またはセッションがメッセージを処理するために呼び出したメッセージリスナーが正常に戻ったときに、クライアントがメッセージを受信したことを自動的に確認します。- 関連事項:
- 定数フィールド値
CLIENT_ACKNOWLEDGE
static final int CLIENT_ACKNOWLEDGE
このセッションモードでは、クライアントはメッセージのacknowledgeメソッドを呼び出すことにより、消費されたメッセージを確認します。消費されたメッセージを確認すると、セッションが消費したすべてのメッセージが確認されます。このセッションモードを使用すると、クライアントは、メッセージを処理しようとしているときに、未確認のメッセージを大量に作成する可能性があります。Jakarta Messaging プロバイダーは、クライアントがリソースの枯渇に追い込まれ、使用している一部のリソースが一時的にブロックされたときに障害が発生しないように、クライアントのオーバーランを制限する方法を管理者に提供する必要があります。
DUPS_OK_ACKNOWLEDGE
static final int DUPS_OK_ACKNOWLEDGE
このセッションモードは、JMSContext のセッションにメッセージの配信を遅延確認するように指示します。これにより、Jakarta Messaging プロバイダーに障害が発生した場合に重複メッセージが配信される可能性があるため、重複メッセージを許容できるコンシューマーのみが使用する必要があります。このモードを使用すると、重複を防ぐためにセッションが行う作業を最小限に抑えることで、セッションのオーバーヘッドを減らすことができます。- 関連事項:
- 定数フィールド値
SESSION_TRANSACTED
static final int SESSION_TRANSACTED
このセッションモードは、JMSContext のセッションに、ローカルトランザクションでメッセージを配信および消費するように指示します。メッセージは、後でcommitを呼び出すことによってコミットされるか、rollbackを呼び出すことによってロールバックされます。- 関連事項:
- 定数フィールド値
メソッドの詳細
createContext
JMSContext createContext(int sessionMode)
このJMSContextと同じ接続を使用して、指定されたセッションモードで新しいJMSContextを作成し、新しいセッションを作成します。このメソッドは接続を開始しません。接続がまだ開始されていない場合は、その接続のいずれかの
JMSContextオブジェクトでJMSConsumerが作成されると、接続が自動的に開始されます。sessionModeがJMSContext.SESSION_TRANSACTEDに設定されている場合、セッションはローカルトランザクションを使用します。ローカルトランザクションは、JMSContextのcommitまたはrollbackメソッドを呼び出すことにより、後でコミットまたはロールバックできます。sessionModeがJMSContext.CLIENT_ACKNOWLEDGE、JMSContext.AUTO_ACKNOWLEDGE、JMSContext.DUPS_OK_ACKNOWLEDGEのいずれかに設定されている場合。その後、セッションは非トランザクションになり、このセッションで受信されたメッセージはsessionModeの値に従って確認されます。これらの確認応答モードの意味の定義については、以下のリンクを参照してください。
このメソッドは、Jakarta EE Web または EJB コンテナーで実行されているアプリケーションで使用しないでください。使用すると、そのようなアプリケーションが接続ごとに複数のアクティブな(閉じていない)
Sessionオブジェクトを作成しようとしてはならないという制限に違反するためです。このメソッドが Jakarta EE Web または EJB コンテナーで呼び出されると、JMSRuntimeExceptionがスローされます。- パラメーター:
sessionMode- 4 つの可能なセッションモードのどれが使用されるかを示します。許可される値はJMSContext.SESSION_TRANSACTED、JMSContext.CLIENT_ACKNOWLEDGE、JMSContext.AUTO_ACKNOWLEDGE、JMSContext.DUPS_OK_ACKNOWLEDGEです。- 戻り値:
- 新しく作成された JMSContext
- 例外:
JMSRuntimeException- Jakarta Messaging プロバイダーが JMSContext の作成に失敗した場合- 内部エラーまたは
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されているためです。
- 導入:
- JMS 2.0
- 関連事項:
SESSION_TRANSACTED,CLIENT_ACKNOWLEDGE,AUTO_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE,ConnectionFactory.createContext(),ConnectionFactory.createContext(int),ConnectionFactory.createContext(java.lang.String, java.lang.String),ConnectionFactory.createContext(java.lang.String, java.lang.String, int),createContext(int)
createProducer
JMSProducer createProducer()
メッセージの構成と送信に使用できる新しいJMSProducerオブジェクトを作成します- 戻り値:
- 新しい
JMSProducerオブジェクト - 関連事項:
JMSProducer
getClientID
StringSE getClientID()
JMSContext の接続のクライアント識別子を取得します。この値は、Jakarta Messaging プロバイダーに固有です。これは、管理者が
ConnectionFactoryオブジェクトで事前構成するか、setClientIDメソッドを呼び出してアプリケーションによって動的に割り当てられます。- 戻り値:
- 一意のクライアント識別子
- 例外:
JMSRuntimeException- 内部エラーが原因で Jakarta Messaging プロバイダーが JMSContext の接続のクライアント ID を返さない場合。
setClientID
void setClientID(StringSE clientID)
JMSContext の接続のクライアント識別子を設定します。Jakarta Messaging クライアントのクライアント ID を割り当てるための推奨される方法は、クライアント固有の
ConnectionFactoryオブジェクトで構成し、それが作成するConnectionオブジェクトに透過的に割り当てることです。あるいは、クライアントは、プロバイダー固有の値を使用して、JMSContext の接続のクライアント ID を設定できます。クライアント ID を明示的に設定する機能は、管理上構成されている ID をオーバーライドするためのメカニズムではありません。管理上指定された識別子が存在しない場合に提供されます。存在する場合、それを設定して変更しようとすると、
IllegalStateRuntimeExceptionをスローする必要があります。クライアントがクライアント識別子を明示的に設定する場合、JMSContext を作成した直後、JMSContext で他のアクションが実行される前に設定する必要があります。この時点以降、クライアント ID の設定はプログラミングエラーであり、IllegalStateRuntimeExceptionをスローする必要があります。クライアント識別子の目的は、JMSContext の接続とそのオブジェクトを、プロバイダーによってクライアントに代わって維持される状態に関連付けることです。Jakarta Messaging API によって識別されるそのような状態は、永続サブスクリプションをサポートするために必要な状態だけです。
このメソッドが呼び出されたときに同じ
clientIDとの別の接続がすでに実行されている場合、Jakarta Messaging プロバイダーは重複する ID を検出してInvalidClientIDExceptionをスローする必要があります。このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、
JMSRuntimeExceptionがスローされる可能性があります。JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- パラメーター:
clientID- 一意のクライアント識別子- 例外:
InvalidClientIDRuntimeException- Jakarta Messaging クライアントが無効または重複したクライアント ID を指定した場合。IllegalStateRuntimeException-- Jakarta Messaging クライアントが JMSContext の接続のクライアント ID を間違った時間に設定しようとした場合、または
- クライアント ID が管理上構成されている場合、または
JMSContextがコンテナー管理(注入)されている場合。
JMSRuntimeException- 以下のいずれかの理由により、Jakarta Messaging プロバイダーが JMSContext の接続のクライアント ID を設定できなかった場合:- 内部エラーが発生した、または
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されました (この場合、例外がスローされることは保証されていませんが)
getMetaData
ConnectionMetaData getMetaData()
JMSContext の接続の接続メタデータを取得します。- 戻り値:
- 接続メタデータ
- 例外:
JMSRuntimeException- Jakarta Messaging プロバイダーが接続メタデータの取得に失敗した場合- 関連事項:
ConnectionMetaData
getExceptionListener
ExceptionListener getExceptionListener()
JMSContext の接続用のExceptionListenerオブジェクトを取得します。すべてのConnectionにExceptionListenerが関連付けられているわけではありません。- 戻り値:
- JMSContext の接続の
ExceptionListener、またはExceptionListenerがその接続に関連付けられていない場合は null。 - 例外:
JMSRuntimeException- Jakarta Messaging プロバイダーが JMSContext の接続用のExceptionListenerの取得に失敗した場合。- 関連事項:
Connection.setExceptionListener(jakarta.jms.ExceptionListener)
setExceptionListener
void setExceptionListener(ExceptionListener listener)
JMSContext の接続の例外リスナーを設定します。Jakarta Messaging プロバイダーは、接続に重大な問題を検出すると、接続の
ExceptionListenerが登録されているかどうかを通知します。これを行うには、リスナーのonExceptionメソッドを呼び出し、問題を説明するJMSRuntimeExceptionオブジェクトを渡します。例外リスナーを使用すると、クライアントに問題を非同期的に通知できます。一部の接続はメッセージのみを消費するため、接続が失敗したことを知る方法が他にありません。
接続は、その
ExceptionListenerの実行を直列化します。Jakarta Messaging プロバイダーは、クライアントに通知する前に、接続の問題自体を解決する必要があります。
このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、
JMSRuntimeExceptionがスローされる可能性があります。JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- パラメーター:
listener- 例外リスナー- 例外:
IllegalStateRuntimeException-JMSContextがコンテナー管理(注入)されている場合。JMSRuntimeException- Jakarta Messaging プロバイダーが次のいずれかの理由で例外リスナーの設定に失敗した場合:- 内部エラーが発生した、または
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されました (この場合、例外がスローされることは保証されていませんが)
start
void start()
JMSContext の接続による受信メッセージの配信を開始 (または再開) します。すでに開始されている接続でのstartへの呼び出しは無視されます。また、JMSContext によって使用される基礎となる接続は、コンシューマーの作成時に自動的に開始されるため、通常、アプリケーションがこのメソッドを呼び出す必要はありません。JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- 例外:
IllegalStateRuntimeException-JMSContextがコンテナー管理(注入)されている場合。JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがメッセージ配信の開始に失敗した場合。- 関連事項:
stop()
stop
void stop()
JMSContext の接続による受信メッセージの配信を一時的に停止します。startメソッドを使用して配信を再開できます。接続が停止すると、接続のすべてのメッセージコンシューマーへの配信が禁止されます。同期受信ブロックであり、メッセージはメッセージリスナーに配信されません。接続を停止しても、メッセージを送信する機能には影響しません。すでに停止している接続での
stopの呼び出しは無視されます。stopの呼び出しは、メッセージの配信が一時停止するまで戻りません。つまり、クライアントは、そのメッセージリスナーが呼び出されず、receive呼び出しが戻るのを待っているすべての制御スレッドが、接続が再開されるまでメッセージを返さないという事実に依存できます。停止した接続の受信タイマーは進み続けるため、接続が停止している間は受信がタイムアウトする場合があります。stopが呼び出されたときにメッセージリスナーが実行されている場合、stop呼び出しは、すべてのリスナーが戻るまで待機してから戻る必要があります。これらのメッセージリスナーが完了する間、それらは利用可能な接続の完全なサービスを持っている必要があります。ただし、stop メソッドがそれ自体の
JMSContextまたは同じ接続を使用する他のJMSContextのメッセージリスナーから呼び出された場合、失敗してjakarta.jms.IllegalStateRuntimeExceptionをスローするか、成功して接続を停止し、他のすべてのメッセージまでブロックします。実行されていた可能性のあるリスナーが戻ってきました。この場合、2 つの代替動作が許可されるため、アプリケーションは、独自の
JMSContextまたは同じ接続を使用する他のJMSContextのメッセージリスナーからstopを呼び出さないようにする必要があります。これは、移植性がないためです。誤解を避けるために、
stopが呼び出されたときに JMSContext の接続の例外リスナーが実行されている場合、stop呼び出しは、例外リスナーが戻るまで待機してから戻る必要はありません。このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、
JMSRuntimeExceptionがスローされる可能性があります。JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- 例外:
IllegalStateRuntimeException-- このメソッドが MessageListener によって独自の JMSContext で呼び出された場合
JMSContextがコンテナー管理(注入)されている場合。
JMSRuntimeException- Jakarta Messaging プロバイダーが次のいずれかの理由でメッセージ配信の停止に失敗した場合:- 内部エラーが発生した、または
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されました (この場合、例外がスローされることは保証されていませんが)
- 関連事項:
start()
setAutoStart
void setAutoStart(boolean autoStart)
このJMSContextによって使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうかを指定します。これはデフォルトの動作であり、falseの値を指定してこのメソッドを呼び出すことで無効にできます。このメソッド自体は、接続を開始または停止しません。
JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- パラメーター:
autoStart- このJMSContextで使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうか。- 例外:
IllegalStateRuntimeException-JMSContextがコンテナー管理されている場合 (注入された)- 関連事項:
getAutoStart()
getAutoStart
boolean getAutoStart()
このJMSContextで使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうかを返します。- 戻り値:
- この
JMSContextで使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうか。 - 関連事項:
setAutoStart(boolean)
close
void close()
JMSContext を閉じますこれにより、基になるセッションと、基になるプロデューサーおよびコンシューマーが閉じられます。基になる接続を使用している他のアクティブな(閉じられていない)JMSContext オブジェクトがない場合、このメソッドは基になる接続も閉じます。
プロバイダーは通常、接続に代わって JVM の外部に重要なリソースを割り当てるため、クライアントはこれらのリソースが不要になったときに閉じる必要があります。これらのリソースを最終的に再利用するためにガベージコレクションに依存することは、十分なタイミングではない場合があります。
接続を閉じると、すべての一時的な宛先が削除されます。
このメソッドが呼び出されると、メッセージ処理が正常にシャットダウンされるまで戻らないはずです。これは、実行されていた可能性のあるすべてのメッセージリスナーが返され、保留中のすべての受信が返されたことを意味します。閉じるは、接続のセッションのコンシューマーで受信するすべての保留中のメッセージを終了します。受信者は、クローズ時に利用可能なメッセージがあったかどうかに応じて、メッセージまたは null で戻る場合があります。接続
closeが呼び出されたときに、接続のセッションのメッセージリスナーの 1 つ以上がメッセージを処理している場合、接続とそのセッションのすべての機能は、Jakarta Messaging プロバイダーに制御を戻すまでそれらのリスナーが使用できる状態を維持する必要があります。ただし、close メソッドがメッセージリスナーから独自の
JMSContextで呼び出された場合は、失敗してjakarta.jms.IllegalStateRuntimeExceptionをスローするか、成功してJMSContextを閉じます。closeが成功し、JMSContextのセッションモードがAUTO_ACKNOWLEDGEに設定されている場合、onMessage 呼び出しが完了すると、現在のメッセージは自動的に確認応答されます。この場合、2 つの代替動作が許可されているため、移植性がないため、アプリケーションは独自の
JMSContextでメッセージリスナーから close を呼び出すことを避ける必要があります。このメソッドは、この JMSContext の不完全な非同期送信操作が完了し、 CompletionListener コールバックが返されるまで返さないでください。エラーが発生しない限り、不完全な送信は正常に完了することが許可されている必要があります。
誤解を避けるために、
closeが呼び出されたときに JMSContext の接続の例外リスナーが実行されている場合、close呼び出しは、例外リスナーが戻るまで待機してから戻る必要はありません。接続を閉じると、進行中のセッションのトランザクションがロールバックされます。セッションの作業が外部のトランザクションマネージャーによって調整される場合、セッションの
commitおよびrollbackメソッドは使用されず、閉じられたセッションの作業の結果は後でトランザクションマネージャーによって決定されます。接続を閉じても、クライアントが確認したセッションの確認は強制されません。
閉じた接続のセッションから受信したメッセージの
acknowledgeメソッドを呼び出すには、IllegalStateRuntimeExceptionをスローする必要があります。閉じた接続を閉じても、例外をスローしてはなりません。CompletionListener コールバックメソッドはそれ自体の JMSContext で close を呼び出さないでください。これを行うと、 IllegalStateRuntimeException がスローされます。
JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- 次で指定:
- インターフェース
AutoCloseableSEのclose - 例外:
IllegalStateRuntimeException-- このメソッドが MessageListener によって独自の JMSContext で呼び出された場合
- このメソッドが CompletionListener コールバックメソッドによって独自の JMSContext で呼び出された場合
JMSContextがコンテナー管理されている場合 (注入された)
JMSRuntimeException- 内部エラーが原因で Jakarta Messaging プロバイダーがJMSContextを閉じることができない場合。例: リソースの解放またはソケット接続のクローズに失敗すると、この例外がスローされる可能性があります。
createBytesMessage
BytesMessage createBytesMessage()
BytesMessageオブジェクトを作成します。BytesMessageオブジェクトは、未解釈のバイトのストリームを含むメッセージを送信するために使用されます。- 戻り値:
- 作成された
BytesMessageオブジェクト - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
createMapMessage
MapMessage createMapMessage()
MapMessageオブジェクトを作成します。MapMessageオブジェクトは、名前と値のペアの自己定義セットを送信するために使用されます。ここで、名前はStringオブジェクトであり、値は Java プログラミング言語のプリミティブ値です。返されるメッセージオブジェクトは、
SessionまたはJMSContextを使用して送信できます。作成に使用されたJMSContextを使用して送信されることに限定されません。返されたメッセージオブジェクトは、作成に使用された Jakarta Messaging プロバイダーで使用するために最適化されている場合があります。ただし、作成に使用した Jakarta Messaging プロバイダーだけでなく、任意の Jakarta Messaging プロバイダーを使用して送信できます。
- 戻り値:
- 作成された
MapMessageオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
createMessage
Message createMessage()
Messageオブジェクトを作成します。Messageインターフェースは、すべての Jakarta Messaging メッセージのルートインターフェースです。Messageオブジェクトは、すべての標準メッセージヘッダー情報を保持します。ヘッダー情報のみを含むメッセージで十分な場合に送信できます。返されるメッセージオブジェクトは、
SessionまたはJMSContextを使用して送信できます。作成に使用されたJMSContextを使用して送信されることに限定されません。返されたメッセージオブジェクトは、作成に使用された Jakarta Messaging プロバイダーで使用するために最適化されている場合があります。ただし、作成に使用した Jakarta Messaging プロバイダーだけでなく、任意の Jakarta Messaging プロバイダーを使用して送信できます。
- 戻り値:
- 作成された
Messageオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
createObjectMessage
ObjectMessage createObjectMessage()
ObjectMessageオブジェクトを作成します。ObjectMessageオブジェクトは、シリアライズ可能な Java オブジェクトを含むメッセージを送信するために使用されます。返されるメッセージオブジェクトは、
SessionまたはJMSContextを使用して送信できます。作成に使用されたJMSContextを使用して送信されることに限定されません。返されたメッセージオブジェクトは、作成に使用された Jakarta Messaging プロバイダーで使用するために最適化されている場合があります。ただし、作成に使用した Jakarta Messaging プロバイダーだけでなく、任意の Jakarta Messaging プロバイダーを使用して送信できます。
- 戻り値:
- 作成された
ObjectMessageオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
createObjectMessage
ObjectMessage createObjectMessage(SerializableSE object)
初期化されたObjectMessageオブジェクトを作成します。ObjectMessageオブジェクトは、シリアライズ可能な Java オブジェクトを含むメッセージを送信するために使用されます。返されるメッセージオブジェクトは、
SessionまたはJMSContextを使用して送信できます。作成に使用されたJMSContextを使用して送信されることに限定されません。返されたメッセージオブジェクトは、作成に使用された Jakarta Messaging プロバイダーで使用するために最適化されている場合があります。ただし、作成に使用した Jakarta Messaging プロバイダーだけでなく、任意の Jakarta Messaging プロバイダーを使用して送信できます。
- パラメーター:
object- このメッセージを初期化するために使用するオブジェクト- 戻り値:
- 作成された
ObjectMessageオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
createStreamMessage
StreamMessage createStreamMessage()
StreamMessageオブジェクトを作成します。StreamMessageオブジェクトは、Java プログラミング言語でプリミティブ値の自己定義ストリームを送信するために使用されます。返されるメッセージオブジェクトは、
SessionまたはJMSContextを使用して送信できます。作成に使用されたJMSContextを使用して送信されることに限定されません。返されたメッセージオブジェクトは、作成に使用された Jakarta Messaging プロバイダーで使用するために最適化されている場合があります。ただし、作成に使用した Jakarta Messaging プロバイダーだけでなく、任意の Jakarta Messaging プロバイダーを使用して送信できます。
- 戻り値:
- 作成された
StreamMessageオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
createTextMessage
TextMessage createTextMessage()
TextMessageオブジェクトを作成します。TextMessageオブジェクトは、Stringオブジェクトを含むメッセージを送信するために使用されます。返されるメッセージオブジェクトは、
SessionまたはJMSContextを使用して送信できます。作成に使用されたJMSContextを使用して送信されることに限定されません。返されたメッセージオブジェクトは、作成に使用された Jakarta Messaging プロバイダーで使用するために最適化されている場合があります。ただし、作成に使用した Jakarta Messaging プロバイダーだけでなく、任意の Jakarta Messaging プロバイダーを使用して送信できます。
- 戻り値:
- 作成された
TextMessageオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
createTextMessage
TextMessage createTextMessage(StringSE text)
初期化されたTextMessageオブジェクトを作成します。TextMessageオブジェクトは、Stringを含むメッセージを送信するために使用されます。返されるメッセージオブジェクトは、
SessionまたはJMSContextを使用して送信できます。作成に使用されたJMSContextを使用して送信されることに限定されません。返されたメッセージオブジェクトは、作成に使用された Jakarta Messaging プロバイダーで使用するために最適化されている場合があります。ただし、作成に使用した Jakarta Messaging プロバイダーだけでなく、任意の Jakarta Messaging プロバイダーを使用して送信できます。
- パラメーター:
text- このメッセージを初期化するために使用される文字列- 戻り値:
- 作成された
TextMessageオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーがこのメッセージの作成に失敗した場合。
getTransacted
boolean getTransacted()
JMSContext のセッションがトランザクションモードであるかどうかを示します。- 戻り値:
- セッションがトランザクションモードの場合は true
- 例外:
JMSRuntimeException- Jakarta Messaging プロバイダーが内部エラーのためにトランザクションモードを返せなかった場合
getSessionMode
int getSessionMode()
JMSContext のセッションのセッションモードを返します。これは、JMSContext の作成時に設定できます。可能な値は、JMSContext.SESSION_TRANSACTED、JMSContext.AUTO_ACKNOWLEDGE、JMSContext.CLIENT_ACKNOWLEDGE、および JMSContext.DUPS_OK_ACKNOWLEDGE です。JMSContext の作成時にセッションモードが指定されていなかった場合、JMSContext.AUTO_ACKNOWLEDGE の値が返されます。
- 戻り値:
- JMSContext のセッションのセッションモード
- 例外:
JMSRuntimeException- 内部エラーのために Jakarta Messaging プロバイダーが確認応答モードを返せなかった場合。- 導入:
- JMS 2.0
- 関連事項:
Connection.createSession(boolean, int)
commit
void commit()
このトランザクションで実行されたすべてのメッセージをコミットし、現在保持されているロックを解放します。このメソッドは、この JMSContext の不完全な非同期送信操作が完了し、 CompletionListener コールバックが返されるまで返さないでください。エラーが発生しない限り、不完全な送信は正常に完了することが許可されている必要があります。
CompletionListener コールバックメソッドはそれ自体の JMSContext で commit を呼び出さないでください。これを行うと、 IllegalStateRuntimeException がスローされます。
JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- 例外:
IllegalStateRuntimeException-- JMSContext のセッションがローカルトランザクションを使用していない場合
- このメソッドが CompletionListener コールバックメソッドによって独自の JMSContext によって呼び出された場合
JMSContextがコンテナー管理されている場合 (注入された)
TransactionRolledBackRuntimeException- コミット中に何らかの内部エラーが発生してトランザクションがロールバックされた場合。JMSRuntimeException- 内部エラーが原因で Jakarta Messaging プロバイダーがトランザクションのコミットに失敗した場合
rollback
void rollback()
このトランザクションで実行されたメッセージをロールバックし、現在保持されているロックを解放します。このメソッドは、この JMSContext の不完全な非同期送信操作が完了し、 CompletionListener コールバックが返されるまで返さないでください。エラーが発生しない限り、不完全な送信は正常に完了することが許可されている必要があります。
CompletionListener コールバックメソッドはそれ自体の JMSContext で rollback を呼び出さないでください。これを行うと、 IllegalStateRuntimeException がスローされます。
JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- 例外:
IllegalStateRuntimeException-- JMSContext のセッションがローカルトランザクションを使用していない場合
- このメソッドが CompletionListener コールバックメソッドによって独自の JMSContext で呼び出された場合
JMSContextがコンテナー管理されている場合 (注入された)
JMSRuntimeException- 内部エラーが原因で Jakarta Messaging プロバイダーがトランザクションのロールバックに失敗した場合
recover
void recover()
JMSContext のセッションでメッセージ配信を停止し、最も古い未確認メッセージでメッセージ配信を再開します。すべてのコンシューマーはメッセージをシリアル順に配信します。受信したメッセージを確認すると、クライアントに配信されたすべてのメッセージが自動的に確認されます。
セッションを再開すると、次のアクションが実行されます。
- メッセージの配信を停止する
- 配信された可能性があるが、「再配信された」として確認されていないすべてのメッセージにマークを付ける
- 以前に配信されたすべての未確認メッセージを含む配信シーケンスを再開します。再配信されたメッセージは、正確に元の配信順序で配信される必要はありません。
JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- 例外:
IllegalStateRuntimeException-- JMSContext のセッションがトランザクションを使用している場合
JMSContextがコンテナー管理されている場合 (注入された)
JMSRuntimeException- 内部エラーが原因で Jakarta Messaging プロバイダーがメッセージ配信の停止と再開に失敗した場合
createConsumer
JMSConsumer createConsumer(Destination destination)
指定された宛先のJMSConsumerを作成します。クライアントは、
JMSConsumerオブジェクトを使用して、宛先に送信されたメッセージを受信します。autoStartプロパティがsetAutoStart(boolean)でfalseに設定されていない限り、コンシューマーの作成時に自動的に行われるため、明示的にstart()メソッドを呼び出す必要はありません。- パラメーター:
destination- アクセスするDestination- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーが原因でセッションがJMSConsumerの作成に失敗した場合。InvalidDestinationRuntimeException- 無効な宛先が指定された場合。
createConsumer
JMSConsumer createConsumer(Destination destination, StringSE messageSelector)
メッセージセレクターを使用して、指定した宛先のJMSConsumerを作成します。クライアントは、
JMSConsumerオブジェクトを使用して、宛先に送信されたメッセージを受信します。autoStartプロパティがsetAutoStart(boolean)でfalseに設定されていない限り、コンシューマーの作成時に自動的に行われるため、明示的にstart()メソッドを呼び出す必要はありません。- パラメーター:
destination- アクセスするDestinationmessageSelector- メッセージセレクタ式に一致するプロパティを持つメッセージのみが配信されます。null または空の文字列の値は、JMSConsumerのメッセージセレクターがないことを示します。- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーが原因でセッションがJMSConsumerの作成に失敗した場合。InvalidDestinationRuntimeException- 無効な宛先が指定された場合。InvalidSelectorRuntimeException- メッセージセレクタが無効な場合。
createConsumer
JMSConsumer createConsumer(Destination destination, StringSE messageSelector, boolean noLocal)
メッセージセレクターとnoLocalパラメーターを指定して、指定した宛先のJMSConsumerを作成します。クライアントは、
JMSConsumerオブジェクトを使用して、宛先に送信されたメッセージを受信します。noLocal引数は、宛先がトピックであり、JMSContext の接続がそのトピックへのメッセージの公開にも使用されている場合に使用されます。noLocalが true に設定されている場合、JMSConsumerは、自身の接続によってトピックに公開されたメッセージを受信しません。この引数のデフォルト値は false です。宛先がキューの場合、noLocalを true に設定した場合の影響は指定されていません。autoStartプロパティがsetAutoStart(boolean)でfalseに設定されていない限り、コンシューマーの作成時に自動的に行われるため、明示的にstart()メソッドを呼び出す必要はありません。- パラメーター:
destination- アクセスするDestinationmessageSelector- メッセージセレクタ式に一致するプロパティを持つメッセージのみが配信されます。null または空の文字列の値は、JMSConsumerのメッセージセレクターがないことを示します。noLocal- true で、宛先がトピックの場合、JMSConsumerは、独自の接続によってトピックに公開されたメッセージを受信しません。- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーが原因でセッションがJMSConsumerの作成に失敗した場合。InvalidDestinationRuntimeException- 無効な宛先が指定された場合。InvalidSelectorRuntimeException- メッセージセレクタが無効な場合。
createQueue
Queue createQueue(StringSE queueName)
指定されたプロバイダー固有のキュー名をカプセル化するQueueオブジェクトを作成します。アプリケーションでプロバイダー固有のキュー名を使用すると、アプリケーションが移植不可能になる場合があります。ポータブルアプリケーションでは、このメソッドを使用せずに、JNDI を使用して管理上定義された
Queueオブジェクトを検索することをお勧めします。このメソッドは、キューの名前をカプセル化するオブジェクトを作成するだけであることに注意してください。Jakarta Messaging プロバイダーで物理キューを作成しません。これは特定の Jakarta Messaging プロバイダーに固有であるため、Jakarta Messaging は物理キューを作成する方法を提供しません。物理キューの作成はプロバイダー固有であり、通常は管理者が実行する管理タスクですが、一部のプロバイダーは必要に応じて自動的に作成する場合があります。これに対する 1 つの例外は、一時的なキューの作成です。これは、
createTemporaryQueueメソッドを使用して行われます。- パラメーター:
queueName- プロバイダー固有のキュー名- 戻り値:
- 指定された名前をカプセル化する Queue オブジェクト
- 例外:
JMSRuntimeException- 内部エラーのために Queue オブジェクトを作成できない場合
createTopic
Topic createTopic(StringSE topicName)
指定されたプロバイダー固有のトピック名をカプセル化するTopicオブジェクトを作成します。アプリケーションでプロバイダー固有のトピック名を使用すると、アプリケーションが移植できなくなる場合があります。ポータブルアプリケーションでは、このメソッドを使用せずに、JNDI を使用して管理上定義された
Topicオブジェクトを検索することをお勧めします。このメソッドは、トピックの名前をカプセル化するオブジェクトを作成するだけであることに注意してください。Jakarta Messaging プロバイダーで物理トピックを作成しません。これは特定の Jakarta Messaging プロバイダーに固有であるため、Jakarta Messaging は物理トピックを作成する方法を提供しません。物理トピックの作成はプロバイダー固有であり、通常は管理者が実行する管理タスクですが、一部のプロバイダーは必要に応じて自動的に作成する場合があります。これに対する 1 つの例外は、一時的なトピックの作成です。これは、
createTemporaryTopicメソッドを使用して行われます。- パラメーター:
topicName- プロバイダー固有のトピック名- 戻り値:
- 指定された名前をカプセル化する Topic オブジェクト
- 例外:
JMSRuntimeException- 内部エラーのためにトピックオブジェクトを作成できない場合
createDurableConsumer
JMSConsumer createDurableConsumer(Topic topic, StringSE name)
指定されたトピックに非共有の永続サブスクリプションを作成し(まだ存在しない場合)、その永続サブスクリプションにコンシューマーを作成します。このメソッドは、メッセージセレクターなしでnoLocal値がfalseの永続サブスクリプションを作成します。永続サブスクリプションは、アクティブなコンシューマーが関連付けられていないときにパブリッシュされたメッセージを含め、トピックでパブリッシュされたすべてのメッセージを受信する必要があるアプリケーションによって使用されます。Jakarta Messaging プロバイダーは、この永続サブスクリプションの記録を保持し、トピックのパブリッシャーからのすべてのメッセージが、この永続サブスクリプションのコンシューマーに配信されて確認されるまで、または期限が切れるまで保持されるようにします。
永続サブスクリプションは、
unsubscribeメソッドを使用して削除されるまでメッセージを蓄積し続けます。このメソッドは、非共有の永続サブスクリプションでのみ使用できます。このメソッドを使用して作成された永続サブスクリプションは共有解除されます。これは、サブスクリプション上に同時に存在できるアクティブな(つまり、クローズされていない)コンシューマーは 1 つだけであることを意味します。ここでの「コンシューマー」という用語は、任意のクライアントの
TopicSubscriber、MessageConsumer、JMSConsumerオブジェクトを意味します。非共有の永続サブスクリプションは、クライアントによって指定された名前と、設定する必要があるクライアント識別子によって識別されます。その後、非共有の永続サブスクリプションでコンシューマーを作成することを望むアプリケーションは、同じクライアント識別子を使用する必要があります。
同じ名前とクライアント識別子を持つ非共有の永続サブスクリプションがすでに存在し、同じトピック、メッセージセレクター、
noLocal値が指定されており、永続サブスクリプションですでにアクティブな(つまり閉じていない)コンシューマーがない場合、このメソッドは既存の永続サブスクリプションのJMSConsumer。非共有の永続サブスクリプションが同じ名前とクライアント識別子ですでに存在し、永続サブスクリプションですでにアクティブな(つまり、閉じられていない)コンシューマーが存在する場合、
JMSRuntimeExceptionがスローされます。同じ名前とクライアント ID を持つ非共有の永続サブスクリプションがすでに存在しているが、トピック、メッセージセレクター、
noLocal値が異なる場合、永続サブスクリプションでアクティブな(つまり閉じていない)コンシューマーがない場合、これはサブスクライブ解除と同じです。(削除)古いものを作成し、新しいものを作成します。共有恒久サブスクリプションと非共有恒久サブスクリプションは、同じ名前とクライアント識別子を持つことはできません。同じ名前とクライアント識別子を持つ共有永続サブスクリプションがすでに存在する場合、
JMSRuntimeExceptionがスローされます。同じ名前と clientId を持つ永続サブスクリプションと共有非永続サブスクリプションには制限はありません。このようなサブスクリプションは完全に別々になります。
- パラメーター:
topic- サブスクライブする非一時的なTopicname- このサブスクリプションを識別するために使用される名前- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
InvalidDestinationRuntimeException- 無効なトピックが指定された場合。IllegalStateRuntimeException- クライアント識別子が設定されていない場合JMSRuntimeException-- 内部エラーのためにセッションが非共有の永続サブスクリプションと
JMSConsumerの作成に失敗した場合 - 非共有の永続サブスクリプションが同じ名前とクライアント識別子ですでに存在し、すでにアクティブなコンシューマーがある場合
- 同じ名前とクライアント識別子を持つ共有永続サブスクリプションがすでに存在する場合
- 内部エラーのためにセッションが非共有の永続サブスクリプションと
- 導入:
- JMS 2.0
createDurableConsumer
JMSConsumer createDurableConsumer(Topic topic, StringSE name, StringSE messageSelector, boolean noLocal)
メッセージセレクターとnoLocalパラメーターを指定して、指定されたトピック(まだ存在しない場合)に非共有の永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。永続サブスクリプションは、アクティブなコンシューマーが関連付けられていないときにパブリッシュされたメッセージを含め、トピックでパブリッシュされたすべてのメッセージを受信する必要があるアプリケーションによって使用されます。Jakarta Messaging プロバイダーは、この永続サブスクリプションの記録を保持し、トピックのパブリッシャーからのすべてのメッセージが、この永続サブスクリプションのコンシューマーに配信されて確認されるまで、または期限が切れるまで保持されるようにします。
永続サブスクリプションは、
unsubscribeメソッドを使用して削除されるまでメッセージを蓄積し続けます。このメソッドは、非共有の永続サブスクリプションでのみ使用できます。このメソッドを使用して作成された永続サブスクリプションは共有解除されます。これは、サブスクリプション上に同時に存在できるアクティブな(つまり、クローズされていない)コンシューマーは 1 つだけであることを意味します。ここでの「コンシューマー」という用語は、任意のクライアントの
TopicSubscriber、MessageConsumer、JMSConsumerオブジェクトを意味します。非共有の永続サブスクリプションは、クライアントによって指定された名前と、設定する必要があるクライアント識別子によって識別されます。その後、非共有の永続サブスクリプションでコンシューマーを作成することを望むアプリケーションは、同じクライアント識別子を使用する必要があります。
同じ名前とクライアント識別子を持つ非共有の永続サブスクリプションがすでに存在し、同じトピック、メッセージセレクター、
noLocal値が指定されており、永続サブスクリプションですでにアクティブな(つまり閉じていない)コンシューマーがない場合、このメソッドは既存の永続サブスクリプションのJMSConsumer。非共有の永続サブスクリプションが同じ名前とクライアント識別子ですでに存在し、永続サブスクリプションですでにアクティブな(つまり、閉じられていない)コンシューマーが存在する場合、
JMSRuntimeExceptionがスローされます。同じ名前とクライアント ID を持つ非共有の永続サブスクリプションがすでに存在しているが、トピック、メッセージセレクター、
noLocal値が異なる場合、永続サブスクリプションでアクティブな(つまり閉じていない)コンシューマーがない場合、これはサブスクライブ解除と同じです。(削除)古いものを作成し、新しいものを作成します。noLocalが true に設定されている場合、このJMSContextの接続、同じクライアント ID を持つ他の接続を使用してトピックに公開されたメッセージは、永続サブスクリプションに追加されません。共有恒久サブスクリプションと非共有恒久サブスクリプションは、同じ名前とクライアント識別子を持つことはできません。同じ名前とクライアント識別子を持つ共有永続サブスクリプションがすでに存在する場合、
JMSRuntimeExceptionがスローされます。同じ名前と clientId を持つ永続サブスクリプションと共有非永続サブスクリプションには制限はありません。このようなサブスクリプションは完全に別々になります。
このメソッドは、コンシューマーを表すために
TopicSubscriberではなくMessageConsumerを返すことを除いて、対応するcreateDurableSubscriberメソッドと同じです。- パラメーター:
topic- サブスクライブする非一時的なTopicname- このサブスクリプションを識別するために使用される名前messageSelector- メッセージセレクター式に一致するプロパティを持つメッセージのみが永続サブスクリプションに追加されます。null または空の文字列の値は、永続サブスクリプションにメッセージセレクタがないことを示します。noLocal- true の場合、このセッションの接続、同じクライアント識別子を持つその他の接続を使用してトピックにパブリッシュされたメッセージは、永続サブスクリプションに追加されません。- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
InvalidDestinationRuntimeException- 無効なトピックが指定された場合。InvalidSelectorRuntimeException- メッセージセレクタが無効な場合。IllegalStateRuntimeException- クライアント識別子が設定されていない場合JMSRuntimeException-- 内部エラーのためにセッションが非共有の永続サブスクリプションと
JMSConsumerの作成に失敗した場合 - 非共有の永続サブスクリプションが同じ名前とクライアント識別子ですでに存在し、すでにアクティブなコンシューマーがある場合
- 同じ名前とクライアント識別子を持つ共有永続サブスクリプションがすでに存在する場合
- 内部エラーのためにセッションが非共有の永続サブスクリプションと
- 導入:
- JMS 2.0
createSharedDurableConsumer
JMSConsumer createSharedDurableConsumer(Topic topic, StringSE name)
指定されたトピック(まだ存在しない場合)で共有永続サブスクリプションを作成し、メッセージセレクターを指定して、その永続サブスクリプションでコンシューマーを作成します。このメソッドは、メッセージセレクターなしで永続サブスクリプションを作成します。永続サブスクリプションは、アクティブなコンシューマーが関連付けられていないときにパブリッシュされたメッセージを含め、トピックでパブリッシュされたすべてのメッセージを受信する必要があるアプリケーションによって使用されます。Jakarta Messaging プロバイダーは、この永続サブスクリプションの記録を保持し、トピックのパブリッシャーからのすべてのメッセージが、この永続サブスクリプションのコンシューマーに配信されて確認されるまで、または期限が切れるまで保持されるようにします。
永続サブスクリプションは、
unsubscribeメソッドを使用して削除されるまでメッセージを蓄積し続けます。このメソッドは、共有永続サブスクリプションでのみ使用できます。このメソッドを使用して作成された永続サブスクリプションは共有されます。これは、サブスクリプションに複数のアクティブな(つまり、クローズされていない)コンシューマーが同時に存在する可能性があることを意味します。ここでの「コンシューマー」という用語は、任意のクライアントの
MessageConsumerまたはJMSConsumerオブジェクトを意味します。共有永続サブスクリプションは、クライアントによって指定された名前とクライアント識別子(未設定の場合があります)によって識別されます。その後、その共有永続サブスクリプションでコンシューマーを作成することを望むアプリケーションは、同じクライアント識別子を使用する必要があります。
同じ名前とクライアント ID(設定されている場合)を持つ共有永続サブスクリプションがすでに存在し、同じトピックとメッセージセレクターが指定されている場合、このメソッドは既存の共有永続サブスクリプションに
JMSConsumerを作成します。共有永続サブスクリプションが同じ名前とクライアント識別子(設定されている場合)ですでに存在しているが、別のトピックまたはメッセージセレクターが指定されており、永続サブスクリプションですでにアクティブな(つまり閉じていない)コンシューマーがない場合、これは次と同等です。古いものを購読解除(削除)して、新しいものを作成します。
共有恒久サブスクリプションが同じ名前とクライアント識別子(設定されている場合)ですでに存在し、別のトピックまたはメッセージセレクターが指定されていて、恒久サブスクリプションですでにアクティブな(つまり閉じていない)コンシューマーがある場合、
JMSRuntimeExceptionは投げられます。共有永続サブスクリプションと非共有永続サブスクリプションは、同じ名前とクライアント識別子(設定されている場合)を持たない場合があります。非共有の永続サブスクリプションが同じ名前とクライアント ID(設定されている場合)ですでに存在する場合、
JMSRuntimeExceptionがスローされます。メッセージセレクターが指定されている場合、メッセージセレクター式に一致するプロパティを持つメッセージのみがサブスクリプションに追加されます。
永続サブスクリプションと、同じ名前と clientId (未設定の場合もあります) を持つ共有非永続サブスクリプションには制限はありません。このようなサブスクリプションは完全に別々になります。
autoStartプロパティがsetAutoStart(boolean)でfalseに設定されていない限り、コンシューマーの作成時に自動的に行われるため、明示的にstart()メソッドを呼び出す必要はありません。- パラメーター:
topic- サブスクライブする非一時的なTopicname- このサブスクリプションを識別するために使用される名前- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
InvalidDestinationRuntimeException- 無効なトピックが指定された場合。JMSRuntimeException-- 内部エラーのためにセッションが共有永続サブスクリプションと
MessageConsumerの作成に失敗した場合 - 同じ名前とクライアント識別子を持つ共有永続サブスクリプションがすでに存在するが、トピックまたはメッセージセレクターが異なり、コンシューマーがすでにアクティブになっている場合
- 非共有の永続サブスクリプションが同じ名前とクライアント識別子ですでに存在する場合
- 内部エラーのためにセッションが共有永続サブスクリプションと
- 導入:
- JMS 2.0
createSharedDurableConsumer
JMSConsumer createSharedDurableConsumer(Topic topic, StringSE name, StringSE messageSelector)
メッセージセレクターを指定して、指定されたトピック(まだ存在しない場合)に共有永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。永続サブスクリプションは、アクティブなコンシューマーが関連付けられていないときにパブリッシュされたメッセージを含め、トピックでパブリッシュされたすべてのメッセージを受信する必要があるアプリケーションによって使用されます。Jakarta Messaging プロバイダーは、この永続サブスクリプションの記録を保持し、トピックのパブリッシャーからのすべてのメッセージが、この永続サブスクリプションのコンシューマーに配信されて確認されるまで、または期限が切れるまで保持されるようにします。
永続サブスクリプションは、
unsubscribeメソッドを使用して削除されるまでメッセージを蓄積し続けます。このメソッドは、共有永続サブスクリプションでのみ使用できます。このメソッドを使用して作成された永続サブスクリプションは共有されます。これは、サブスクリプションに複数のアクティブな(つまり、クローズされていない)コンシューマーが同時に存在する可能性があることを意味します。ここでの「コンシューマー」という用語は、任意のクライアントの
MessageConsumerまたはJMSConsumerオブジェクトを意味します。共有永続サブスクリプションは、クライアントによって指定された名前とクライアント識別子(未設定の場合があります)によって識別されます。その後、その共有永続サブスクリプションでコンシューマーを作成することを望むアプリケーションは、同じクライアント識別子を使用する必要があります。
同じ名前とクライアント識別子(設定されている場合)で共有永続サブスクリプションがすでに存在し、同じトピックとメッセージセレクターが指定されている場合、このメソッドは既存の共有永続サブスクリプションに
JMSConsumerを作成します。同じ名前とクライアント識別子(設定されている場合)で共有永続サブスクリプションがすでに存在するが、別のトピックまたはメッセージセレクターが指定されており、永続サブスクリプションですでにアクティブな(つまり閉じられていない)コンシューマーがない場合、これは同等です。古いものの購読を解除(削除)し、新しいものを作成します。
共有恒久サブスクリプションが同じ名前とクライアント識別子(設定されている場合)ですでに存在し、別のトピックまたはメッセージセレクターが指定されていて、恒久サブスクリプションですでにアクティブな(つまり閉じていない)コンシューマーがある場合、
JMSRuntimeExceptionは投げられます。共有永続サブスクリプションと非共有永続サブスクリプションは、同じ名前とクライアント識別子(設定されている場合)を持たない場合があります。非共有の永続サブスクリプションが同じ名前とクライアント ID(設定されている場合)ですでに存在する場合、
JMSRuntimeExceptionがスローされます。永続サブスクリプションと、同じ名前と clientId (未設定の場合もあります) を持つ共有非永続サブスクリプションには制限はありません。このようなサブスクリプションは完全に別々になります。
autoStartプロパティがsetAutoStart(boolean)でfalseに設定されていない限り、コンシューマーの作成時に自動的に行われるため、明示的にstart()メソッドを呼び出す必要はありません。- パラメーター:
topic- サブスクライブする非一時的なTopicname- このサブスクリプションを識別するために使用される名前messageSelector- メッセージセレクター式に一致するプロパティを持つメッセージのみが永続サブスクリプションに追加されます。null または空の文字列の値は、永続サブスクリプションにメッセージセレクタがないことを示します。- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
InvalidDestinationRuntimeException- 無効なトピックが指定された場合。InvalidSelectorRuntimeException- メッセージセレクタが無効な場合。JMSRuntimeException-- 内部エラーのためにセッションが共有永続サブスクリプションと
JMSConsumerの作成に失敗した場合 - 同じ名前とクライアント識別子を持つ共有永続サブスクリプションがすでに存在するが、トピックまたはメッセージセレクターが異なり、コンシューマーがすでにアクティブになっている場合
- 非共有の永続サブスクリプションが同じ名前とクライアント識別子ですでに存在する場合
- 内部エラーのためにセッションが共有永続サブスクリプションと
- 導入:
- JMS 2.0
createSharedConsumer
JMSConsumer createSharedConsumer(Topic topic, StringSE sharedSubscriptionName)
指定されたトピックに指定された名前で共有非永続サブスクリプションを作成し(まだ存在しない場合)、そのサブスクリプションにコンシューマーを作成します。このメソッドは、メッセージセレクターなしで非永続サブスクリプションを作成します。同じ名前とクライアント識別子(設定されている場合)を持つ共有の非永続サブスクリプションがすでに存在し、同じトピックとメッセージセレクターが指定されている場合、このメソッドは既存のサブスクリプションに
JMSConsumerを作成します。非永続的な共有サブスクリプションは、複数のコンシューマー間でトピックサブスクリプションからメッセージを受信する作業を共有できる必要があるクライアントによって使用されます。非永続的な共有サブスクリプションには複数のコンシューマーが存在する可能性があります。サブスクリプションからの各メッセージは、そのサブスクリプションの 1 つのコンシューマーにのみ配信されます。そのようなサブスクリプションは永続化されておらず、コンシューマーがいない場合は(サブスクリプションに関連付けられた未配信メッセージとともに)削除されます。ここでの「コンシューマー」という用語は、任意のクライアントの
MessageConsumerまたはJMSConsumerオブジェクトを意味します。共有の非永続サブスクリプションは、クライアントによって指定された名前とクライアント識別子(未設定の場合があります)によって識別されます。その後、その共有の非永続サブスクリプションにコンシューマーを作成することを望むアプリケーションは、同じクライアント ID を使用する必要があります。
同じ名前とクライアント識別子(設定されている場合)で共有された非永続サブスクリプションがすでに存在するが、異なるトピックまたはメッセージセレクター値が指定されており、サブスクリプションですでにアクティブな(つまり閉じられていない)コンシューマーがある場合、
JMSRuntimeExceptionがスローされます。永続サブスクリプションと、同じ名前と clientId (未設定の場合もあります) を持つ共有非永続サブスクリプションには制限はありません。このようなサブスクリプションは完全に別々になります。
autoStartプロパティがsetAutoStart(boolean)でfalseに設定されていない限り、コンシューマーの作成時に自動的に行われるため、明示的にstart()メソッドを呼び出す必要はありません。- パラメーター:
topic- サブスクライブするTopicsharedSubscriptionName- 共有の非永続サブスクリプションを識別するために使用される名前- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
JMSRuntimeException- 何らかの内部エラーのためにセッションが共有の非永続サブスクリプションとJMSContextの作成に失敗した場合。InvalidDestinationRuntimeException- 無効なトピックが指定された場合。InvalidSelectorRuntimeException- メッセージセレクタが無効な場合。
createSharedConsumer
JMSConsumer createSharedConsumer(Topic topic, StringSE sharedSubscriptionName, StringSE messageSelector)
メッセージセレクターを指定して、指定されたトピック(指定されていない場合)に指定された名前で共有の非永続サブスクリプションを作成し、そのサブスクリプションにコンシューマーを作成します。同じ名前とクライアント識別子(設定されている場合)を持つ共有の非永続サブスクリプションがすでに存在し、同じトピックとメッセージセレクターが指定されている場合、このメソッドは既存のサブスクリプションに
JMSConsumerを作成します。非永続的な共有サブスクリプションは、複数のコンシューマー間でトピックサブスクリプションからメッセージを受信する作業を共有できる必要があるクライアントによって使用されます。非永続的な共有サブスクリプションには複数のコンシューマーが存在する可能性があります。サブスクリプションからの各メッセージは、そのサブスクリプションの 1 つのコンシューマーにのみ配信されます。そのようなサブスクリプションは永続化されておらず、コンシューマーがいない場合は(サブスクリプションに関連付けられた未配信メッセージとともに)削除されます。ここでの「コンシューマー」という用語は、任意のクライアントの
MessageConsumerまたはJMSConsumerオブジェクトを意味します。共有の非永続サブスクリプションは、クライアントによって指定された名前とクライアント識別子(未設定の場合があります)によって識別されます。その後、その共有の非永続サブスクリプションにコンシューマーを作成することを望むアプリケーションは、同じクライアント ID を使用する必要があります。
同じ名前とクライアント識別子(設定されている場合)を持つ共有の非永続サブスクリプションがすでに存在するが、別のトピックまたはメッセージセレクターが指定されており、サブスクリプションですでにアクティブな(つまり閉じていない)コンシューマーがある場合、
JMSRuntimeException投げられます。永続サブスクリプションと、同じ名前と clientId (未設定の場合もあります) を持つ共有非永続サブスクリプションには制限はありません。このようなサブスクリプションは完全に別々になります。
autoStartプロパティがsetAutoStart(boolean)でfalseに設定されていない限り、コンシューマーの作成時に自動的に行われるため、明示的にstart()メソッドを呼び出す必要はありません。- パラメーター:
topic- サブスクライブするTopicsharedSubscriptionName- 共有の非永続サブスクリプションを識別するために使用される名前messageSelector- メッセージセレクター式に一致するプロパティを持つメッセージのみが、共有の非永続サブスクリプションに追加されます。null または空の文字列の値は、共有の非永続サブスクリプションにメッセージセレクターがないことを示します。- 戻り値:
- 作成された
JMSConsumerオブジェクト。 - 例外:
JMSRuntimeException- 何らかの内部エラーのためにセッションが共有の非永続サブスクリプションとJMSConsumerの作成に失敗した場合。InvalidDestinationRuntimeException- 無効なトピックが指定された場合。InvalidSelectorRuntimeException- メッセージセレクタが無効な場合。
createBrowser
QueueBrowser createBrowser(Queue queue)
QueueBrowserオブジェクトを作成して、指定されたキューのメッセージを確認します。- パラメーター:
queue- アクセスするqueue- 戻り値:
- 作成された
QueueBrowserオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのためにセッションがブラウザーの作成に失敗した場合。InvalidDestinationRuntimeException- 無効な宛先が指定された場合
createBrowser
QueueBrowser createBrowser(Queue queue, StringSE messageSelector)
QueueBrowserオブジェクトを作成して、メッセージセレクターを使用して、指定されたキューのメッセージを確認します。- パラメーター:
queue- アクセスするqueuemessageSelector- メッセージセレクター式に一致するプロパティを持つメッセージのみが配信されます。null または空の文字列の値は、メッセージコンシューマーにメッセージセレクタがないことを示します。- 戻り値:
- 作成された
QueueBrowserオブジェクト。 - 例外:
JMSRuntimeException- 内部エラーのためにセッションがブラウザーの作成に失敗した場合。InvalidDestinationRuntimeException- 無効な宛先が指定された場合InvalidSelectorRuntimeException- メッセージセレクタが無効な場合。
createTemporaryQueue
TemporaryQueue createTemporaryQueue()
TemporaryQueueオブジェクトを作成します。以前に削除されない限り、その存続期間は JMSContext のConnectionの存続期間になります。- 戻り値:
- 一時的なキュー ID
- 例外:
JMSRuntimeException- 内部エラーのためにセッションが一時キューの作成に失敗した場合。
createTemporaryTopic
TemporaryTopic createTemporaryTopic()
TemporaryTopicオブジェクトを作成します。以前に削除されない限り、その存続期間は JMSContext のConnectionの存続期間になります。- 戻り値:
- 一時的なトピックのアイデンティティ
- 例外:
JMSRuntimeException- 内部エラーのためにセッションが一時トピックの作成に失敗した場合。
unsubscribe
void unsubscribe(StringSE name)
クライアントによって作成された永続サブスクリプションを登録解除します。このメソッドは、プロバイダーによってサブスクライバーに代わって維持されている状態を削除します。
永続サブスクリプションは、クライアントによって指定された名前と、設定されている場合はクライアント識別子によって識別されます。永続サブスクリプションの作成時にクライアント識別子が設定されていた場合、このメソッドを使用して永続サブスクリプションを削除するクライアントは、同じクライアント識別子を使用する必要があります。
そのサブスクリプションにアクティブな(閉じられていない)コンシューマーがある間、または消費されたメッセージが保留中のトランザクションの一部であるか、セッションで確認されていないときに、クライアントが永続サブスクリプションを削除するのは誤りです。
アクティブなコンシューマーが
JMSConsumerで表されている場合、そのオブジェクトまたはオブジェクトの作成に使用されたJMSContextのいずれかでcloseを呼び出すと、コンシューマーが非アクティブになり、サブスクリプションを削除できるようになります。アクティブなコンシューマーが
JMSContextでsetMessageListenerを呼び出すことによって作成された場合、JMSContextでcloseを呼び出すと、コンシューマーが非アクティブになり、サブスクリプションを削除できるようになります。アクティブなコンシューマーが
MessageConsumerまたはTopicSubscriberで表されている場合、そのオブジェクトまたはオブジェクトの作成に使用されたSessionまたはConnectionでcloseを呼び出すと、コンシューマーが非アクティブになり、サブスクリプションを削除できるようになります。- パラメーター:
name- このサブスクリプションを識別するために使用される名前- 例外:
JMSRuntimeException- 内部エラーのためにセッションが永続サブスクリプションへのサブスクライブに失敗した場合。InvalidDestinationRuntimeException- 無効なサブスクリプション名が指定された場合。
acknowledge
void acknowledge()
JMSContext のセッションによって消費されたすべてのメッセージを確認します。このメソッドは、セッションの確認応答モードが CLIENT_ACKNOWLEDGE の場合に使用します。セッションが処理されているか、確認モードが AUTO_ACKNOWLEDGE または DUPS_OK_ACKNOWLEDGE の場合、このメソッドを呼び出しても効果はありません。
このメソッドは、
Messageのacknowledgeメソッドと同じ動作をします。クライアントは、消費された各メッセージを個別に確認することも、アプリケーション定義のグループとしてメッセージを確認することを選択することもできます。どちらの場合も、これら 2 つの方法のどちらを使用しても違いはありません。受信したが確認応答されていないメッセージは、再配信される場合があります。
JMSContextがコンテナー管理(注入)されている場合は、このメソッドを使用しないでください。これを行うと、IllegalStateRuntimeExceptionがスローされます。- 例外:
IllegalStateRuntimeException-JMSContextが閉じている場合。JMSContextがコンテナー管理されている場合 (注入された)
JMSRuntimeException- 内部エラーが原因で Jakarta Messaging プロバイダーがメッセージの確認に失敗した場合- 関連事項:
Session.CLIENT_ACKNOWLEDGE,Message.acknowledge()