クラス DefaultMessageListenerContainer

実装されたすべてのインターフェース:
AwareBeanNameAwareDisposableBeanInitializingBeanLifecyclePhasedSmartLifecycleMessageListenerContainer

public class DefaultMessageListenerContainer extends AbstractPollingMessageListenerContainer
プレーンな JMS クライアント API を使用するメッセージリスナーコンテナーバリアント。具体的には、メッセージのトランザクション受信(XA トランザクションへの登録)も可能にする MessageConsumer.receive() 呼び出しのループ。ネイティブ JMS 環境および Jakarta EE 環境で機能するように設計されており、構成の違いは最小限です。

これはシンプルですが、それでも強力な形式のメッセージリスナーコンテナーです。起動時に、リスナーを呼び出すための JMS セッションの固定数を取得し、オプションで実行時の動的適応を可能にします(最大数まで)。SimpleMessageListenerContainer と同様に、その主な利点はランタイムの複雑度が低いこと、特に JMS プロバイダーの最小要件です。JMS ServerSessionPool 機能さえ必要ありません。さらに、ブローカーが一時的に使用不可になった場合に完全に自己回復し、停止 / 再起動だけでなく、構成のランタイム変更も可能です。

実際の MessageListener 実行は、Spring の TaskExecutor 抽象化によって作成された非同期作業単位で発生します。デフォルトでは、"concurrentConsumers" 設定に従って、指定された数のインボーカータスクが起動時に作成されます。代わりの TaskExecutor を指定して、既存のスレッドプール機能 (Jakarta EE サーバーなど) と統合します。ネイティブ JMS セットアップでは、これらの各リスナースレッドはキャッシュされた JMS Session および MessageConsumer (失敗した場合にのみリフレッシュされる) を使用し、JMS プロバイダーのリソースを可能な限り効率的に使用します。

Spring PlatformTransactionManager"transactionManager" プロパティに渡すことにより、メッセージの受信とリスナーの実行をトランザクションに自動的にラップできます。これは通常、Jakarta EE 環境の JtaTransactionManager と、JNDI から取得した JTA 対応の JMS ConnectionFactory との組み合わせになります(Jakarta EE サーバーのドキュメントを確認してください)。すべての Jakarta EE サーバー(特に JBoss)との互換性のために外部トランザクションマネージャーが指定されている場合、このリスナーコンテナーは各トランザクションのすべての JMS ハンドルを自動的に再取得することに注意してください。この非キャッシュ動作は、"cacheLevel"/"cacheLevelName" プロパティによってオーバーライドでき、外部トランザクションマネージャーが関係している場合でも、Connection (または Session および MessageConsumer)のキャッシュを強制します。

同時実行呼び出し元の数の動的スケーリングは、"concurrentConsumers" 値より大きい "maxConcurrentConsumers" 値を指定することによってアクティブにすることができます。後者のデフォルトは 1 なので、たとえば 5 の "maxConcurrentConsumers" を指定するだけで、メッセージの負荷が増加した場合には同時に 5 つのコンシューマーまで動的にスケーリングしたり、負荷が減少した場合には標準的なコンシューマー数まで動的に縮小したりすることができます。特に ConnectionFactory が JMS Sessions をプールしない場合、または TaskExecutor がスレッドをプールしない (設定を確認してください) 場合は、頻繁なスケールアップやスケールダウンを回避するために、"idleTaskExecutionLimit" 設定を調整して各新規タスクの存続期間を制御することを検討してください。動的スケーリングは、最初からキューに対してのみ有効であることに注意してください。トピックの場合、通常はデフォルトのコンシューマー数 1 のままにします。そうしないと、同じノードで同じメッセージを複数回受信します。

注: CachingConnectionFactory をリスナーコンテナーで使用できますが、制限があります。一般に、リスナーコンテナー自体がそのライフサイクル内で適切なキャッシュを処理できるようにすることが推奨されます。また、リスナーコンテナーの停止と再起動は、ローカルにキャッシュされた独立した Connection でのみ機能し、外部にキャッシュされたものでは機能しません。最後に重要なことですが、CachingConnectionFactory では、"maxMessagesPerTask" などのカスタムプロバイダーヒントを使用した動的スケーリングにより、JMS メッセージがリスナーコンテナーにアタッチされなくなった場合でも、キャッシュされたコンシューマーに配信される可能性があります。

