インターフェース 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
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 修飾子と型 メソッド 説明 voidclose()JMSConsumerを閉じます。MessageListenergetMessageListener()JMSConsumerのMessageListenerを取得します。StringSEgetMessageSelector()このJMSConsumerのメッセージセレクター式を取得します。Messagereceive()このJMSConsumer用に作成された次のメッセージを受け取ります。Messagereceive(long timeout)指定されたタイムアウト間隔内に到着する次のメッセージを受信します。<T> TreceiveBody(ClassSE<T> c)このJMSConsumerに対して生成された次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。<T> TreceiveBody(ClassSE<T> c, long timeout)このJMSConsumerに対して生成された、指定されたタイムアウト期間内に到着する次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。<T> TreceiveBodyNoWait(ClassSE<T> c)このJMSConsumerがすぐに使用可能になった場合に生成される次のメッセージを受信し、その本文を指定された型のオブジェクトとして返します。MessagereceiveNoWait()次のメッセージがすぐに利用可能な場合、受信します。voidsetMessageListener(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 プロバイダーが次のメッセージを受信できない場合