クラス CachingConnectionFactory

java.lang.ObjectSE
org.springframework.jms.connection.SingleConnectionFactory
org.springframework.jms.connection.CachingConnectionFactory
実装されたすべてのインターフェース:
ConnectionFactoryEEExceptionListenerEEQueueConnectionFactoryEETopicConnectionFactoryEEDisposableBeanInitializingBeanLifecycle

public class CachingConnectionFactory extends SingleConnectionFactory
SessionEE キャッシングと MessageProducerEE および MessageConsumerEE キャッシングを追加する SingleConnectionFactory サブクラス。この ConnectionFactory は、デフォルトで "reconnectOnException" property を "true" に切り替え、基礎となる接続の自動回復を可能にします。

デフォルトでは、単一のセッションのみがキャッシュされ、リクエストされたセッションがさらに作成されてオンデマンドで破棄されます。同時実行性の高い環境の場合は、"sessionCacheSize" value を上げることを検討してください。

JMS 1.0.2 API を使用する場合、この ConnectionFactory は実行時に使用される JMS API メソッドに従ってキュー / トピックモードに切り替わります。createQueueConnection および createTopicConnection はそれぞれキュー / トピックモードになります。一般的な createConnection 呼び出しは、両方のモードを提供できる JMS 1.1 接続につながります。

Spring Framework 5 の時点で、このクラスは JMS 2.0 JMSContext 呼び出しをサポートしているため、実行時に JMS 2.0 API が存在する必要があります。それでも、アプリケーションのセットアップによって実際の JMS 2.0 呼び出しがトリガーされない限り、JMS 1.1 ドライバー(JMS 2.0 API にバインドされている)に対して実行できます。

注: この ConnectionFactory では、共有接続から取得したすべてのセッションを明示的に閉じる必要があります。これはネイティブ JMS アクセスコードの通常の推奨事項です。ただし、この ConnectionFactory では、セッションの再利用を実際に許可するために、その使用が必須です。

キャッシュされたセッションから取得された MessageConsumers は、セッションが最終的にプールから削除されるまで閉じられないことにも注意してください。これにより、意味上の副作用が発生する場合があります。永続サブスクライバーの場合、論理 Session.close() 呼び出しもサブスクリプションを閉じます。同じセッションハンドルで同じサブスクリプションの恒久コンシューマーを再登録することはサポートされていません。まず、キャッシュされたセッションを閉じて再取得します。

最後になりましたが、一時キューとトピックの MessageProducers と MessageConsumers(TemporaryQueue/TemporaryTopic)はキャッシュされません。残念ながら、WebLogic JMS は、通常の宛先実装に一時キュー / トピックインターフェースを実装しているため、宛先をキャッシュできないことを誤って示しています。WebLogic で別の接続プール / キャッシュを使用するか、WebLogic の目的でこのクラスをカスタマイズしてください。

導入:
2.5.3
作成者:
Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • CachingConnectionFactory

      public CachingConnectionFactory()
      Bean スタイルの使用のために新しい CachingConnectionFactory を作成します。
      関連事項:
    • CachingConnectionFactory

      public CachingConnectionFactory(ConnectionFactoryEE targetConnectionFactory)
      指定されたターゲット ConnectionFactory の新しい CachingConnectionFactory を作成します。
      パラメーター:
      targetConnectionFactory - ターゲット ConnectionFactory
  • メソッドの詳細

    • setSessionCacheSize

      public void setSessionCacheSize(int sessionCacheSize)
      JMS セッションキャッシュに必要なサイズを指定します(JMS セッション型ごと)。

      このキャッシュサイズは、セッション確認応答型(auto、client、dups_ok、transacted)あたりのキャッシュされたセッション数の最大制限です。結果として、キャッシュされたセッションの実際の数は、指定された値の最大 4 倍になる可能性があります。異なる確認応答型を混合して一致させることはほとんどありません。

      デフォルトは 1 です。: 単一のセッションをキャッシュし、必要に応じてさらにセッションを(再)作成します。キャッシュされたセッションの数を増やす場合は、10 などの数を指定します。ただし、同時実行性の低いシナリオでは 1 で十分な場合があります。

      関連事項:
    • getSessionCacheSize

      public int getSessionCacheSize()
      JMS セッションキャッシュに必要なサイズを返します(JMS セッション型ごと)。
    • setCacheProducers

      public void setCacheProducers(boolean cacheProducers)
      JMS セッションインスタンスごとに JMS MessageProducers をキャッシュするかどうかを指定します(より具体的には、宛先とセッションごとに 1 つの MessageProducer)。

      デフォルトは "true" です。常にオンデマンドで MessageProducers を再作成するには、これを "false" に切り替えます。

    • isCacheProducers

      public boolean isCacheProducers()
      JMS セッションインスタンスごとに JMS MessageProducers をキャッシュするかどうかを返します。
    • setCacheConsumers

      public void setCacheConsumers(boolean cacheConsumers)
      JMS セッションインスタンスごとに JMS MessageConsumers をキャッシュするかどうかを指定します(具体的には、宛先ごとに 1 つの MessageConsumer、セレクター文字列、セッション)。永続サブスクライバーは、セッションハンドルが論理的に閉じるまでキャッシュされることに注意してください。

      デフォルトは "true" です。常にオンデマンドで MessageConsumers を再作成するには、これを "false" に切り替えます。

    • isCacheConsumers

      public boolean isCacheConsumers()
      JMS セッションインスタンスごとに JMS MessageConsumers をキャッシュするかどうかを返します。
    • getCachedSessionCount

      public int getCachedSessionCount()
      現在のセッション数を返します。これは、この接続ファクトリによって現在キャッシュされているセッションの数を示します。
      導入:
      5.3.7
    • resetConnection

      public void resetConnection()
      セッションキャッシュもリセットします。
      オーバーライド:
      クラス SingleConnectionFactoryresetConnection 
      関連事項:
    • getSession

      @Nullable protected SessionEE getSession(ConnectionEE con, IntegerSE mode) throws JMSExceptionEE
      指定されたモードのキャッシュされたセッションをチェックします。
      オーバーライド:
      クラス SingleConnectionFactorygetSession 
      パラメーター:
      con - 操作する JMS 接続
      mode - セッション確認モード (Session.TRANSACTED または共通モードの 1 つ)
      戻り値:
      使用するセッション、または null は生の標準セッションの作成を示します
      例外:
      JMSExceptionEE - JMS API によってスローされた場合
    • getCachedSessionProxy

      protected SessionEE getCachedSessionProxy(SessionEE target, DequeSE<SessionEE> sessionList)
      指定されたセッションを、すべてのメソッド呼び出しを委譲するがクローズ呼び出しを適応させるプロキシでラップします。これは、アプリケーションコードが通常のセッションと同じように特別なフレームワークセッションを処理できるようにできます。
      パラメーター:
      target - ラップする元のセッション
      sessionList - 指定されたセッションが属するキャッシュされたセッションのリスト
      戻り値:
      ラップされたセッション