インターフェース 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 int
AUTO_ACKNOWLEDGE
このセッションモードでは、JMSContext のセッションは、セッションがreceive
の呼び出しから正常に戻ったとき、またはセッションがメッセージを処理するために呼び出したメッセージリスナーが正常に戻ったときに、クライアントがメッセージを受信したことを自動的に確認します。static int
CLIENT_ACKNOWLEDGE
このセッションモードでは、クライアントはメッセージのacknowledge
メソッドを呼び出すことにより、消費されたメッセージを確認します。static int
DUPS_OK_ACKNOWLEDGE
このセッションモードは、JMSContext のセッションにメッセージの配信を遅延確認するように指示します。static int
SESSION_TRANSACTED
このセッションモードは、JMSContext のセッションに、ローカルトランザクションでメッセージを配信および消費するように指示します。メッセージは、後でcommit
を呼び出すことによってコミットされるか、rollback
を呼び出すことによってロールバックされます。
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 void
acknowledge()
JMSContext のセッションによって消費されたすべてのメッセージを確認します。void
close()
JMSContext を閉じますvoid
commit()
このトランザクションで実行されたすべてのメッセージをコミットし、現在保持されているロックを解放します。QueueBrowser
createBrowser(Queue queue)
QueueBrowser
オブジェクトを作成して、指定されたキューのメッセージを確認します。QueueBrowser
createBrowser(Queue queue, StringSE messageSelector)
QueueBrowser
オブジェクトを作成して、メッセージセレクターを使用して、指定されたキューのメッセージを確認します。BytesMessage
createBytesMessage()
BytesMessage
オブジェクトを作成します。JMSConsumer
createConsumer(Destination destination)
指定された宛先のJMSConsumer
を作成します。JMSConsumer
createConsumer(Destination destination, StringSE messageSelector)
メッセージセレクターを使用して、指定した宛先のJMSConsumer
を作成します。JMSConsumer
createConsumer(Destination destination, StringSE messageSelector, boolean noLocal)
メッセージセレクターとnoLocal
パラメーターを指定して、指定した宛先のJMSConsumer
を作成します。JMSContext
createContext(int sessionMode)
このJMSContext
と同じ接続を使用して、指定されたセッションモードで新しいJMSContext
を作成し、新しいセッションを作成します。JMSConsumer
createDurableConsumer(Topic topic, StringSE name)
指定されたトピックに共有されていない永続サブスクリプションを作成し(まだ存在しない場合)、その永続サブスクリプションにコンシューマーを作成します。JMSConsumer
createDurableConsumer(Topic topic, StringSE name, StringSE messageSelector, boolean noLocal)
メッセージセレクターとnoLocal
パラメーターを指定して、指定されたトピック(まだ存在しない場合)に非共有の永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。MapMessage
createMapMessage()
MapMessage
オブジェクトを作成します。Message
createMessage()
Message
オブジェクトを作成します。ObjectMessage
createObjectMessage()
ObjectMessage
オブジェクトを作成します。ObjectMessage
createObjectMessage(SerializableSE object)
初期化されたObjectMessage
オブジェクトを作成します。JMSProducer
createProducer()
メッセージの構成と送信に使用できる新しいJMSProducer
オブジェクトを作成しますQueue
createQueue(StringSE queueName)
指定されたプロバイダー固有のキュー名をカプセル化するQueue
オブジェクトを作成します。JMSConsumer
createSharedConsumer(Topic topic, StringSE sharedSubscriptionName)
指定されたトピックに指定された名前で共有の非永続サブスクリプションを作成し(まだ存在しない場合)、そのサブスクリプションにコンシューマーを作成します。JMSConsumer
createSharedConsumer(Topic topic, StringSE sharedSubscriptionName, StringSE messageSelector)
メッセージセレクターを指定して、指定されたトピック(指定されていない場合)に指定された名前で共有の非永続サブスクリプションを作成し、そのサブスクリプションにコンシューマーを作成します。JMSConsumer
createSharedDurableConsumer(Topic topic, StringSE name)
メッセージセレクターを指定して、指定されたトピック(まだ存在しない場合)に共有永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。JMSConsumer
createSharedDurableConsumer(Topic topic, StringSE name, StringSE messageSelector)
メッセージセレクターを指定して、指定されたトピック(まだ存在しない場合)に共有永続サブスクリプションを作成し、その永続サブスクリプションにコンシューマーを作成します。StreamMessage
createStreamMessage()
StreamMessage
オブジェクトを作成します。TemporaryQueue
createTemporaryQueue()
TemporaryQueue
オブジェクトを作成します。TemporaryTopic
createTemporaryTopic()
TemporaryTopic
オブジェクトを作成します。TextMessage
createTextMessage()
TextMessage
オブジェクトを作成します。TextMessage
createTextMessage(StringSE text)
初期化されたTextMessage
オブジェクトを作成します。Topic
createTopic(StringSE topicName)
指定されたプロバイダー固有のトピック名をカプセル化するTopic
オブジェクトを作成します。boolean
getAutoStart()
このJMSContext
で使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうかを返します。StringSE
getClientID()
JMSContext の接続のクライアント識別子を取得します。ExceptionListener
getExceptionListener()
JMSContext の接続用のExceptionListener
オブジェクトを取得します。ConnectionMetaData
getMetaData()
JMSContext の接続の接続メタデータを取得します。int
getSessionMode()
JMSContext のセッションのセッションモードを返します。boolean
getTransacted()
JMSContext のセッションがトランザクションモードであるかどうかを示します。void
recover()
JMSContext のセッションでメッセージ配信を停止し、最も古い未確認メッセージでメッセージ配信を再開します。void
rollback()
このトランザクションで実行されたメッセージをロールバックし、現在保持されているロックを解放します。void
setAutoStart(boolean autoStart)
このJMSContext
によって使用される基になる接続が、コンシューマーの作成時に自動的に開始されるかどうかを指定します。void
setClientID(StringSE clientID)
JMSContext の接続のクライアント識別子を設定します。void
setExceptionListener(ExceptionListener listener)
JMSContext の接続の例外リスナーを設定します。void
start()
JMSContext の接続による受信メッセージの配信を開始(または再開)します。void
stop()
JMSContext の接続による受信メッセージの配信を一時的に停止します。void
unsubscribe(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
- アクセスするDestination
messageSelector
- メッセージセレクタ式に一致するプロパティを持つメッセージのみが配信されます。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
- アクセスするDestination
messageSelector
- メッセージセレクタ式に一致するプロパティを持つメッセージのみが配信されます。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
- サブスクライブする非一時的なTopic
name
- このサブスクリプションを識別するために使用される名前- 戻り値:
- 作成された
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
- サブスクライブする非一時的なTopic
name
- このサブスクリプションを識別するために使用される名前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
- サブスクライブする非一時的なTopic
name
- このサブスクリプションを識別するために使用される名前- 戻り値:
- 作成された
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
- サブスクライブする非一時的なTopic
name
- このサブスクリプションを識別するために使用される名前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
- サブスクライブするTopic
sharedSubscriptionName
- 共有の非永続サブスクリプションを識別するために使用される名前- 戻り値:
- 作成された
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
- サブスクライブするTopic
sharedSubscriptionName
- 共有の非永続サブスクリプションを識別するために使用される名前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
- アクセスするqueue
messageSelector
- メッセージセレクター式に一致するプロパティを持つメッセージのみが配信されます。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()