クラス AbstractMessageListenerContainer
- 実装されたすべてのインターフェース:
Aware
、BeanNameAware
、DisposableBean
、InitializingBean
、Lifecycle
、Phased
、SmartLifecycle
、MessageListenerContainer
MessageListener
EE または Spring の SessionAwareMessageListener
をホストできます。 通常、すべてのリスナーが登録されることになっている単一の JMS Connection
EE を保持します。これは、リスナーセッションを管理する標準の JMS 方法です。あるいは、Jakarta EE スタイルの XA 対応 JMS メッセージングのために、リスナーごとの新しい接続で使用することもできます。実際の登録プロセスは具象サブクラス次第です。
注 : このメッセージリスナーコンテナーのデフォルトの動作では、メッセージリスナーによってスローされた例外が JMS プロバイダーに伝播されることはありません。代わりに、そのような例外は WARN
レベルでログに記録されます。これは、付随の JMS プロバイダーの観点からは、そのようなリスナーが失敗することは決してないことを意味します。ただし、エラー処理が必要な場合は、ErrorHandler
戦略の実装を setErrorHandler(ErrorHandler)
メソッドに提供できます。JMSException は、ExceptionListener
EE が指定されている場合、それに加えて (ただしその後に) ErrorHandler
に渡されることに注意してください。
リスナーコンテナーは、次のメッセージ確認オプションを提供します。
- "sessionAcknowledgeMode" を "AUTO_ACKNOWLEDGE" に設定(デフォルト): このモードはコンテナーに依存します。
DefaultMessageListenerContainer
の場合、リスナー実行前に自動メッセージ確認が行われ、例外が発生した場合の再配信はなく、他のリスナー実行の中断が発生した場合の再配信もありません。SimpleMessageListenerContainer
の場合、リスナー実行後に自動メッセージ確認が行われ、ユーザー例外がスローされた場合の再配信はありませんが、リスナー実行中に JVM が停止した場合は再配信される可能性があります。あらゆるコンテナーバリアントで一貫して再配信を行うには、"CLIENT_ACKNOWLEDGE" モードを検討するか、代わりに "sessionTransacted" を "true" に設定することを推奨します。 - "sessionAcknowledgeMode" が "DUPS_OK_ACKNOWLEDGE" に設定されました: リスナー実行中 (
DefaultMessageListenerContainer
) または直後 (SimpleMessageListenerContainer
) の遅延メッセージ確認。ユーザー例外がスローされた場合は再配信されませんが、リスナー実行中に JVM が停止した場合は再配信される可能性があります。どのコンテナーバリアントでも一貫して再配信を行うには、"CLIENT_ACKNOWLEDGE" モードを検討するか、代わりに "sessionTransacted" を "true" に設定することをお勧めします。 - "sessionAcknowledgeMode" を "CLIENT_ACKNOWLEDGE" に設定: リスナーが正常に実行された後の自動メッセージ確認。ユーザー例外がスローされた場合、および他のリスナーの実行が中断された場合(JVM の停止など)の場合のベストエフォートの再配信。
- "sessionTransacted" を "true" に設定: リスナーが正常に実行された後のトランザクションの確認。ユーザー例外がスローされた場合、および他のリスナー実行が中断した場合(JVM が停止した場合など)の場合は、 再配信が保証されます。
重複メッセージ処理の問題には 2 つの解決策があります。
- ビジネスエンティティの存在チェックまたはプロトコルテーブルチェックの形式で、 重複メッセージ検出をリスナーに追加します。これは通常、受信メッセージに JMSRedelivered フラグが設定されている場合にのみ実行する必要があります (それ以外の場合は、そのまま処理します)。"sessionTransacted" を "true" に設定すると、JVM が最も不運な時点で停止した場合にのみ重複メッセージが表示されることに注意してください (つまり、ビジネスロジックの実行後、JMS 部分がコミットされる前)。重複メッセージ検出は、コーナーケースをカバーするためだけに存在します。
- または、 処理全体を XA トランザクションでラップして、JMS メッセージの受信とメッセージリスナーでのビジネスロジックの実行 (データベース操作などを含む) をカバーします。これは、外部の "transactionManager" (通常は
JtaTransactionManager
で、対応する XA 対応 JMSConnectionFactory
EE が "connectionFactory" として渡されます) を指定することによって、DefaultMessageListenerContainer
でのみサポートされます。
推奨:
- 一般的には、"sessionTransacted" を "true" に設定し、通常はリスナー実装によってトリガーされるローカルデータベーストランザクションと組み合わせて、Spring の標準トランザクション機能を使用することが推奨されます。これは、Tomcat またはスタンドアロン環境で適切に機能し、多くの場合、カスタム重複メッセージ検出と組み合わせて使用されます (同じメッセージを 2 回処理することが許容されない場合)。
- あるいは、完全に XA 対応の JMS プロバイダーの場合は、
JtaTransactionManager
を "transactionManager" として指定します。これは、通常は Jakarta EE サーバーで実行する場合ですが、JTA トランザクションマネージャーが存在する他の環境でも当てはまります。これにより、追加の実行時処理オーバーヘッドを犠牲にして、カスタム重複メッセージチェックなしで完全な「正確に 1 回」の保証が得られます。
トランザクションを外部で管理する必要がない場合は、JmsTransactionManager
よりも "sessionTransacted" フラグを強く推奨します。JTA を使用している場合、またはカスタムの外部トランザクション構成と同期する必要がある場合にのみ、トランザクションマネージャーを設定してください。
- 導入:
- 2.0
- 作成者:
- Juergen Hoeller, Stephane Nicoll, Brian Clozel
- 関連事項:
ネストされたクラスのサマリー
クラス org.springframework.jms.listener.AbstractJmsListeningContainer から継承されたネストクラス / インターフェース
AbstractJmsListeningContainer.SharedConnectionNotInitializedException
フィールドサマリー
クラス org.springframework.jms.listener.AbstractJmsListeningContainer から継承されたフィールド
lifecycleMonitor, sharedConnectionMonitor
クラス org.springframework.jms.support.destination.JmsDestinationAccessor から継承されたフィールド
RECEIVE_TIMEOUT_INDEFINITE_WAIT, RECEIVE_TIMEOUT_NO_WAIT
クラス org.springframework.jms.support.JmsAccessor から継承されたフィールド
logger
インターフェース org.springframework.context.SmartLifecycle から継承されたフィールド
DEFAULT_PHASE
コンストラクターのサマリー
メソッドのサマリー
修飾子と型メソッド説明protected void
checkMessageListener
(ObjectSE messageListener) 指定されたメッセージリスナーを確認し、サポートされているリスナー型に対応していない場合は例外をスローします。protected void
commitIfNecessary
(SessionEE session, MessageEE message) 必要に応じて、コミットまたはメッセージ確認を実行します。protected MessageConsumerEE
createConsumer
(SessionEE session, DestinationEE destination) 指定されたセッションと宛先の JMS MessageConsumer を作成します。protected io.micrometer.observation.Observation
createObservation
(MessageEE message) protected void
doExecuteListener
(SessionEE session, MessageEE message) 指定されたリスナーを実行し、後でトランザクションをコミットまたはロールバックします(必要な場合)。protected void
doInvokeListener
(MessageListenerEE listener, MessageEE message) 指定されたリスナーを標準の JMSMessageListener
EE として呼び出します。protected void
doInvokeListener
(SessionAwareMessageListener listener, SessionEE session, MessageEE message) 指定されたリスナーを Spring SessionAwareMessageListener として呼び出し、要求された場合は新しい JMS セッションを(潜在的に独自のトランザクションで)リスナーに公開します。protected void
executeListener
(SessionEE session, MessageEE message) 指定されたリスナーを実行し、後でトランザクションをコミットまたはロールバックします(必要な場合)。protected StringSE
getDefaultSubscriptionName
(ObjectSE messageListener) 指定されたメッセージリスナーのデフォルトのサブスクリプション名を決定します。メッセージを受け取る宛先を返します。protected StringSE
このコンテナーの JMS 宛先を説明する文字列を返します(決してnull
ではありません)。メッセージを受信する宛先の名前を返します。作成する永続サブスクリプションの名前を返します(存在する場合)。Message
EE の処理中にスローされたキャッチされない例外が発生した場合に呼び出されるErrorHandler
を返します。登録されたメッセージリスナーまたは呼び出しインフラストラクチャ(存在する場合)によって JMSException がスローされた場合に通知する JMS ExceptionListener を返します。Message
EE があれば、それを変換するために使用できるMessageConverter
を返します。登録するメッセージリスナーオブジェクトを返します。JMS メッセージセレクター式(ない場合はnull
)を返します。io.micrometer.observation.ObservationRegistry
JMS message processing observations
の記録に使用されたObservationRegistry
を返します。応答を送信するときに使用するQosSettings
を返すか、ブローカーのデフォルトを使用する必要がある場合はnull
を返します。作成するサブスクリプションの名前を返します(ある場合)。protected void
リスナーの実行中に発生した特定の例外を処理します。protected void
登録されているErrorHandler
がある場合はそれを呼び出します。protected void
登録済みの JMS ExceptionListener があれば呼び出します。protected void
invokeListener
(SessionEE session, MessageEE message) 指定されたリスナーを呼び出す: 標準的な JMS の MessageListener または、(できれば)Spring の SessionAwareMessageListener。boolean
リスナーコンテナーが停止している間に受信メッセージを受け入れるかどうかを返します。boolean
リスナー JMSSession
EE を登録済みのSessionAwareMessageListener
に公開するかどうかを返します。boolean
独自の接続によって公開されたメッセージの配信を禁止するかどうかを返します。boolean
パブリッシュ / サブスクライブドメイン(Topics
EE)が返信に使用されるかどうかを返します。protected boolean
isSessionLocallyTransacted
(SessionEE session) 指定されたセッションがローカルでトランザクション処理されているかどうか、つまり、そのトランザクションが外部リスナーのコーディネーターではなく、このリスナーコンテナーのセッション処理によって管理されているかどうかを確認します。boolean
サブスクリプションを永続的にするかどうかを返します。boolean
サブスクリプションを共有するかどうかを返します。protected void
rollbackIfNecessary
(SessionEE session) 必要に応じて、ロールバックを実行します。protected void
rollbackOnExceptionIfNecessary
(SessionEE session, ThrowableSE ex) ロールバックを実行し、ロールバック例外を適切に処理します。void
setAcceptMessagesWhileStopping
(boolean acceptMessagesWhileStopping) リスナコンテナーの停止中に受信メッセージを受け入れるかどうかを設定します。abstract void
setConcurrency
(StringSE concurrency) 同時実行制限を指定します。void
setDestination
(DestinationEE destination) メッセージの送信先を設定します。void
setDestinationName
(StringSE destinationName) メッセージを受信する宛先の名前を設定します。void
setDurableSubscriptionName
(StringSE durableSubscriptionName) 作成する永続サブスクリプションの名前を設定します。void
setErrorHandler
(ErrorHandler errorHandler) Message
EE の処理中にスローされたキャッチされない例外が発生した場合に呼び出されるErrorHandler
を設定します。void
setExceptionListener
(ExceptionListenerEE exceptionListener) 登録されたメッセージリスナーまたは呼び出しインフラストラクチャによって JMSException がスローされた場合に通知するように JMS ExceptionListener を設定します。void
setExposeListenerSession
(boolean exposeListenerSession) リスナー JMS セッションを登録済みのSessionAwareMessageListener
およびJmsTemplate
呼び出しに公開するかどうかを設定します。void
setMessageConverter
(MessageConverter messageConverter) JMS メッセージを変換するためのMessageConverter
戦略を設定します。void
setMessageListener
(ObjectSE messageListener) 登録するメッセージリスナーの実装を設定します。void
setMessageSelector
(StringSE messageSelector) JMS メッセージセレクター式を設定します(ない場合はnull
)。void
setObservationRegistry
(io.micrometer.observation.ObservationRegistry observationRegistry) JMS message processing observations
の記録に使用するObservationRegistry
を設定します。void
setPubSubNoLocal
(boolean pubSubNoLocal) 独自の接続によって公開されたメッセージの配信を禁止するかどうかを設定します。void
setReplyPubSubDomain
(boolean replyPubSubDomain) 返信先の種類を設定します。void
setReplyQosSettings
(QosSettings replyQosSettings) 返信を送信するときに使用するQosSettings
を構成します。void
setSubscriptionDurable
(boolean subscriptionDurable) サブスクリプションを永続的にするかどうかを設定します。void
setSubscriptionName
(StringSE subscriptionName) 作成するサブスクリプションの名前を設定します。void
setSubscriptionShared
(boolean subscriptionShared) サブスクリプションを共有するかどうかを設定します。void
setupMessageListener
(ObjectSE messageListener) 使用するメッセージリスナーを設定します。protected void
このコンテナーの構成を検証します。クラス org.springframework.jms.listener.AbstractJmsListeningContainer から継承されたメソッド
afterPropertiesSet, createSharedConnection, destroy, doInitialize, doRescheduleTask, doShutdown, doStart, doStop, establishSharedConnection, getBeanName, getClientId, getPausedTaskCount, getPhase, getSharedConnection, initialize, isActive, isAutoStartup, isRunning, logRejectedTask, prepareSharedConnection, refreshSharedConnection, releaseSharedConnection, rescheduleTaskIfNecessary, resumePausedTasks, runningAllowed, setAutoStartup, setBeanName, setClientId, setPhase, sharedConnectionEnabled, shutdown, start, startSharedConnection, stop, stopSharedConnection
クラス org.springframework.jms.support.destination.JmsDestinationAccessor から継承されたメソッド
getDestinationResolver, isPubSubDomain, receiveFromConsumer, resolveDestinationName, setDestinationResolver, setPubSubDomain
クラス org.springframework.jms.support.JmsAccessor から継承されたメソッド
convertJmsAccessException, createConnection, createSession, getConnectionFactory, getSessionAcknowledgeMode, isClientAcknowledge, isSessionTransacted, obtainConnectionFactory, setConnectionFactory, setSessionAcknowledgeMode, setSessionAcknowledgeModeName, setSessionTransacted
クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.jms.listener.MessageListenerContainer から継承されたメソッド
getDestinationResolver, isPubSubDomain
インターフェース org.springframework.context.SmartLifecycle から継承されたメソッド
getPhase, isAutoStartup, stop
コンストラクターの詳細
AbstractMessageListenerContainer
public AbstractMessageListenerContainer()
メソッドの詳細
setConcurrency
同時実行制限を指定します。setDestination
メッセージの送信先を設定します。あるいは、
DestinationResolver
を介して動的に解決される "destinationName" を指定します。メモ: 宛先は実行時に置き換えられ、リスナーコンテナーが新しい宛先をすぐに取得します(たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で機能します)。ただし、これは高度な使用箇所と見なされます。注意して使用してください!
getDestination
メッセージを受け取る宛先を返します。構成された宛先が実際のDestination
EE 型でない場合は、null
になります。c.f.when the destination is a String
。setDestinationName
メッセージを受信する宛先の名前を設定します。指定された名前は、構成された
destination resolver
を介して動的に解決されます。または、JMS
Destination
EE オブジェクトを「宛先」として指定します。メモ: 宛先は実行時に置き換えられ、リスナーコンテナーが新しい宛先をすぐに取得します(たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で機能します)。ただし、これは高度な使用箇所と見なされます。注意して使用してください!
getDestinationName
getDestinationDescription
このコンテナーの JMS 宛先を説明する文字列を返します(決してnull
ではありません)。setMessageSelector
JMS メッセージセレクター式を設定します(ない場合はnull
)。デフォルトはなしです。セレクター式の詳細な定義については、JMS 仕様を参照してください。
メモ: メッセージセレクターは実行時に置き換えられ、リスナーコンテナーは新しいセレクター値をすぐに取得します(たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で機能します)。ただし、これは高度な使用箇所と見なされます。注意して使用してください!
getMessageSelector
JMS メッセージセレクター式(ない場合はnull
)を返します。setMessageListener
登録するメッセージリスナーの実装を設定します。これは、標準の JMSMessageListener
EE オブジェクトまたは SpringSessionAwareMessageListener
オブジェクトのいずれかです。メモ: メッセージリスナーは実行時に置き換えられ、リスナーコンテナーは新しいリスナーオブジェクトをすぐに取得します(たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で動作します)。ただし、これは高度な使用箇所と見なされます。注意して使用してください!
- 例外:
IllegalArgumentExceptionSE
- 指定されたリスナーがMessageListener
EE でもSessionAwareMessageListener
でもない場合- 関連事項:
getMessageListener
登録するメッセージリスナーオブジェクトを返します。checkMessageListener
指定されたメッセージリスナーを確認し、サポートされているリスナー型に対応していない場合は例外をスローします。デフォルトでは、標準の JMS
MessageListener
EE オブジェクトまたは SpringSessionAwareMessageListener
オブジェクトのみが受け入れられます。- パラメーター:
messageListener
- チェックするメッセージリスナーオブジェクト- 例外:
IllegalArgumentExceptionSE
- 指定されたリスナーがMessageListener
EE でもSessionAwareMessageListener
でもない場合- 関連事項:
getDefaultSubscriptionName
指定されたメッセージリスナーのデフォルトのサブスクリプション名を決定します。- パラメーター:
messageListener
- チェックするメッセージリスナーオブジェクト- 戻り値:
- デフォルトのサブスクリプション名
- 関連事項:
setSubscriptionDurable
public void setSubscriptionDurable(boolean subscriptionDurable) サブスクリプションを永続的にするかどうかを設定します。使用する永続サブスクリプション名は、"subscriptionName" プロパティで指定できます。デフォルトは "false" です。永続サブスクリプションを登録するには、これを "true" に設定します。通常は "subscriptionName" 値と組み合わせて使用します (メッセージリスナークラス名がサブスクリプション名として十分な場合を除く)。
トピック (pub-sub ドメイン) をリッスンしている場合にのみ意味があるため、このメソッドは "pubSubDomain" フラグも切り替えます。
isSubscriptionDurable
public boolean isSubscriptionDurable()サブスクリプションを永続的にするかどうかを返します。setSubscriptionName
作成するサブスクリプションの名前を設定します。共有または永続サブスクリプションを持つトピック(pub-sub ドメイン)の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。
メモ: 共有サブスクリプション(JMS 2.0 が必要)を除き、各サブスクリプションで許可される同時コンシューマーは 1 つ(このメッセージリスナーコンテナーのデフォルト)です。
getSubscriptionName
作成するサブスクリプションの名前を返します(ある場合)。- 導入:
- 4.1
setDurableSubscriptionName
作成する永続サブスクリプションの名前を設定します。このメソッドは pub-sub ドメインモードに切り替え、サブスクリプションの永続化もアクティブ化します。永続サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。
メモ: 共有永続サブスクリプション(JMS 2.0 が必要)を除いて、各永続サブスクリプションで許可される同時コンシューマーは 1 つだけです(これはこのメッセージリスナーコンテナーのデフォルトです)。
getDurableSubscriptionName
作成する永続サブスクリプションの名前を返します(存在する場合)。setPubSubNoLocal
public void setPubSubNoLocal(boolean pubSubNoLocal) 独自の接続によって公開されたメッセージの配信を禁止するかどうかを設定します。デフォルトは "false" です。isPubSubNoLocal
public boolean isPubSubNoLocal()独自の接続によって公開されたメッセージの配信を禁止するかどうかを返します。- 導入:
- 4.1
setReplyPubSubDomain
public void setReplyPubSubDomain(boolean replyPubSubDomain) 返信先の種類を設定します。デフォルトでは、構成されたpubSubDomain
値が使用されます(JmsDestinationAccessor.isPubSubDomain()
を参照)。この設定は、動的宛先が有効な場合に解決する宛先の型を主に示します。
isReplyPubSubDomain
public boolean isReplyPubSubDomain()- 次で指定:
- インターフェース
MessageListenerContainer
のisReplyPubSubDomain
- 導入:
- 4.2
setReplyQosSettings
返信を送信するときに使用するQosSettings
を構成します。null
に設定して、ブローカーのデフォルトを使用する必要があることを示すことができます。- パラメーター:
replyQosSettings
- 応答を送信するときに使用する QoS 設定、またはデフォルト値を使用するnull
- 導入:
- 5.0
getReplyQosSettings
インターフェースからコピーされた説明:MessageListenerContainer
応答を送信するときに使用するQosSettings
を返すか、ブローカーのデフォルトを使用する必要がある場合はnull
を返します。- 次で指定:
- インターフェース
MessageListenerContainer
のgetReplyQosSettings
setMessageConverter
JMS メッセージを変換するためのMessageConverter
戦略を設定します。- 導入:
- 4.1
getMessageConverter
インターフェースからコピーされた説明:MessageListenerContainer
Message
EE があれば、それを変換するために使用できるMessageConverter
を返します。- 次で指定:
- インターフェース
MessageListenerContainer
のgetMessageConverter
setExceptionListener
登録されたメッセージリスナーまたは呼び出しインフラストラクチャによって JMSException がスローされた場合に通知するように JMS ExceptionListener を設定します。getExceptionListener
登録されたメッセージリスナーまたは呼び出しインフラストラクチャ(存在する場合)によって JMSException がスローされた場合に通知する JMS ExceptionListener を返します。setErrorHandler
Message
EE の処理中にスローされたキャッチされない例外が発生した場合に呼び出されるErrorHandler
を設定します。デフォルトでは、ErrorHandler は存在しないため、エラーレベルのログが唯一の結果になります。
getErrorHandler
Message
EE の処理中にスローされたキャッチされない例外が発生した場合に呼び出されるErrorHandler
を返します。- 導入:
- 4.1
setObservationRegistry
public void setObservationRegistry(@Nullable io.micrometer.observation.ObservationRegistry observationRegistry) JMS message processing observations
の記録に使用するObservationRegistry
を設定します。レジストリが設定されていない場合は、デフォルトで no-op 監視になります。- 導入:
- 6.1
getObservationRegistry
JMS message processing observations
の記録に使用されたObservationRegistry
を返します。- 導入:
- 6.1
setExposeListenerSession
public void setExposeListenerSession(boolean exposeListenerSession) リスナー JMS セッションを登録済みのSessionAwareMessageListener
およびJmsTemplate
呼び出しに公開するかどうかを設定します。デフォルトは "true" で、リスナーの
Session
EE を再利用します。これをオフにすると、一部の JMS プロバイダーで必要になる可能性のある、同じ基礎となる JMSConnection
EE からフェッチされた新しい JMS セッションが公開されます。外部トランザクションマネージャーによって管理されるセッションは、常に
JmsTemplate
呼び出しに公開されることに注意してください。JmsTemplate 露出に関しては、この設定はローカルでトランザクション処理されたセッションにのみ影響します。isExposeListenerSession
public boolean isExposeListenerSession()リスナー JMSSession
EE を登録済みのSessionAwareMessageListener
に公開するかどうかを返します。setAcceptMessagesWhileStopping
public void setAcceptMessagesWhileStopping(boolean acceptMessagesWhileStopping) リスナコンテナーの停止中に受信メッセージを受け入れるかどうかを設定します。デフォルトは "false" で、受信の試行を中止することでそのようなメッセージを拒否します。停止フェーズでもこのようなメッセージを完全に処理するには、このフラグをオンにします。ただし、新しく送信されたメッセージでも処理される可能性があるという欠点があります(すべての受信タイムアウトが期限切れになる前に受信した場合)。
注意 : このような受信メッセージの受信試行を中止すると、影響を受けるメッセージのプロバイダーの再試行回数が減少する可能性があります。同時コンシューマーの数が多い場合は、すべての潜在的な停止シナリオで安全を確保するために、リトライの数がコンシューマーの数よりも多いことを確認してください。
isAcceptMessagesWhileStopping
public boolean isAcceptMessagesWhileStopping()リスナーコンテナーが停止している間に受信メッセージを受け入れるかどうかを返します。validateConfiguration
protected void validateConfiguration()クラスからコピーされた説明:AbstractJmsListeningContainer
このコンテナーの構成を検証します。デフォルトの実装は空です。サブクラスでオーバーライドされます。
- オーバーライド:
- クラス
AbstractJmsListeningContainer
のvalidateConfiguration
setupMessageListener
インターフェースからコピーされた説明:MessageListenerContainer
使用するメッセージリスナーを設定します。そのメッセージリスナー型がサポートされていない場合、IllegalArgumentException
SE をスローします。- 次で指定:
- インターフェース
MessageListenerContainer
のsetupMessageListener
executeListener
指定されたリスナーを実行し、後でトランザクションをコミットまたはロールバックします(必要な場合)。createObservation
doExecuteListener
指定されたリスナーを実行し、後でトランザクションをコミットまたはロールバックします(必要な場合)。- パラメーター:
session
- 操作する JMS セッションmessage
- 受信した JMSMessage
EE- 例外:
JMSExceptionEE
- JMS API メソッドによってスローされた場合- 関連事項:
invokeListener
指定されたリスナーを呼び出す: 標準的な JMS の MessageListener または、(できれば)Spring の SessionAwareMessageListener。- パラメーター:
session
- 操作する JMS セッションmessage
- 受信した JMSMessage
EE- 例外:
JMSExceptionEE
- JMS API メソッドによってスローされた場合- 関連事項:
doInvokeListener
protected void doInvokeListener(SessionAwareMessageListener listener, SessionEE session, MessageEE message) throws JMSExceptionEE 指定されたリスナーを Spring SessionAwareMessageListener として呼び出し、要求された場合は新しい JMS セッションを(潜在的に独自のトランザクションで)リスナーに公開します。- パラメーター:
listener
- 呼び出す Spring SessionAwareMessageListenersession
- 操作する JMS セッションmessage
- 受信した JMSMessage
EE- 例外:
JMSExceptionEE
- JMS API メソッドによってスローされた場合- 関連事項:
doInvokeListener
protected void doInvokeListener(MessageListenerEE listener, MessageEE message) throws JMSExceptionEE 指定されたリスナーを標準の JMSMessageListener
EE として呼び出します。デフォルトの実装では、
onMessage
メソッドの単純な呼び出しを実行します。- パラメーター:
listener
- 呼び出す JMSMessageListener
message
- 受信した JMSMessage
EE- 例外:
JMSExceptionEE
- JMS API メソッドによってスローされた場合- 関連事項:
commitIfNecessary
protected void commitIfNecessary(SessionEE session, @Nullable MessageEE message) throws JMSExceptionEE 必要に応じて、コミットまたはメッセージ確認を実行します。- パラメーター:
session
- コミットする JMSSession
EEmessage
-Message
EE が確認する- 例外:
JMSExceptionEE
- コミット失敗の場合
rollbackIfNecessary
必要に応じて、ロールバックを実行します。- パラメーター:
session
- ロールバックする JMS セッション- 例外:
JMSExceptionEE
- ロールバックエラーの場合
rollbackOnExceptionIfNecessary
protected void rollbackOnExceptionIfNecessary(SessionEE session, ThrowableSE ex) throws JMSExceptionEE ロールバックを実行し、ロールバック例外を適切に処理します。- パラメーター:
session
- ロールバックする JMS セッションex
- スローされたアプリケーションの例外またはエラー- 例外:
JMSExceptionEE
- ロールバックエラーの場合
isSessionLocallyTransacted
指定されたセッションがローカルでトランザクション処理されているかどうか、つまり、そのトランザクションが外部リスナーのコーディネーターではなく、このリスナーコンテナーのセッション処理によって管理されているかどうかを確認します。メモ: セッション自体のトランザクション済みフラグは、以前にすでにチェックされています。このメソッドは、セッションのトランザクションがローカルであるか、外部で調整されているかを確認するためのものです。
- パラメーター:
session
- チェックするセッション- 戻り値:
- 指定されたセッションがローカルでトランザクションされるかどうか
- 関連事項:
createConsumer
protected MessageConsumerEE createConsumer(SessionEE session, DestinationEE destination) throws JMSExceptionEE 指定されたセッションと宛先の JMS MessageConsumer を作成します。この実装では、JMS 1.1 API を使用します。
- パラメーター:
session
- MessageConsumer を作成する JMS セッションdestination
- MessageConsumer を作成する JMS 宛先- 戻り値:
- 新しい JMS MessageConsumer
- 例外:
JMSExceptionEE
- JMS API メソッドによってスローされた場合
handleListenerException
リスナーの実行中に発生した特定の例外を処理します。デフォルトの実装では、例外を JMS プロバイダーに伝播せずに、
WARN
レベルでログに記録します。確認応答やトランザクションのすべての処理がこのリスナーコンテナーによって行われると仮定します。これはサブクラスでオーバーライドできます。- パラメーター:
ex
- 処理する例外
invokeExceptionListener
登録済みの JMS ExceptionListener があれば呼び出します。- パラメーター:
ex
- JMS 処理中に発生した例外- 関連事項:
invokeErrorHandler
登録されているErrorHandler
がある場合はそれを呼び出します。それ以外の場合は、WARN
レベルでログを記録します。- パラメーター:
ex
- JMS 処理中に発生した捕捉されなかったエラー- 関連事項: