クラス AbstractMessageListenerContainer

実装されたすべてのインターフェース:
AwareBeanNameAwareDisposableBeanInitializingBeanLifecyclePhasedSmartLifecycleMessageListenerContainer
既知の直属サブクラス
AbstractPollingMessageListenerContainerSimpleMessageListenerContainer

public abstract class AbstractMessageListenerContainer extends AbstractJmsListeningContainer implements MessageListenerContainer
Spring メッセージリスナーコンテナー実装の抽象基本クラス。実際のメッセージ処理のために、標準の JMS MessageListenerEE または Spring の SessionAwareMessageListener をホストできます。

通常、すべてのリスナーが登録されることになっている単一の JMS ConnectionEE を保持します。これは、リスナーセッションを管理する標準の JMS 方法です。あるいは、Jakarta EE スタイルの XA 対応 JMS メッセージングのために、リスナーごとの新しい接続で使用することもできます。実際の登録プロセスは具象サブクラス次第です。

: このメッセージリスナーコンテナーのデフォルトの動作では、メッセージリスナーによってスローされた例外が JMS プロバイダーに伝播されることはありません。代わりに、そのような例外は WARN レベルでログに記録されます。これは、付随の JMS プロバイダーの観点からは、そのようなリスナーが失敗することは決してないことを意味します。ただし、エラー処理が必要な場合は、ErrorHandler 戦略の実装を setErrorHandler(ErrorHandler) メソッドに提供できます。JMSException は、ExceptionListenerEE が指定されている場合、それに加えて (ただしその後に) 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 対応 JMS ConnectionFactoryEE が "connectionFactory" として渡されます) を指定することによって、DefaultMessageListenerContainer でのみサポートされます。
XA トランザクション調整は実行時のオーバーヘッドを大幅に追加するため、どうしても必要な場合を除いて、回避することも可能です。

推奨:

  • 一般的には、"sessionTransacted" を "true" に設定し、通常はリスナー実装によってトリガーされるローカルデータベーストランザクションと組み合わせて、Spring の標準トランザクション機能を使用することが推奨されます。これは、Tomcat またはスタンドアロン環境で適切に機能し、多くの場合、カスタム重複メッセージ検出と組み合わせて使用されます (同じメッセージを 2 回処理することが許容されない場合)。
  • あるいは、完全に XA 対応の JMS プロバイダーの場合は、JtaTransactionManager を "transactionManager" として指定します。これは、通常は Jakarta EE サーバーで実行する場合ですが、JTA トランザクションマネージャーが存在する他の環境でも当てはまります。これにより、追加の実行時処理オーバーヘッドを犠牲にして、カスタム重複メッセージチェックなしで完全な「正確に 1 回」の保証が得られます。

トランザクションを外部で管理する必要がない場合は、JmsTransactionManager よりも "sessionTransacted" フラグを強く推奨します。JTA を使用している場合、またはカスタムの外部トランザクション構成と同期する必要がある場合にのみ、トランザクションマネージャーを設定してください。

導入:
2.0
作成者:
Juergen Hoeller, Stephane Nicoll, Brian Clozel
関連事項:
  • コンストラクターの詳細

    • AbstractMessageListenerContainer

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

    • setConcurrency

      public abstract void setConcurrency(StringSE concurrency)
      同時実行制限を指定します。
    • setDestination

      public void setDestination(@Nullable DestinationEE destination)
      メッセージの送信先を設定します。

      あるいは、DestinationResolver を介して動的に解決される "destinationName" を指定します。

      メモ: 実行時に宛先を置き換えることができ、リスナーコンテナーは新しい宛先をすぐに選択します (たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で動作します)。ただし、これは高度な使用箇所と見なされるため、注意して使用してください。

      関連事項:
    • getDestination

      @Nullable public DestinationEE getDestination()
      メッセージを受け取る宛先を返します。構成された宛先が実際の DestinationEE 型でない場合は、null になります。c.f. when the destination is a String
    • setDestinationName

      public void setDestinationName(@Nullable StringSE destinationName)
      メッセージを受信する宛先の名前を設定します。

      指定された名前は、構成された destination resolver を介して動的に解決されます。

      または、JMS DestinationEE オブジェクトを「宛先」として指定します。

      メモ: 実行時に宛先を置き換えることができ、リスナーコンテナーは新しい宛先をすぐに選択します (たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で動作します)。ただし、これは高度な使用箇所と見なされるため、注意して使用してください。

      関連事項:
    • getDestinationName

      @Nullable public StringSE getDestinationName()
      メッセージを受信する宛先の名前を返します。構成された宛先が StringSE 型でない場合、null になります。c.f. when it is an actual Destination
    • getDestinationDescription

      protected StringSE getDestinationDescription()
      このコンテナーの JMS 宛先を説明する文字列を返します(決して null ではありません)。
    • setMessageSelector

      public void setMessageSelector(@Nullable StringSE messageSelector)
      JMS メッセージセレクター式を設定します(ない場合は null)。デフォルトはなしです。

      セレクター式の詳細な定義については、JMS 仕様を参照してください。

      メモ: メッセージセレクターは実行時に置き換えられる可能性があり、リスナーコンテナーは新しいセレクター値をすぐに取得します (たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で動作します)。ただし、これは高度な使用箇所と見なされるため、注意して使用してください。

    • getMessageSelector

      @Nullable public StringSE getMessageSelector()
      JMS メッセージセレクター式(ない場合は null)を返します。
    • setMessageListener

      public void setMessageListener(@Nullable ObjectSE messageListener)
      登録するメッセージリスナーの実装を設定します。これは、標準の JMS MessageListenerEE オブジェクトまたは Spring SessionAwareMessageListener オブジェクトのいずれかです。

      メモ: メッセージリスナーは実行時に置き換えられる可能性があり、リスナーコンテナーは新しいリスナーオブジェクトをすぐに取得します (たとえば、キャッシュレベルが CACHE_CONSUMER 未満である限り、DefaultMessageListenerContainer で動作します)。ただし、これは高度な使用箇所と見なされるため、注意して使用してください。

      例外:
      IllegalArgumentExceptionSE - 指定されたリスナーが MessageListenerEE でも SessionAwareMessageListener でもない場合
      関連事項:
    • getMessageListener

      @Nullable public ObjectSE getMessageListener()
      登録するメッセージリスナーオブジェクトを返します。
    • checkMessageListener

      protected void checkMessageListener(@Nullable ObjectSE messageListener)
      指定されたメッセージリスナーを確認し、サポートされているリスナー型に対応していない場合は例外をスローします。

      デフォルトでは、標準の JMS MessageListenerEE オブジェクトまたは Spring SessionAwareMessageListener オブジェクトのみが受け入れられます。

      パラメーター:
      messageListener - チェックするメッセージリスナーオブジェクト
      例外:
      IllegalArgumentExceptionSE - 指定されたリスナーが MessageListenerEE でも SessionAwareMessageListener でもない場合
      関連事項:
    • getDefaultSubscriptionName

      protected StringSE getDefaultSubscriptionName(ObjectSE messageListener)
      指定されたメッセージリスナーのデフォルトのサブスクリプション名を決定します。
      パラメーター:
      messageListener - チェックするメッセージリスナーオブジェクト
      戻り値:
      デフォルトのサブスクリプション名
      関連事項:
    • setSubscriptionDurable

      public void setSubscriptionDurable(boolean subscriptionDurable)
      サブスクリプションを永続的にするかどうかを設定します。使用する永続サブスクリプション名は、"subscriptionName" プロパティで指定できます。

      デフォルトは "false" です。永続サブスクリプションを登録するには、これを "true" に設定します。通常は "subscriptionName" 値と組み合わせて使用します (メッセージリスナークラス名がサブスクリプション名として十分な場合を除く)。

      トピック (pub-sub ドメイン) をリッスンしている場合にのみ意味があるため、このメソッドは "pubSubDomain" フラグも切り替えます。

      関連事項:
    • isSubscriptionDurable

      public boolean isSubscriptionDurable()
      サブスクリプションを永続的にするかどうかを返します。
    • setSubscriptionShared

      public void setSubscriptionShared(boolean subscriptionShared)
      サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、"subscriptionName" プロパティで指定できます。

      デフォルトは "false" です。共有サブスクリプションを登録するには、これを "true" に設定します。通常は "subscriptionName" 値と組み合わせて使用します (メッセージリスナークラス名がサブスクリプション名として十分な場合を除く)。共有サブスクリプションは永続的である場合もあるため、このフラグは "subscriptionDurable" と組み合わせて使用することもできます (多くの場合、そうします)。

      トピック (pub-sub ドメイン) をリッスンしている場合にのみ意味があるため、このメソッドは "pubSubDomain" フラグも切り替えます。

      JMS 2.0 互換のメッセージブローカーが必要です。

      導入:
      4.1
      関連事項:
    • isSubscriptionShared

      public boolean isSubscriptionShared()
      サブスクリプションを共有するかどうかを返します。
      導入:
      4.1
    • setSubscriptionName

      public void setSubscriptionName(@Nullable StringSE subscriptionName)
      作成するサブスクリプションの名前を設定します。共有または永続サブスクリプションを持つトピック(pub-sub ドメイン)の場合に適用されます。

      サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。

      メモ: 共有サブスクリプション(JMS 2.0 が必要)を除き、各サブスクリプションで許可される同時コンシューマーは 1 つ(このメッセージリスナーコンテナーのデフォルト)です。

      導入:
      4.1
      関連事項:
    • getSubscriptionName

      @Nullable public StringSE getSubscriptionName()
      作成するサブスクリプションの名前を返します(ある場合)。
      導入:
      4.1
    • setDurableSubscriptionName

      public void setDurableSubscriptionName(@Nullable StringSE durableSubscriptionName)
      作成する永続サブスクリプションの名前を設定します。このメソッドは pub-sub ドメインモードに切り替え、サブスクリプションの永続化もアクティブ化します。

      永続サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。

      メモ: 共有永続サブスクリプション(JMS 2.0 が必要)を除いて、各永続サブスクリプションで許可される同時コンシューマーは 1 つだけです(これはこのメッセージリスナーコンテナーのデフォルトです)。

      関連事項:
    • getDurableSubscriptionName

      @Nullable public StringSE getDurableSubscriptionName()
      作成する永続サブスクリプションの名前を返します(存在する場合)。
    • setPubSubNoLocal

      public void setPubSubNoLocal(boolean pubSubNoLocal)
      独自の接続によって公開されたメッセージの配信を禁止するかどうかを設定します。デフォルトは "false" です。
      導入:
      4.1
      関連事項:
    • isPubSubNoLocal

      public boolean isPubSubNoLocal()
      独自の接続によって公開されたメッセージの配信を禁止するかどうかを返します。
      導入:
      4.1
    • setReplyPubSubDomain

      public void setReplyPubSubDomain(boolean replyPubSubDomain)
      返信先の種類を設定します。デフォルトでは、構成された pubSubDomain 値が使用されます(JmsDestinationAccessor.isPubSubDomain() を参照)。

      この設定は、動的宛先が有効な場合に解決する宛先の型を主に示します。

      パラメーター:
      replyPubSubDomain - パブリッシュ / サブスクライブドメイン(TopicsEE)の場合は "true"、ポイントツーポイントドメインの場合は "false" ( QueuesEE )
      導入:
      4.2
      関連事項:
    • isReplyPubSubDomain

      public boolean isReplyPubSubDomain()
      パブリッシュ / サブスクライブドメイン(TopicsEE)が返信に使用されるかどうかを返します。それ以外の場合は、ポイントツーポイントドメイン(QueuesEE)が使用されます。
      次で指定:
      インターフェース MessageListenerContainerisReplyPubSubDomain 
      導入:
      4.2
    • setReplyQosSettings

      public void setReplyQosSettings(@Nullable QosSettings replyQosSettings)
      返信を送信するときに使用する QosSettings を構成します。null に設定して、ブローカーのデフォルトを使用する必要があることを示すことができます。
      パラメーター:
      replyQosSettings - 応答を送信するときに使用する QoS 設定、またはデフォルト値を使用する null 
      導入:
      5.0
    • getReplyQosSettings

      @Nullable public QosSettings getReplyQosSettings()
      インターフェースからコピーされた説明: MessageListenerContainer
      応答を送信するときに使用する QosSettings を返すか、ブローカーのデフォルトを使用する必要がある場合は null を返します。
      次で指定:
      インターフェース MessageListenerContainergetReplyQosSettings 
    • setMessageConverter

      public void setMessageConverter(@Nullable MessageConverter messageConverter)
      JMS メッセージを変換するための MessageConverter 戦略を設定します。
      導入:
      4.1
    • getMessageConverter

      @Nullable public MessageConverter getMessageConverter()
      インターフェースからコピーされた説明: MessageListenerContainer
      MessageEE があれば、それを変換するために使用できる MessageConverter を返します。
      次で指定:
      インターフェース MessageListenerContainergetMessageConverter 
    • setExceptionListener

      public void setExceptionListener(@Nullable ExceptionListenerEE exceptionListener)
      登録されたメッセージリスナーまたは呼び出しインフラストラクチャによって JMSException がスローされた場合に通知するように JMS ExceptionListener を設定します。
    • getExceptionListener

      @Nullable public ExceptionListenerEE getExceptionListener()
      登録されたメッセージリスナーまたは呼び出しインフラストラクチャ(存在する場合)によって JMSException がスローされた場合に通知する JMS ExceptionListener を返します。
    • setErrorHandler

      public void setErrorHandler(@Nullable ErrorHandler errorHandler)
      MessageEE の処理中にスローされたキャッチされない例外が発生した場合に呼び出される ErrorHandler を設定します。

      デフォルトでは、ErrorHandler は存在しないため、エラーレベルのログが唯一の結果になります。

    • getErrorHandler

      @Nullable public ErrorHandler getErrorHandler()
      MessageEE の処理中にスローされたキャッチされない例外が発生した場合に呼び出される ErrorHandler を返します。
      導入:
      4.1
    • setObservationRegistry

      public void setObservationRegistry(@Nullable io.micrometer.observation.ObservationRegistry observationRegistry)
      JMS message processing observations の記録に使用する ObservationRegistry を設定します。レジストリが設定されていない場合は、デフォルトで no-op 監視になります。
      導入:
      6.1
    • getObservationRegistry

      @Nullable public io.micrometer.observation.ObservationRegistry getObservationRegistry()
      JMS message processing observations の記録に使用された ObservationRegistry を返します。
      導入:
      6.1
    • setAcknowledgeAfterListener

      public void setAcknowledgeAfterListener(boolean acknowledgeAfterListener)
      メッセージリスナーが返された後、リスナーコンテナーが各 JMS メッセージを自動的に確認応答するかどうかを指定します。これは、ベンダー固有のモードを含むクライアント確認応答モードの場合に適用されますが、自動確認応答またはトランザクション JMS セッションの場合は適用されません。

      As of 6.2, the default is true: The listener container will acknowledge each JMS Message even in case of a vendor-specific mode, assuming client-acknowledge style processing for custom vendor modes.

      If the provided listener prefers to manually acknowledge each message in the listener itself, in combination with an "individual acknowledge" mode, switch this flag to {code false} along with the vendor-specific mode.

      導入:
      6.2.6
      関連事項:
    • isAcknowledgeAfterListener

      public boolean isAcknowledgeAfterListener()
      メッセージリスナーが返された後に、リスナーコンテナーが各 JMS メッセージを自動的に確認するかどうかを決定します。
      導入:
      6.2.6
      関連事項:
    • setExposeListenerSession

      public void setExposeListenerSession(boolean exposeListenerSession)
      リスナー JMS セッションを登録済みの SessionAwareMessageListener および JmsTemplate 呼び出しに公開するかどうかを設定します。

      デフォルトは "true" で、リスナーの SessionEE を再利用します。これをオフにすると、一部の JMS プロバイダーで必要になる可能性のある、同じ基礎となる JMS ConnectionEE からフェッチされた新しい JMS セッションが公開されます。

      外部トランザクションマネージャーによって管理されるセッションは、常に JmsTemplate 呼び出しに公開されることに注意してください。JmsTemplate 露出に関しては、この設定はローカルでトランザクション処理されたセッションにのみ影響します。

      関連事項:
    • isExposeListenerSession

      public boolean isExposeListenerSession()
      リスナー JMS SessionEE を登録済みの SessionAwareMessageListener に公開するかどうかを返します。
    • setAcceptMessagesWhileStopping

      public void setAcceptMessagesWhileStopping(boolean acceptMessagesWhileStopping)
      リスナコンテナーの停止中に受信メッセージを受け入れるかどうかを設定します。

      デフォルトは "false" で、受信の試行を中止することでそのようなメッセージを拒否します。停止フェーズでもこのようなメッセージを完全に処理するには、このフラグをオンにします。ただし、新しく送信されたメッセージでも処理される可能性があるという欠点があります(すべての受信タイムアウトが期限切れになる前に受信した場合)。

      注意 : このような受信メッセージの受信試行を中止すると、影響を受けるメッセージのプロバイダーの再試行回数が減少する可能性があります。同時コンシューマーの数が多い場合は、すべての潜在的な停止シナリオで安全を確保するために、リトライの数がコンシューマーの数よりも多いことを確認してください。

    • isAcceptMessagesWhileStopping

      public boolean isAcceptMessagesWhileStopping()
      リスナーコンテナーが停止している間に受信メッセージを受け入れるかどうかを返します。
    • validateConfiguration

      protected void validateConfiguration()
      クラスからコピーされた説明: AbstractJmsListeningContainer
      このコンテナーの構成を検証します。

      デフォルトの実装は空です。サブクラスでオーバーライドされます。

      オーバーライド:
      クラス AbstractJmsListeningContainervalidateConfiguration 
    • setupMessageListener

      public void setupMessageListener(ObjectSE messageListener)
      インターフェースからコピーされた説明: MessageListenerContainer
      使用するメッセージリスナーを設定します。そのメッセージリスナー型がサポートされていない場合、IllegalArgumentExceptionSE をスローします。
      次で指定:
      インターフェース MessageListenerContainersetupMessageListener 
    • executeListener

      protected void executeListener(SessionEE session, MessageEE message)
      指定されたリスナーを実行し、後でトランザクションをコミットまたはロールバックします(必要な場合)。
      パラメーター:
      session - 操作する JMS セッション
      message - 受信した JMS MessageEE
      関連事項:
    • createObservation

      protected io.micrometer.observation.Observation createObservation(MessageEE message)
      JMS メッセージ処理用の Observation を作成しますが、開始しません。

      Micrometer Jakarta インストルメンテーションが利用できない場合、または観測レジストリが構成されていない場合は、"no-op" 観測が返されます。

      パラメーター:
      message - 守るべきメッセージ
      導入:
      6.1
    • doExecuteListener

      protected void doExecuteListener(SessionEE session, MessageEE message) throws JMSExceptionEE
      指定されたリスナーを実行し、後でトランザクションをコミットまたはロールバックします(必要な場合)。
      パラメーター:
      session - 操作する JMS セッション
      message - 受信した JMS MessageEE
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
      関連事項:
    • invokeListener

      protected void invokeListener(SessionEE session, MessageEE message) throws JMSExceptionEE
      指定されたリスナーを呼び出す: 標準的な JMS の MessageListener または、(できれば)Spring の SessionAwareMessageListener。
      パラメーター:
      session - 操作する JMS セッション
      message - 受信した JMS MessageEE
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
      関連事項:
    • doInvokeListener

      protected void doInvokeListener(SessionAwareMessageListener listener, SessionEE session, MessageEE message) throws JMSExceptionEE
      指定されたリスナーを Spring SessionAwareMessageListener として呼び出し、要求された場合は新しい JMS セッションを(潜在的に独自のトランザクションで)リスナーに公開します。
      パラメーター:
      listener - 呼び出す Spring SessionAwareMessageListener
      session - 操作する JMS セッション
      message - 受信した JMS MessageEE
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
      関連事項:
    • doInvokeListener

      protected void doInvokeListener(MessageListenerEE listener, MessageEE message) throws JMSExceptionEE
      指定されたリスナーを標準の JMS MessageListenerEE として呼び出します。

      デフォルトの実装では、onMessage メソッドの単純な呼び出しを実行します。

      パラメーター:
      listener - 呼び出す JMS MessageListener 
      message - 受信した JMS MessageEE
      例外:
      JMSExceptionEE - JMS API メソッドによってスローされた場合
      関連事項:
    • commitIfNecessary

      protected void commitIfNecessary(SessionEE session, @Nullable MessageEE message) throws JMSExceptionEE
      必要に応じて、コミットまたはメッセージ確認を実行します。
      パラメーター:
      session - コミットする JMS SessionEE
      message - MessageEE が確認する
      例外:
      JMSExceptionEE - コミット失敗の場合
    • rollbackIfNecessary

      protected void rollbackIfNecessary(SessionEE session) throws JMSExceptionEE
      必要に応じて、ロールバックを実行します。
      パラメーター:
      session - ロールバックする JMS セッション
      例外:
      JMSExceptionEE - ロールバックエラーの場合
    • rollbackOnExceptionIfNecessary

      protected void rollbackOnExceptionIfNecessary(SessionEE session, ThrowableSE ex) throws JMSExceptionEE
      ロールバックを実行し、ロールバック例外を適切に処理します。
      パラメーター:
      session - ロールバックする JMS セッション
      ex - スローされたアプリケーションの例外またはエラー
      例外:
      JMSExceptionEE - ロールバックエラーの場合
    • isSessionLocallyTransacted

      protected boolean isSessionLocallyTransacted(SessionEE session)
      指定されたセッションがローカルでトランザクション処理されているかどうか、つまり、そのトランザクションが外部リスナーのコーディネーターではなく、このリスナーコンテナーのセッション処理によって管理されているかどうかを確認します。

      メモ: セッション自体のトランザクション済みフラグは、以前にすでにチェックされています。このメソッドは、セッションのトランザクションがローカルであるか、外部で調整されているかを確認するためのものです。

      パラメーター:
      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

      protected void handleListenerException(ThrowableSE ex)
      リスナーの実行中に発生した特定の例外を処理します。

      デフォルトの実装では、例外を JMS プロバイダーに伝播せずに、WARN レベルでログに記録します。確認応答やトランザクションのすべての処理がこのリスナーコンテナーによって行われると仮定します。これはサブクラスでオーバーライドできます。

      パラメーター:
      ex - 処理する例外
    • invokeExceptionListener

      protected void invokeExceptionListener(JMSExceptionEE ex)
      登録済みの JMS ExceptionListener があれば呼び出します。
      パラメーター:
      ex - JMS 処理中に発生した例外
      関連事項:
    • invokeErrorHandler

      protected void invokeErrorHandler(ThrowableSE ex)
      登録されている ErrorHandler がある場合はそれを呼び出します。それ以外の場合は、WARN レベルでログを記録します。
      パラメーター:
      ex - JMS 処理中に発生した捕捉されなかったエラー
      関連事項: