open class TransactionAwareDataSourceProxy : DelegatingDataSource
Proxy for a target JDBC javax.sql.DataSource, adding awareness of Spring-managed transactions. Similar to a transactional JNDI DataSource as provided by a Java EE server.
Data access code that should remain unaware of Spring's data access support can work with this proxy to seamlessly participate in Spring-managed transactions. Note that the transaction manager, for example DataSourceTransactionManager, still needs to work with the underlying DataSource, not with this proxy.
Make sure that TransactionAwareDataSourceProxy is the outermost DataSource of a chain of DataSource proxies/adapters. TransactionAwareDataSourceProxy can delegate either directly to the target connection pool or to some intermediary proxy/adapter like LazyConnectionDataSourceProxy or UserCredentialsDataSourceAdapter.
Delegates to DataSourceUtils for automatically participating in thread-bound transactions, for example managed by DataSourceTransactionManager. getConnection calls and close calls on returned Connections will behave properly within a transaction, i.e. always operate on the transactional Connection. If not within a transaction, normal DataSource behavior applies.
This proxy allows data access code to work with the plain JDBC API and still participate in Spring-managed transactions, similar to JDBC code in a Java EE/JTA environment. However, if possible, use Spring's DataSourceUtils, JdbcTemplate or JDBC operation objects to get transaction participation even without a proxy for the target DataSource, avoiding the need to define such a proxy in the first place.
As a further effect, using a transaction-aware DataSource will apply remaining transaction timeouts to all created JDBC (Prepared/Callable)Statement. This means that all operations performed through standard JDBC will automatically participate in Spring-managed transaction timeouts.
NOTE: This DataSource proxy needs to return wrapped Connections (which implement the ConnectionProxy interface) in order to handle close calls properly. Use Connection#unwrap to retrieve the native JDBC Connection.
Author
Juergen Hoeller
Since
1.1
See Also
javax.sql.DataSource#getConnection()java.sql.Connection#close()DataSourceUtils#doGetConnectionDataSourceUtils#applyTransactionTimeoutDataSourceUtils#doReleaseConnection
TransactionAwareDataSourceProxy()TransactionAwareDataSourceProxy(targetDataSource: DataSource)
Create a new TransactionAwareDataSourceProxy. |
open fun getConnection(): Connection
Delegates to DataSourceUtils for automatically participating in Spring-managed transactions. Throws the original SQLException, if any. The returned Connection handle implements the ConnectionProxy interface, allowing to retrieve the underlying target Connection. |
|
open fun setReobtainTransactionalConnections(reobtainTransactionalConnections: Boolean): Unit
Specify whether to reobtain the target Connection for each operation performed within a transaction. The default is "false". Specify "true" to reobtain transactional Connections for every call on the Connection proxy; this is advisable on JBoss if you hold on to a Connection handle across transaction boundaries. The effect of this setting is similar to the "hibernate.connection.release_mode" value "after_statement". |