クラス TransactionAwareDataSourceProxy

java.lang.ObjectSE
org.springframework.jdbc.datasource.DelegatingDataSource
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
実装されたすべてのインターフェース:
WrapperSECommonDataSourceSEDataSourceSEInitializingBean

public class TransactionAwareDataSourceProxy extends DelegatingDataSource
ターゲット JDBC DataSourceSE のプロキシ。Spring 管理のトランザクションの認識を追加します。Jakarta EE サーバーによって提供されるトランザクション JNDI DataSource に似ています。

Spring のデータアクセスサポートを認識しないままにする必要があるデータアクセスコードは、このプロキシと連携して、Spring 管理のトランザクションにシームレスに参加できます。トランザクションマネージャー、たとえば DataSourceTransactionManager 、このプロキシではなく、基礎となる DataSource で動作する必要があることに注意してください。

TransactionAwareDataSourceProxy が DataSource プロキシ / アダプターのチェーンの最も外側の DataSource であることを確認してください。TransactionAwareDataSourceProxy は、ターゲット接続プールに直接委譲するか、LazyConnectionDataSourceProxyUserCredentialsDataSourceAdapter などの中間プロキシ / アダプターに委譲できます。

DataSourceTransactionManager によって管理されているスレッドバインドされたトランザクションに自動的に参加するための DataSourceUtils へのデリゲート。返された接続での getConnection 呼び出しと close 呼び出しは、トランザクション内で適切に動作します。つまり、常にトランザクション接続で動作します。トランザクション内にない場合、通常の DataSource の動作が適用されます。

このプロキシを使用すると、データアクセスコードはプレーンな JDBC API で動作し、Jakarta EE/JTA 環境の JDBC コードと同様に、Spring 管理のトランザクションに参加できます。ただし、可能であれば、Spring の DataSourceUtils、JdbcTemplate、JDBC 操作オブジェクトを使用して、ターゲット DataSource のプロキシがなくてもトランザクションに参加できるため、最初にそのようなプロキシを定義する必要がありません。

さらなる効果として、トランザクション対応の DataSource を使用すると、残りのトランザクションタイムアウトが、作成されたすべての JDBC(準備済み / 呼び出し可能)ステートメントに適用されます。つまり、標準 JDBC を介して実行されるすべての操作は、Spring 管理のトランザクションタイムアウトに自動的に参加します。

注意 : この DataSource プロキシは、close 呼び出しを適切に処理するために、(ConnectionProxy インターフェースを実装する)ラップされた接続を返す必要があります。Wrapper.unwrap(java.lang.Class<T>)SE を使用してネイティブ JDBC 接続を取得します。

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

    • TransactionAwareDataSourceProxy

      public TransactionAwareDataSourceProxy()
      新しい TransactionAwareDataSourceProxy を作成します。
      関連事項:
    • TransactionAwareDataSourceProxy

      public TransactionAwareDataSourceProxy(DataSourceSE targetDataSource)
      新しい TransactionAwareDataSourceProxy を作成します。
      パラメーター:
      targetDataSource - ターゲット DataSource
  • メソッドの詳細

    • setLazyTransactionalConnections

      public void setLazyTransactionalConnections(boolean lazyTransactionalConnections)
      実際のデータアクセス時にトランザクション対象の Connection を遅延取得するかどうかを指定します。

      デフォルトは "true" です。"false" を指定すると、トランザクション対応の Connection ハンドルが取得されたときに、ターゲットの Connection を即座に取得します。

      導入:
      6.1.2
    • setReobtainTransactionalConnections

      public void setReobtainTransactionalConnections(boolean reobtainTransactionalConnections)
      トランザクション内で実行される各操作のターゲット接続を再取得するかどうかを指定します。

      デフォルトは "false" です。"true" を指定すると、接続プロキシのすべての呼び出しでトランザクション接続が再取得されます。トランザクションの境界を越えて接続ハンドルを保持している場合、これは JBoss で推奨されます。

      この設定の効果は、"hibernate.connection.release_mode" 値 "after_statement" と同様です。

    • getConnection

      public ConnectionSE getConnection() throws SQLExceptionSE
      Spring 管理のトランザクションに自動的に参加する DataSourceUtils へのデリゲート。元の SQLException がある場合はそれをスローします。

      返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。

      次で指定:
      インターフェース DataSourceSEgetConnection 
      オーバーライド:
      クラス DelegatingDataSourcegetConnection 
      戻り値:
      トランザクション接続がある場合はそれ、新しい接続がある場合
      例外:
      SQLExceptionSE
      関連事項:
    • getTransactionAwareConnectionProxy

      protected ConnectionSE getTransactionAwareConnectionProxy(DataSourceSE targetDataSource)
      すべてのメソッド呼び出しを委譲するが、close() 呼び出しは DataSourceUtils に委譲するプロキシを使用して、指定された接続をラップします。
      パラメーター:
      targetDataSource - 接続元の DataSource
      戻り値:
      ラップされた接続
      関連事項:
    • shouldObtainFixedConnection

      protected boolean shouldObtainFixedConnection(DataSourceSE targetDataSource)
      プロキシの固定ターゲット接続を取得するか、各操作のターゲット接続を再取得するかを決定します。

      デフォルトの実装では、すべての標準ケースで true が返されます。これは、アクティブなトランザクション内で非固定のターゲット接続を強制する "reobtainTransactionalConnections" フラグによってオーバーライドできます。非トランザクションアクセスは常に固定接続を使用することに注意してください。

      パラメーター:
      targetDataSource - ターゲット DataSource