インターフェース JMSConsumer
- すべてのスーパーインターフェース:
AutoCloseableSE
public interface JMSConsumer extends AutoCloseableSE
Jakarta Messaging 2.0 用に導入された簡略化された Jakarta Messaging API を使用するクライアントは、JMSConsumer
オブジェクトを使用して、キューまたはトピックからメッセージを受信します。JMSConsumer
オブジェクトは、Queue
またはTopic
オブジェクトをJMSContext
のcreateConsumer
メソッドの 1 つに渡すことによって作成できます。または、Topic
オブジェクトをJMSContext
のcreateSharedConsumer
またはcreateDurableConsumer
メソッドのいずれかに渡すことJMSConsumer
は、メッセージセレクターを使用して作成できます。メッセージセレクターを使用すると、クライアントはJMSConsumer
に配信されるメッセージをセレクターに一致するメッセージに制限できます。クライアントは、
JMSConsumer
のメッセージを同期的に受信するか、JMSConsumer
にメッセージの到着時に非同期で配信させることができます。同期受信の場合、クライアントは、
receive
メソッドの 1 つを使用して、JMSConsumer
から次のメッセージをリクエストできます。クライアントがポーリングしたり、次のメッセージを待機したりできるようにするreceive
にはいくつかのバリエーションがあります。非同期配信の場合、クライアントは
MessageListener
オブジェクトをJMSConsumer
に登録できます。メッセージがJMSConsumer
に到着すると、MessageListener
のonMessage
メソッドを呼び出してメッセージを配信します。MessageListener
が例外をスローするのはクライアントプログラミングエラーです。- 導入:
- JMS 2.0
- バージョン:
- Jakarta Messaging 2.0
- 関連事項:
JMSContext
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 void
close()
JMSConsumer
を閉じます。MessageListener
getMessageListener()
JMSConsumer
のMessageListener
を取得します。StringSE
getMessageSelector()
このJMSConsumer
のメッセージセレクター式を取得します。Message
receive()
このJMSConsumer
用に作成された次のメッセージを受け取ります。Message
receive(long timeout)
指定されたタイムアウト間隔内に到着する次のメッセージを受信します。<T> T
receiveBody(ClassSE<T> c)
このJMSConsumer
に対して生成された次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。<T> T
receiveBody(ClassSE<T> c, long timeout)
このJMSConsumer
に対して生成された、指定されたタイムアウト期間内に到着する次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。<T> T
receiveBodyNoWait(ClassSE<T> c)
このJMSConsumer
がすぐに使用可能になった場合に生成される次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。Message
receiveNoWait()
次のメッセージがすぐに利用可能な場合、受信します。void
setMessageListener(MessageListener listener)
JMSConsumer
のMessageListener
を設定します。
メソッドの詳細
getMessageSelector
StringSE getMessageSelector()
このJMSConsumer
のメッセージセレクター式を取得します。- 戻り値:
- この
JMSConsumer
のメッセージセレクター、またはJMSConsumer
のメッセージセレクターが存在しない場合は null (つまり、メッセージセレクターが設定されていないか、null または空の文字列に設定されている場合) - 例外:
JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーがメッセージセレクターの取得に失敗した場合。
getMessageListener
MessageListener getMessageListener() throws JMSRuntimeException
JMSConsumer
のMessageListener
を取得します。このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、
JMSRuntimeException
がスローされる可能性があります。- 戻り値:
JMSConsumer
のMessageListener
、または設定されていない場合は null- 例外:
JMSRuntimeException
- 次のいずれかの理由で Jakarta Messaging プロバイダーがMessageListener
の取得に失敗した場合:- 内部エラーが発生した、または
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されました (この場合、例外がスローされることは保証されていませんが)
- 関連事項:
setMessageListener(jakarta.jms.MessageListener)
setMessageListener
void setMessageListener(MessageListener listener) throws JMSRuntimeException
JMSConsumer
のMessageListener
を設定します。MessageListener
を null に設定することは、JMSConsumer
のMessageListener
を設定解除することと同じです。メッセージが既存のリスナーによって消費されている間、または
JMSConsumer
がメッセージを同期的に消費するために使用されているときに、このメソッドを呼び出す効果は定義されていません。このメソッドは、Jakarta EE Web または EJB アプリケーションでは使用しないでください。保証されていませんが、
JMSRuntimeException
がスローされる可能性があります。- パラメーター:
listener
- メッセージの配信先のリスナー- 例外:
JMSRuntimeException
- Jakarta Messaging プロバイダーが次のいずれかの理由でJMSConsumer
のMessageListener
の設定に失敗した場合:- 内部エラーが発生した、または
- このメソッドは Jakarta EE Web または EJB アプリケーションで呼び出されました (この場合、例外がスローされることは保証されていませんが)
- 関連事項:
getMessageListener()
receive
Message receive()
このJMSConsumer
用に作成された次のメッセージを受け取ります。この呼び出しは、メッセージが生成されるまで、またはこの
JMSConsumer
が閉じられるまで、無期限にブロックされます。この
receive
がトランザクション内で実行される場合、JMSConsumer は、トランザクションがコミットされるまでメッセージを保持します。- 戻り値:
- この
JMSConsumer
に対して生成される次のメッセージ、またはこのJMSConsumer
が同時に閉じられている場合は null - 例外:
JMSRuntimeException
- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。
receive
Message receive(long timeout)
指定されたタイムアウト間隔内に到着する次のメッセージを受信します。この呼び出しは、メッセージが到着するか、タイムアウトが期限切れになるか、この
JMSConsumer
が閉じられるまでブロックされます。ゼロのtimeout
が期限切れになることはなく、呼び出しは無期限にブロックされます。- パラメーター:
timeout
- タイムアウト値 (ミリ秒単位)- 戻り値:
- この
JMSConsumer
に対して生成される次のメッセージ、またはタイムアウトが期限切れになるか、このJMSConsumer
が同時に閉じられる場合は null - 例外:
JMSRuntimeException
- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。
receiveNoWait
Message receiveNoWait()
次のメッセージがすぐに利用可能な場合、受信します。- 戻り値:
- この
JMSConsumer
に対して生成される次のメッセージ、または使用できない場合は null - 例外:
JMSRuntimeException
- 内部エラーのために Jakarta Messaging プロバイダーが次のメッセージを受信できない場合。
close
void close()
JMSConsumer
を閉じます。プロバイダーは、Java 仮想マシンの外部で
JMSConsumer
に代わって一部のリソースを割り当てる可能性があるため、クライアントは、必要のないときに閉じる必要があります。最終的にこれらのリソースを再利用するためにガベージコレクションに依存することは、十分なタイムリーではない可能性があります。この呼び出しは、このコンシューマーで進行中の
receive
呼び出しが完了するまでブロックされます。ブロックされたreceive
呼び出しは、このコンシューマーが閉じられると null を返します。メッセージリスナーが別のスレッドで進行しているときにこのメソッドが呼び出されると、メッセージリスナーが完了するまでブロックされます。
このメソッドは、それ自体のコンシューマー上のメッセージリスナーの
onMessage
メソッドから呼び出すことができます。このメソッドが戻った後、onMessage
メソッドは正常に完了することができます。このメソッドは、同時に呼び出すことができる唯一の
JMSConsumer
メソッドです。- 次で指定:
- インターフェース
AutoCloseableSE
のclose
- 例外:
JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーがコンシューマーを閉じることができない場合。
receiveBody
<T> T receiveBody(ClassSE<T> c)
このJMSConsumer
に対して生成された次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。このメソッドは、メッセージに指定された型に割り当てることができる本文が含まれている限り、StreamMessage
とMessage
を除くすべての型のメッセージを受信するために使用できます。これは、指定されたクラスまたはインターフェースが、メッセージ本文のクラスと同じであるか、スーパークラスまたはスーパーインターフェースである必要があることを意味します。メッセージがサポートされている型の 1 つではない場合、メッセージの本文を指定された型に割り当てることができない場合、またはメッセージに本文がない場合は、MessageFormatRuntimeException
がスローされます。このメソッドは、メッセージヘッダーまたはプロパティ(
JMSRedelivered
メッセージヘッダーフィールドやJMSXDeliveryCount
メッセージプロパティなど)へのアクセスを許可しないため、アプリケーションがそれらにアクセスする必要がない場合にのみ使用する必要があります。この呼び出しは、メッセージが生成されるまで、またはこの
JMSConsumer
が閉じられるまで、無期限にブロックされます。このメソッドがトランザクション内で呼び出された場合、
JMSConsumer
は、トランザクションがコミットされるまでメッセージを保持します。このメソッドが
MessageFormatRuntimeException
をスローした結果は、セッションモードによって異なります。AUTO_ACKNOWLEDGE
またはDUPS_OK_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが失敗しなかったかのように動作します。メッセージは、後続のメッセージの前に再度配信されます。これは再配信とは見なされず、JMSRedelivered
メッセージヘッダーフィールドが設定されたり、JMSXDeliveryCount
メッセージプロパティがインクリメントされたりすることはありません。CLIENT_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。CLIENT_ACKNOWLEDGE
のセッションモードで配信される他のメッセージと同様に、JMSContext
でacknowledge
が呼び出されるまで、メッセージは確認応答されません。アプリケーションが失敗したメッセージの再配信を希望する場合は、JMSContext
でrecover
を呼び出す必要があります。再配信されたメッセージのJMSRedelivered
メッセージヘッダーフィールドが設定され、そのJMSXDeliveryCount
メッセージプロパティがインクリメントされます。- 取引セッション: Jakarta Messaging プロバイダーは、
receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。トランザクションセッションで配信される他のメッセージと同様に、トランザクションは、アプリケーションによってコミットまたはロールバックされるまで、コミットされないままになります。アプリケーションが失敗したメッセージの再配信を希望する場合は、トランザクションをロールバックする必要があります。再配信されたメッセージのJMSRedelivered
メッセージヘッダーフィールドが設定され、そのJMSXDeliveryCount
メッセージプロパティがインクリメントされます。
- 型パラメーター:
T
- メッセージ本文の型- パラメーター:
c
- 次のメッセージの本文を割り当てる型。
次のメッセージがTextMessage
であると予想される場合は、これをString.class
またはString
が割り当て可能な別のクラスに設定する必要があります。
次のメッセージがObjectMessage
であると予想される場合は、これをjava.io.Serializable.class
または本文が割り当て可能な別のクラスに設定する必要があります。
次のメッセージがMapMessage
であると予想される場合は、これをjava.util.Map.class
(またはjava.lang.Object.class
)に設定する必要があります。
次のメッセージがBytesMessage
であると予想される場合は、これをbyte[].class
(またはjava.lang.Object.class
)に設定する必要があります。- 戻り値:
- この
JMSConsumer
に対して生成される次のメッセージの本文、またはこのJMSConsumer
が同時に閉じられている場合は null - 例外:
MessageFormatRuntimeException
-- メッセージが上記のサポートされている型のいずれでもない場合
- メッセージ本文を指定された型に割り当てることができない場合
- メッセージに本文がない場合
- メッセージが
ObjectMessage
であり、オブジェクトの逆直列化が失敗した場合。
JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーが次のメッセージを受信できない場合
receiveBody
<T> T receiveBody(ClassSE<T> c, long timeout)
このJMSConsumer
に対して生成された、指定されたタイムアウト期間内に到着する次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。このメソッドは、メッセージに指定された型に割り当てることができる本文が含まれている限り、StreamMessage
とMessage
を除くすべての型のメッセージを受信するために使用できます。これは、指定されたクラスまたはインターフェースが、メッセージ本文のクラスと同じであるか、スーパークラスまたはスーパーインターフェースである必要があることを意味します。メッセージがサポートされている型の 1 つではない場合、メッセージの本文を指定された型に割り当てることができない場合、またはメッセージに本文がない場合は、MessageFormatRuntimeException
がスローされます。このメソッドは、メッセージヘッダーまたはプロパティ(
JMSRedelivered
メッセージヘッダーフィールドやJMSXDeliveryCount
メッセージプロパティなど)へのアクセスを許可しないため、アプリケーションがそれらにアクセスする必要がない場合にのみ使用する必要があります。この呼び出しは、メッセージが到着するか、タイムアウトが期限切れになるか、この
JMSConsumer
が閉じられるまでブロックされます。ゼロのタイムアウトが期限切れになることはなく、呼び出しは無期限にブロックされます。このメソッドがトランザクション内で呼び出された場合、
JMSConsumer
は、トランザクションがコミットされるまでメッセージを保持します。このメソッドが
MessageFormatRuntimeException
をスローした結果は、セッションモードによって異なります。AUTO_ACKNOWLEDGE
またはDUPS_OK_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが失敗しなかったかのように動作します。メッセージは、後続のメッセージの前に再度配信されます。これは再配信とは見なされず、JMSRedelivered
メッセージヘッダーフィールドが設定されたり、JMSXDeliveryCount
メッセージプロパティがインクリメントされたりすることはありません。CLIENT_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。CLIENT_ACKNOWLEDGE
のセッションモードで配信される他のメッセージと同様に、JMSContext
でacknowledge
が呼び出されるまで、メッセージは確認応答されません。アプリケーションが失敗したメッセージの再配信を希望する場合は、JMSContext
でrecover
を呼び出す必要があります。再配信されたメッセージのJMSRedelivered
メッセージヘッダーフィールドが設定され、そのJMSXDeliveryCount
メッセージプロパティがインクリメントされます。- 取引セッション: Jakarta Messaging プロバイダーは、
receiveBody
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。トランザクションセッションで配信される他のメッセージと同様に、トランザクションは、アプリケーションによってコミットまたはロールバックされるまで、コミットされないままになります。アプリケーションが失敗したメッセージの再配信を希望する場合は、トランザクションをロールバックする必要があります。再配信されたメッセージのJMSRedelivered
メッセージヘッダーフィールドが設定され、そのJMSXDeliveryCount
メッセージプロパティがインクリメントされます。
- 型パラメーター:
T
- メッセージ本文型- パラメーター:
c
- 次のメッセージの本文を割り当てる型。
次のメッセージがTextMessage
であると予想される場合は、これをString.class
またはString
が割り当て可能な別のクラスに設定する必要があります。
次のメッセージがObjectMessage
であると予想される場合は、これをjava.io.Serializable.class
または本文が割り当て可能な別のクラスに設定する必要があります。
次のメッセージがMapMessage
であると予想される場合は、これをjava.util.Map.class
(またはjava.lang.Object.class
)に設定する必要があります。
次のメッセージがBytesMessage
であると予想される場合は、これをbyte[].class
(またはjava.lang.Object.class
)に設定する必要があります。timeout
- このメソッドがブロックする最大時間。ゼロは無期限にブロックすることを意味します。- 戻り値:
- この
JMSConsumer
に対して生成される次のメッセージの本文、またはタイムアウトが期限切れになるか、このJMSConsumer
が同時に閉じられる場合は null - 例外:
MessageFormatRuntimeException
-- メッセージが上記のサポートされている型のいずれでもない場合
- メッセージ本文を指定された型に割り当てることができない場合
- メッセージに本文がない場合
- メッセージが
ObjectMessage
であり、オブジェクトの逆直列化が失敗した場合。
JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーが次のメッセージを受信できない場合
receiveBodyNoWait
<T> T receiveBodyNoWait(ClassSE<T> c)
このJMSConsumer
がすぐに使用可能になった場合に生成される次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。このメソッドは、メッセージに指定された型に割り当てることができる本文が含まれている限り、StreamMessage
とMessage
を除くすべての型のメッセージを受信するために使用できます。これは、指定されたクラスまたはインターフェースが、メッセージ本文のクラスと同じであるか、スーパークラスまたはスーパーインターフェースである必要があることを意味します。メッセージがサポートされている型の 1 つではない場合、メッセージの本文を指定された型に割り当てることができない場合、またはメッセージに本文がない場合は、MessageFormatRuntimeException
がスローされます。このメソッドは、メッセージヘッダーまたはプロパティ(
JMSRedelivered
メッセージヘッダーフィールドやJMSXDeliveryCount
メッセージプロパティなど)へのアクセスを許可しないため、アプリケーションがそれらにアクセスする必要がない場合にのみ使用する必要があります。メッセージがすぐに利用できない場合は、null が返されます。
このメソッドがトランザクション内で呼び出された場合、
JMSConsumer
は、トランザクションがコミットされるまでメッセージを保持します。このメソッドが
MessageFormatRuntimeException
をスローした結果は、セッションモードによって異なります。AUTO_ACKNOWLEDGE
またはDUPS_OK_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBodyNoWait
への呼び出しが失敗しなかったかのように動作します。メッセージは、後続のメッセージの前に再度配信されます。これは再配信とは見なされず、JMSRedelivered
メッセージヘッダーフィールドが設定されたり、JMSXDeliveryCount
メッセージプロパティがインクリメントされたりすることはありません。CLIENT_ACKNOWLEDGE
: Jakarta Messaging プロバイダーは、receiveBodyNoWait
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。CLIENT_ACKNOWLEDGE
のセッションモードで配信される他のメッセージと同様に、JMSContext
でacknowledge
が呼び出されるまで、メッセージは確認応答されません。アプリケーションが失敗したメッセージの再配信を希望する場合は、JMSContext
でrecover
を呼び出す必要があります。再配信されたメッセージのJMSRedelivered
メッセージヘッダーフィールドが設定され、そのJMSXDeliveryCount
メッセージプロパティがインクリメントされます。- 取引セッション: Jakarta Messaging プロバイダーは、
receiveBodyNoWait
への呼び出しが成功したかのように動作し、メッセージを再度配信しません。トランザクションセッションで配信される他のメッセージと同様に、トランザクションは、アプリケーションによってコミットまたはロールバックされるまで、コミットされないままになります。アプリケーションが失敗したメッセージの再配信を希望する場合は、トランザクションをロールバックする必要があります。再配信されたメッセージのJMSRedelivered
メッセージヘッダーフィールドが設定され、そのJMSXDeliveryCount
メッセージプロパティがインクリメントされます。
- 型パラメーター:
T
- メッセージ本文の型- パラメーター:
c
- 次のメッセージの本文を割り当てる型。
次のメッセージがTextMessage
であると予想される場合は、これをString.class
またはString
が割り当て可能な別のクラスに設定する必要があります。
次のメッセージがObjectMessage
であると予想される場合は、これをjava.io.Serializable.class
または本文が割り当て可能な別のクラスに設定する必要があります。
次のメッセージがMapMessage
であると予想される場合は、これをjava.util.Map.class
(またはjava.lang.Object.class
)に設定する必要があります。
次のメッセージがBytesMessage
であると予想される場合は、これをbyte[].class
(またはjava.lang.Object.class
)に設定する必要があります。- 戻り値:
- この
JMSConsumer
に対して生成される次のメッセージの本文、またはメッセージがすぐに使用できない場合、このJMSConsumer
が同時に閉じられている場合は null - 例外:
MessageFormatRuntimeException
-- メッセージが上記のサポートされている型のいずれでもない場合
- メッセージ本文を指定された型に割り当てることができない場合
- メッセージに本文がない場合
- メッセージが
ObjectMessage
であり、オブジェクトの逆直列化が失敗した場合。
JMSRuntimeException
- 内部エラーが原因で Jakarta Messaging プロバイダーが次のメッセージを受信できない場合