"sessionTransacted" を "true" に設定するか、外部 "transactionManager" を指定することを強くお勧めします。承認モードとネイティブトランザクションオプションの詳細については AbstractMessageListenerContainer javadoc を参照してください。外部トランザクションマネージャーの設定の詳細については AbstractPollingMessageListenerContainer javadoc を参照してください。デフォルトの "AUTO_ACKNOWLEDGE" モードでは、このコンテナーはリスナー実行前に自動メッセージ確認を適用し、例外の場合に再配信しないことに注意してください。

導入:
2.0
作成者:
Juergen Hoeller, Sam Brannen
関連事項:
  • フィールドの詳細

    • DEFAULT_THREAD_NAME_PREFIX

      public static final StringSE DEFAULT_THREAD_NAME_PREFIX
      デフォルトのスレッド名プレフィックス: "DefaultMessageListenerContainer-"。
    • DEFAULT_RECOVERY_INTERVAL

      public static final long DEFAULT_RECOVERY_INTERVAL
      デフォルトの回復間隔: 5000 ミリ秒 = 5 秒。
      関連事項:
    • CACHE_NONE

      public static final int CACHE_NONE
      JMS リソースをまったくキャッシュしないことを示す定数。
      関連事項:
    • CACHE_CONNECTION

      public static final int CACHE_CONNECTION
      各リスナースレッドの共有 JMS Connection をキャッシュすることを示す定数。
      関連事項:
    • CACHE_SESSION

      public static final int CACHE_SESSION
      各リスナースレッドの共有 JMS Connection および JMS Session をキャッシュすることを示す定数。
      関連事項:
    • CACHE_CONSUMER

      public static final int CACHE_CONSUMER
      リスナースレッドごとに共有 JMS Connection、JMS Session、JMS MessageConsumer をキャッシュすることを示す定数。
      関連事項:
    • CACHE_AUTO

      public static final int CACHE_AUTO
      適切なキャッシュレベルの自動選択を示す定数(トランザクション管理戦略に依存)。
      関連事項:
  • コンストラクターの詳細

    • DefaultMessageListenerContainer

      public DefaultMessageListenerContainer()
  • メソッドの詳細

    • setTaskExecutor

      public void setTaskExecutor(ExecutorSE taskExecutor)
      リスナースレッドの実行に使用する Spring TaskExecutor を設定します。

      デフォルトは SimpleAsyncTaskExecutor で、指定された同時コンシューマーの数に応じて、いくつかの新しいスレッドを起動します。

      既存のスレッドプールと統合するための代替 TaskExecutor を指定します。これは、スレッドが特定の方法(Jakarta EE 環境内など)で管理されている場合にのみ、実際に価値をもたらすことに注意してください。このリスナコンテナーはその存続期間全体でいくつかのスレッドを占有するため、プレーンスレッドプールはあまり価値がありません。

      関連事項:
    • setBackOff

      public void setBackOff(BackOff backOff)
      リカバリ試行の間隔を計算するために使用する BackOff インスタンスを指定します。BackOffExecution 実装が BackOffExecution.STOP を返す場合、このリスナーコンテナーはそれ以上の回復を試みません。

      このプロパティが設定されている場合、recovery interval は無視されます。

      導入:
      4.1
    • setRecoveryInterval

      public void setRecoveryInterval(long recoveryInterval)
      回復試行の間隔をミリ秒単位で指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。これは、指定された間隔で FixedBackOff を作成する便利なメソッドです。

      その他の回復オプションについては、代わりに BackOff インスタンスを指定することを検討してください。

      関連事項:
    • setCacheLevelName

      public void setCacheLevelName(StringSE constantName) throws IllegalArgumentExceptionSE
      このリスナーコンテナーが適用できるキャッシュのレベルを、対応する定数の名前の形式で指定します。たとえば、"CACHE_CONNECTION"
      例外:
      IllegalArgumentExceptionSE
      関連事項:
    • setCacheLevel

      public void setCacheLevel(int cacheLevel)
      このリスナーコンテナーが適用できるキャッシュのレベルを指定します。

      外部トランザクションマネージャーが指定されている場合(外部トランザクションのスコープ内ですべてのリソースを新しく取得するため)、デフォルトは CACHE_NONE です。それ以外の場合(ローカル JMS リソースで動作する)CACHE_CONSUMER です。

      一部の Jakarta EE サーバーは、新しく取得された JMS Connection および Session の場合、進行中の XA トランザクションにのみ JMS リソースを登録します。そのため、このリスナーコンテナーはデフォルトでこれらのいずれもキャッシュしません。ただし、トランザクションリソースのキャッシュに関するサーバーのルールによっては、この設定を外部トランザクションマネージャーと組み合わせても、少なくとも CACHE_CONNECTION または CACHE_SESSION に切り替えることを検討してください。

      関連事項:
    • getCacheLevel

      public int getCacheLevel()
      このリスナーコンテナーが適用を許可されているキャッシュのレベルを返します。
    • setConcurrency

      public void setConcurrency(StringSE concurrency)
      "lower-upper" 文字列を使用して同時実行制限を指定します。"5-10"、または単純な上限文字列。"10" (この場合、下限は 1 になります)。

      このリスナーコンテナーは常に最小数のコンシューマー(setConcurrentConsumers(int))を保持し、負荷が増加した場合に最大数のコンシューマー setMaxConcurrentConsumers(int) に徐々に拡大します。

      次で指定:
      クラス AbstractMessageListenerContainersetConcurrency 
    • setConcurrentConsumers

      public void setConcurrentConsumers(int concurrentConsumers)
      作成する同時コンシューマーの数を指定します。デフォルトは 1 です。

      この設定により高い値を指定すると、実行時にスケジュールされた同時コンシューマーの標準レベルが増加します。これは、事実上、任意の時点でスケジュールされる同時コンシューマーの最小数です。これは静的な設定です。動的スケーリングの場合は、代わりに "maxConcurrentConsumers" 設定の指定を検討してください。

      同時コンシューマーの数を増やすことは、キューから入ってくるメッセージの消費を拡大するために推奨されます。ただし、複数のコンシューマーが登録されると、順序付けの保証は失われます。一般に、少量のキューの場合は 1 つのコンシューマーに固執します。

      ベンダー固有のセットアップ手段で明確に許可されていない限り、トピックの同時コンシューマーの数を上げないでください。通常のセットアップでは、これにより同じメッセージが同時に消費されることになり、これはほとんど望ましくありません。

      この設定は、JMX などを介して実行時に変更できます。

      関連事項:
    • getConcurrentConsumers

      public final int getConcurrentConsumers()
      "concurrentConsumer" 設定を返します。

      これは、現在構成されている "concurrentConsumers" 値を返します。現在スケジュールされているアクティブなコンシューマーの数は異なる場合があります。

      関連事項:
    • setMaxConcurrentConsumers

      public void setMaxConcurrentConsumers(int maxConcurrentConsumers)
      作成する同時コンシューマーの最大数を指定します。デフォルトは 1 です。

      この設定が "concurrentConsumers" よりも大きい場合、リスナーコンテナーは、十分な数の受信メッセージが検出される場合に、実行時に新しいコンシューマーを動的にスケジュールします。負荷が再び下がると、コンシューマーの数は再び標準レベル("concurrentConsumers" )に減少します。

      同時コンシューマーの数を増やすことは、キューから入ってくるメッセージの消費を拡大するために推奨されます。ただし、複数のコンシューマーが登録されると、順序付けの保証は失われます。一般に、少量のキューの場合は 1 つのコンシューマーに固執します。

      ベンダー固有のセットアップ手段で明確に許可されていない限り、トピックの同時コンシューマーの数を上げないでください。通常のセットアップでは、これにより同じメッセージが同時に消費されることになり、これはほとんど望ましくありません。

      この設定は、JMX などを介して実行時に変更できます。

      関連事項:
    • getMaxConcurrentConsumers

      public final int getMaxConcurrentConsumers()
      "maxConcurrentConsumer" 設定を返します。

      これは、現在構成されている "maxConcurrentConsumers" 値を返します。現在スケジュールされている / アクティブなコンシューマーの数は異なる場合があります。

      関連事項:
    • setMaxMessagesPerTask

      public void setMaxMessagesPerTask(int maxMessagesPerTask)
      1 つのタスクで処理するメッセージの最大数を指定します。より具体的には、これはタスクごとのメッセージ受信試行回数を制限します。これには、タイムアウトに達するまで実際にメッセージを取得しなかった受信反復が含まれます("receiveTimeout" プロパティを参照)。

      標準の TaskExecutor の場合、デフォルトは無制限(-1)であり、(動的スケジューリングが制限される代わりに)シャットダウンするまで元の呼び出しスレッドを再利用します。

      存続期間の短いタスクの優先順位を示す SchedulingTaskExecutor の場合、デフォルトは代わりに 10 です。ここでは、長命のタスクと短命のタスクのバランスを取るために、10 〜 100 のメッセージ数を指定します。

      存続期間の長いタスクは、同じスレッドをずっと使用し続けることにより、スレッドコンテキストの頻繁な切り替えを回避します。スレッドプールは通常、短期間のタスクを優先します。

      この設定は、JMX などを介して実行時に変更できます。

      関連事項:
    • getMaxMessagesPerTask

      public final int getMaxMessagesPerTask()
      1 つのタスクで処理するメッセージの最大数を返します。
    • setIdleConsumerLimit

      public void setIdleConsumerLimit(int idleConsumerLimit)
      常にアイドル状態を許可するコンシューマーの数の制限を指定します。

      この制限は、scheduleNewInvokerIfAppropriate() メソッドによって使用され、新しい呼び出し元を作成する必要があるかどうかを決定します。制限を増やすと、呼び出し元がより積極的に作成されます。これは、呼び出し元の数をより早く増やすのに役立ちます。

      デフォルトは 1 で、既存の呼び出し元がどれも現在アイドル状態でない場合にのみ、新しい呼び出し元(最初はアイドルである可能性が高い)をスケジュールするだけです。

    • getIdleConsumerLimit

      public final int getIdleConsumerLimit()
      アイドル状態のコンシューマーの数の制限を返します。
    • setIdleTaskExecutionLimit

      public void setIdleTaskExecutionLimit(int idleTaskExecutionLimit)
      実行中にメッセージを受信していない、コンシューマータスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、受信を他の実行中のタスクに任せます。

      デフォルトは 1 で、タスクがメッセージを受信しなかった場合、アイドルリソースを早期に閉じます。これは動的スケジューリングにのみ適用されます。"maxConcurrentConsumers" 設定を参照してください。最小数のコンシューマー("concurrentConsumers" を参照)は、いずれにしてもシャットダウンするまで保持されます。

      各タスク実行内で、メッセージ受信の試行("maxMessagesPerTask" 設定に応じて)はそれぞれ、受信メッセージ("receiveTimeout" 設定に応じて)を待機します。特定のタスクでそれらすべての受信試行がメッセージなしで戻る場合、そのタスクは受信メッセージに関してアイドルと見なされます。そのようなタスクは、まだ再スケジュールされる可能性があります。ただし、指定された "idleTaskExecutionLimit" に達すると、シャットダウンします(動的スケーリングの場合)。

      スケールアップとスケールダウンの頻度が高すぎる場合は、この制限をプルアップます。この制限が高くなると、アイドル状態のコンシューマーはより長く保持され、メッセージの新しいロードが受信された後のコンシューマーの再起動を回避します。または、より高い "maxMessagesPerTask" および / または "receiveTimeout" 値を指定します。アイドル状態のコンシューマーが長時間保持される(同時に、スケジュールされた各タスクの平均実行時間も増加する)。

      この設定は、JMX などを介して実行時に変更できます。

      関連事項:
    • getIdleTaskExecutionLimit

      public final int getIdleTaskExecutionLimit()
      コンシューマータスクのアイドル実行の制限を返します。
    • setIdleReceivesPerTaskLimit

      public void setIdleReceivesPerTaskLimit(int idleReceivesPerTaskLimit)
      指定されたアイドル受信数に達した後、コンシューマーを「アイドル」としてマークします。アイドル状態の受信は、潜在的な AbstractPollingMessageListenerContainer.setReceiveTimeout(long) が経過した後、受信者から null メッセージが返された瞬間からカウントされます。これにより、アイドルタスク数が setIdleTaskExecutionLimit(int) を超えているかどうかを確認し、それに基づいてタスクを再スケジュールする必要があるかどうかを判断し、それ以外の場合に保持されるリソースを節約できます。

      この設定は、受信したメッセージが null または null 以外のメッセージであるかどうかに関係なく、この制限に達した後にタスクが解放されて再スケジュールされる setMaxMessagesPerTask(int) とは異なります。この設定だけでは、タスクごとに十分な大きさのバッチが必要であるが、処理するメッセージがなくなった瞬間からクイック(er)リリースが必要な場合、柔軟性がなくなる可能性があります。

      この設定は、アイドルとしてマークされた回数の反復後にこの制限がタスクを解放することを決定する setIdleTaskExecutionLimit(int) とは異なります。

      次に例を示します: setMaxMessagesPerTask(int) が "500" に設定され、#setIdleReceivesPerTaskLimit が "60" に設定され、AbstractPollingMessageListenerContainer.setReceiveTimeout(long) が "1000" に設定され、setIdleTaskExecutionLimit(int) が "1" に設定されている場合、後続の 60 アイドル数がない限り、タスクごとに 500 メッセージが処理されます。メッセージを受信すると、タスクはアイドルとしてマークされ、解放されます。これは、最後のメッセージが処理された後、新しいメッセージが表示されない限り、60 秒後にタスクが解放されることも意味します。

      導入:
      5.3.5
      関連事項:
    • getIdleReceivesPerTaskLimit

      public int getIdleReceivesPerTaskLimit()
      コンシューマーを「アイドル」としてマークする前に、1 つのタスクで受信する後続の null メッセージの最大数を返します。
      導入:
      5.3.5
    • initialize

      public void initialize()
      クラスからコピーされた説明: AbstractJmsListeningContainer
      このコンテナーを初期化します。

      JMS 接続を作成し、ConnectionEE を開始し("autoStartup" がオフになっていない場合)、AbstractJmsListeningContainer.doInitialize() を呼び出します。

      オーバーライド:
      クラス AbstractPollingMessageListenerContainerinitialize 
    • doInitialize

      protected void doInitialize() throws JMSExceptionEE
      JMS セッションと関連する MessageConsumer の形式で、個別のスレッドで実行されている指定数の同時コンシューマーを作成します。
      次で指定:
      クラス AbstractJmsListeningContainerdoInitialize 
      例外:
      JMSExceptionEE - 登録に失敗した場合
      関連事項:
    • doShutdown

      protected void doShutdown() throws JMSExceptionEE
      登録済みの JMS セッションと関連する MessageConsumers を破棄します。
      次で指定:
      クラス AbstractJmsListeningContainerdoShutdown 
      例外:
      JMSExceptionEE - シャットダウンに失敗した場合
      関連事項:
    • start

      public void start() throws JmsException
      停止コールバックがあれば、それをリセットするためにオーバーライドされます。
      次で指定:
      インターフェース Lifecyclestart 
      オーバーライド:
      クラス AbstractJmsListeningContainerstart 
      例外:
      JmsException - 起動に失敗した場合
      関連事項:
    • stop

      public void stop(RunnableSE callback) throws JmsException
      このリスナーコンテナーを停止し、すべてのリスナー処理が実際に停止したら、特定のコールバックを呼び出します。

      メモ: さらに stop(runnable) 呼び出し(処理が実際に停止する前)は、指定されたコールバックをオーバーライドします。最後に指定されたコールバックのみが呼び出されます。

      後続の start() 呼び出しが完全に停止する前にリスナーコンテナーを再起動した場合、コールバックはまったく呼び出されません。

      パラメーター:
      callback - リスナー処理が完全に停止したときに呼び出すコールバック
      例外:
      JmsException - 停止に失敗した場合
      関連事項:
    • getScheduledConsumerCount

      public final int getScheduledConsumerCount()
      現在スケジュールされているコンシューマーの数を返します。

      この数は常に "concurrentConsumers" と "maxConcurrentConsumers" の間にありますが、"activeConsumerCount" よりも大きい場合があります(一部のコンシューマーがスケジュールされているが、現時点では実行されていない場合)。

      関連事項:
    • getActiveConsumerCount

      public final int getActiveConsumerCount()
      現在アクティブなコンシューマーの数を返します。

      この数は常に "concurrentConsumers" と "maxConcurrentConsumers" の間ですが、"scheduledConsumerCount" より少ない場合があります(一部のコンシューマーがスケジュールされているが、現時点では実行されていない場合)。

      関連事項:
    • isRegisteredWithDestination

      public boolean isRegisteredWithDestination()
      少なくとも 1 つのコンシューマーがターゲット宛先への固定登録を行ったかどうかを返します。これは、公開しようとしているメッセージを見逃さないことが保証されている実際のコンシューマーを登録することが重要である pub-sub の場合に特に興味深いものです。

      このメソッドは、start() 呼び出しの後、コンシューマーの非同期登録が発生するまでポーリングされます。このとき、メソッドは true を返し始めます。ただし、リスナーコンテナーが実際に固定登録を確立する場合に限ります。その後、コンテナーは少なくとも 1 つのコンシューマー登録を保持するため、シャットダウンするまで true を返し続けます。

      リスナーコンテナーは、最初に固定登録を持つことにバインドされていないことに注意してください。また、呼び出し元の実行ごとにコンシューマーを再作成し続ける場合もあります。これは特に cache level 設定に依存します。CACHE_CONSUMER のみが固定登録につながります。

    • createDefaultTaskExecutor

      protected TaskExecutor createDefaultTaskExecutor()
      デフォルトの TaskExecutor を作成します。明示的な TaskExecutor が指定されていない場合に呼び出されます。

      デフォルトの実装では、指定された Bean 名(または Bean 名が指定されていない場合はクラス名)をスレッド名の接頭辞として使用して SimpleAsyncTaskExecutor を構築します。

      関連事項:
    • sharedConnectionEnabled

      protected final boolean sharedConnectionEnabled()
      "cacheLevel" 設定に応じて、共有 JMS 接続を使用します。
      次で指定:
      クラス AbstractJmsListeningContainersharedConnectionEnabled 
      関連事項:
    • doRescheduleTask

      protected void doRescheduleTask(ObjectSE task)
      このリスナーコンテナーの TaskExecutor を介して、指定されたタスクを再実行します。
      オーバーライド:
      クラス AbstractJmsListeningContainerdoRescheduleTask 
      パラメーター:
      task - 再スケジュールするタスクオブジェクト
      関連事項:
    • messageReceived

      protected void messageReceived(ObjectSE invoker, SessionEE session)
      メッセージが入ってくることがわかっているため、新しい呼び出し側のスケジューリングを試みます...
      オーバーライド:
      クラス AbstractPollingMessageListenerContainermessageReceived 
      パラメーター:
      invoker - 呼び出し元オブジェクト (通りました)
      session - 受信 JMS セッション
      関連事項:
    • noMessageReceived

      protected void noMessageReceived(ObjectSE invoker, SessionEE session)
      影響を受ける呼び出し元をアイドルとしてマークします。
      オーバーライド:
      クラス AbstractPollingMessageListenerContainernoMessageReceived 
      パラメーター:
      invoker - 呼び出し元オブジェクト (通りました)
      session - 受信 JMS セッション
    • scheduleNewInvokerIfAppropriate

      protected void scheduleNewInvokerIfAppropriate()
      指定された "maxConcurrentConsumers" 制限にまだ達していない場合、および指定された "idleConsumerLimit" にも達していない場合のみ、このリスナーコンテナーのスケジュールされた呼び出し元の総数を増やして、新しい呼び出し元をスケジュールします。

      最初にメッセージを受信した呼び出し元でメッセージを処理している間にスケールアップするために、メッセージが受信されると呼び出されます。

      関連事項:
    • establishSharedConnection

      protected void establishSharedConnection()
      初期設定での失敗を受け入れるためにオーバーライドされます。最初のアクセスで共有接続を確立するのは非同期呼び出し側に任されます。
      オーバーライド:
      クラス AbstractJmsListeningContainerestablishSharedConnection 
      関連事項:
    • startSharedConnection

      protected void startSharedConnection()
      この実装は、Connection.start() から例外がスローされた後でも続行され、適切な回復を実行するためにリスナーに依存します。
      オーバーライド:
      クラス AbstractJmsListeningContainerstartSharedConnection 
      関連事項:
    • stopSharedConnection

      protected void stopSharedConnection()
      この実装は、Connection.stop() から例外がスローされた後でも続行され、再起動後に適切なリカバリを実行するためにリスナーに依存します。
      オーバーライド:
      クラス AbstractJmsListeningContainerstopSharedConnection 
      関連事項:
    • handleListenerSetupFailure

      protected void handleListenerSetupFailure(ThrowableSE ex, boolean alreadyRecovered)
      リスナーのセットアップ中に発生した特定の例外を処理します。すべての同時リスナーでそのようなすべての例外が呼び出されます。

      デフォルトの実装では、まだ回復されていない場合は警告レベルで、すでに回復されている場合はデバッグレベルで例外がログに記録されます。サブクラスでオーバーライドできます。

      パラメーター:
      ex - 処理する例外
      alreadyRecovered - 以前に実行中のリスナーが、現在のリスナーのセットアップの失敗からすでに回復しているかどうか (これは通常、デバッグログ以外の目的で無視できるフォローアップエラーを示します。)
      関連事項:
    • recoverAfterListenerSetupFailure

      protected void recoverAfterListenerSetupFailure()
      リスナーがそれ自体のセットアップに失敗した後、基礎となる接続の再確立など、このリスナーコンテナーを回復します。

      デフォルトの実装は、DefaultMessageListenerContainer のリカバリ可能な refreshConnectionUntilSuccessful() メソッドに委譲します。このメソッドは、共有接続と非共有接続の両方のケースで JMS プロバイダーへの接続の再確立を試みます。

      関連事項:
    • refreshConnectionUntilSuccessful

      protected void refreshConnectionUntilSuccessful()
      試行が成功する前に戻るのではなく、基になる接続をリフレッシュします。共有接続の場合と共有接続なしの場合に呼び出されるため、共有接続または検証目的で確立されたばかりの一時接続で操作する必要があります。

      デフォルトの実装は、このメッセージリスナーコンテナーが実行されている限り、接続が正常に確立されるまで再試行します。再試行の間に指定された回復間隔を適用します。

      関連事項:
    • refreshDestination

      protected void refreshDestination()
      このリスナーコンテナーが動作する JMS 宛先をリフレッシュします。

      キャッシュされた Destination オブジェクトが無効になったと想定して、リスナーのセットアップが失敗した後に呼び出されます(WebLogic JMS の一般的なケース)。

      デフォルトの実装では、CachingDestinationResolver の場合、DestinationResolver のキャッシュから宛先を削除します。

      関連事項:
    • applyBackOffTime

      protected boolean applyBackOffTime(BackOffExecution execution)
      指定された BackOffExecution を使用して、次のバックオフ時間を適用します。

      バックオフ期間が適用され、回復を新たに試行する必要がある場合は true を返し、それ以上試行しない場合は false を返します。

      導入:
      4.1
    • isRecovering

      public final boolean isRecovering()
      このリスナーコンテナーが現在リカバリを試みているかどうかを返します。

      以前に true を返すことがわかった後、isRecovering() が false に切り替えて、回復フェーズを検出するために使用できます。

      関連事項: