public class TransactionAwareDataSourceProxy extends DelegatingDataSource
DataSource
のプロキシであり、Spring 管理のトランザクションの認識を追加します。Java EE サーバーによって提供されるトランザクション JNDIDataSource に似ています。Spring のデータアクセスサポートを認識しないままにする必要があるデータアクセスコードは、このプロキシと連携して、Spring 管理のトランザクションにシームレスに参加できます。トランザクションマネージャー、たとえば DataSourceTransactionManager
は、このプロキシではなく、基礎となる DataSource で動作する必要があることに注意してください。
TransactionAwareDataSourceProxy が DataSource プロキシ / アダプターのチェーンの最も外側の DataSource であることを確認してください。TransactionAwareDataSourceProxy は、ターゲット接続プールに直接委譲するか、LazyConnectionDataSourceProxy
や UserCredentialsDataSourceAdapter
などの中間プロキシ / アダプターに委譲できます。
DataSourceTransactionManager
によって管理されているスレッドバインドされたトランザクションに自動的に参加するための DataSourceUtils
へのデリゲート。返された接続での getConnection
呼び出しと close
呼び出しは、トランザクション内で適切に動作します。つまり、常にトランザクション接続で動作します。トランザクション内にない場合、通常の DataSource の動作が適用されます。
このプロキシを使用すると、データアクセスコードはプレーンな JDBC API で動作し、Java EE/JTA 環境の JDBC コードと同様に、Spring 管理のトランザクションに参加できます。ただし、可能であれば、Spring の DataSourceUtils、JdbcTemplate、JDBC 操作オブジェクトを使用して、ターゲット DataSource のプロキシがなくてもトランザクションに参加できるため、最初にそのようなプロキシを定義する必要がありません。
さらなる効果として、トランザクション対応の DataSource を使用すると、残りのトランザクションタイムアウトが、作成されたすべての JDBC(準備済み / 呼び出し可能)ステートメントに適用されます。つまり、標準 JDBC を介して実行されるすべての操作は、Spring 管理のトランザクションタイムアウトに自動的に参加します。
注意 : この DataSource プロキシは、クローズコールを適切に処理するために、ラップされた接続(ConnectionProxy
インターフェースを実装する)を返す必要があります。Wrapper.unwrap(java.lang.Class<T>)
を使用して、ネイティブ JDBC 接続を取得します。
DataSource.getConnection()
, Connection.close()
, DataSourceUtils.doGetConnection(javax.sql.DataSource)
, DataSourceUtils.applyTransactionTimeout(java.sql.Statement, javax.sql.DataSource)
, DataSourceUtils.doReleaseConnection(java.sql.Connection, javax.sql.DataSource)
コンストラクターと説明 |
---|
TransactionAwareDataSourceProxy() 新しい TransactionAwareDataSourceProxy を作成します。 |
TransactionAwareDataSourceProxy(javax.sql.DataSource targetDataSource) 新しい TransactionAwareDataSourceProxy を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
java.sql.Connection | getConnection() Spring 管理のトランザクションに自動的に参加する DataSourceUtils へのデリゲート。 |
protected java.sql.Connection | getTransactionAwareConnectionProxy(javax.sql.DataSource targetDataSource) すべてのメソッド呼び出しを委譲するが、 close() 呼び出しは DataSourceUtils に委譲するプロキシを使用して、指定された接続をラップします。 |
void | setReobtainTransactionalConnections(boolean reobtainTransactionalConnections) トランザクション内で実行される各操作のターゲット接続を再取得するかどうかを指定します。 |
protected boolean | shouldObtainFixedConnection(javax.sql.DataSource targetDataSource) プロキシの固定ターゲット接続を取得するか、各操作のターゲット接続を再取得するかを決定します。 |
afterPropertiesSet, getConnection, getLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, obtainTargetDataSource, setLoginTimeout, setLogWriter, setTargetDataSource, unwrap
public TransactionAwareDataSourceProxy()
public TransactionAwareDataSourceProxy(javax.sql.DataSource targetDataSource)
targetDataSource
- ターゲット DataSourcepublic void setReobtainTransactionalConnections(boolean reobtainTransactionalConnections)
デフォルトは "false" です。"true" を指定すると、接続プロキシのすべての呼び出しでトランザクション接続が再取得されます。トランザクションの境界を越えて接続ハンドルを保持している場合、これは JBoss で推奨されます。
この設定の効果は、"hibernate.connection.release_mode" 値 "after_statement" と同様です。
public java.sql.Connection getConnection() throws java.sql.SQLException
返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。
javax.sql.DataSource
の getConnection
DelegatingDataSource
の getConnection
java.sql.SQLException
DataSourceUtils.doGetConnection(javax.sql.DataSource)
, ConnectionProxy.getTargetConnection()
protected java.sql.Connection getTransactionAwareConnectionProxy(javax.sql.DataSource targetDataSource)
close()
呼び出しは DataSourceUtils に委譲するプロキシを使用して、指定された接続をラップします。targetDataSource
- 接続元の DataSourceConnection.close()
, DataSourceUtils.doReleaseConnection(java.sql.Connection, javax.sql.DataSource)
protected boolean shouldObtainFixedConnection(javax.sql.DataSource targetDataSource)
デフォルトの実装では、すべての標準ケースで true
が返されます。これは、アクティブなトランザクション内で非固定のターゲット接続を強制する "reobtainTransactionalConnections"
フラグによってオーバーライドできます。非トランザクションアクセスは常に固定接続を使用することに注意してください。
targetDataSource
- ターゲット DataSource