public class TransactionAwareDataSourceProxy extends DelegatingDataSource
DataSource
SE のプロキシ。Spring 管理のトランザクションの認識を追加します。Java EE サーバーによって提供されるトランザクション JNDI DataSource に似ています。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 プロキシは、close 呼び出しを適切に処理するために、(ConnectionProxy
インターフェースを実装する)ラップされた接続を返す必要があります。Wrapper.unwrap(java.lang.Class<T>)
SE を使用してネイティブ JDBC 接続を取得します。
DataSource.getConnection()
SE, Connection.close()
SE, DataSourceUtils.doGetConnection(javax.sql.DataSource)
, DataSourceUtils.applyTransactionTimeout(java.sql.Statement, javax.sql.DataSource)
, DataSourceUtils.doReleaseConnection(java.sql.Connection, javax.sql.DataSource)
コンストラクターと説明 |
---|
TransactionAwareDataSourceProxy() 新しい TransactionAwareDataSourceProxy を作成します。 |
TransactionAwareDataSourceProxy(DataSourceSE targetDataSource) 新しい TransactionAwareDataSourceProxy を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
ConnectionSE | getConnection() Spring 管理のトランザクションに自動的に参加する DataSourceUtils へのデリゲート。 |
protected ConnectionSE | getTransactionAwareConnectionProxy(DataSourceSE targetDataSource) すべてのメソッド呼び出しを委譲するが、 close() 呼び出しは DataSourceUtils に委譲するプロキシを使用して、指定された接続をラップします。 |
void | setReobtainTransactionalConnections(boolean reobtainTransactionalConnections) トランザクション内で実行される各操作のターゲット接続を再取得するかどうかを指定します。 |
protected boolean | shouldObtainFixedConnection(DataSourceSE targetDataSource) プロキシの固定ターゲット接続を取得するか、各操作のターゲット接続を再取得するかを決定します。 |
afterPropertiesSet, getConnection, getLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, obtainTargetDataSource, setLoginTimeout, setLogWriter, setTargetDataSource, unwrap
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public TransactionAwareDataSourceProxy()
public TransactionAwareDataSourceProxy(DataSourceSE targetDataSource)
targetDataSource
- ターゲット DataSourcepublic void setReobtainTransactionalConnections(boolean reobtainTransactionalConnections)
デフォルトは "false" です。"true" を指定すると、接続プロキシのすべての呼び出しでトランザクション接続が再取得されます。トランザクションの境界を越えて接続ハンドルを保持している場合、これは JBoss で推奨されます。
この設定の効果は、"hibernate.connection.release_mode" 値 "after_statement" と同様です。
public ConnectionSE getConnection() throws SQLExceptionSE
返された Connection ハンドルは ConnectionProxy インターフェースを実装し、基になるターゲット Connection を取得できるようにします。
DataSourceSE
の getConnectionSE
DelegatingDataSource
の getConnection
SQLExceptionSE
DataSourceUtils.doGetConnection(javax.sql.DataSource)
, ConnectionProxy.getTargetConnection()
protected ConnectionSE getTransactionAwareConnectionProxy(DataSourceSE targetDataSource)
close()
呼び出しは DataSourceUtils に委譲するプロキシを使用して、指定された接続をラップします。targetDataSource
- 接続元の DataSourceConnection.close()
SE, DataSourceUtils.doReleaseConnection(java.sql.Connection, javax.sql.DataSource)
protected boolean shouldObtainFixedConnection(DataSourceSE targetDataSource)
デフォルトの実装では、すべての標準ケースで true
が返されます。これは、アクティブなトランザクション内で非固定のターゲット接続を強制する "reobtainTransactionalConnections"
フラグによってオーバーライドできます。非トランザクションアクセスは常に固定接続を使用することに注意してください。
targetDataSource
- ターゲット DataSource