Proxy for a target JDBC
javax.sql.DataSource , adding awareness of
Spring-managed transactions. Similar to a transactional JNDI DataSource
as provided by a J2EE 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 J2EE/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. Therefore, the returned Connections cannot be cast
to a native JDBC Connection type like OracleConnection or to a connection
pool implementation type. Use a corresponding
org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractor to retrieve the native JDBC Connection.
author: Juergen Hoeller since: 1.1 See Also: javax.sql.DataSource.getConnection See Also: java.sql.Connection.close See Also: DataSourceUtils.doGetConnection See Also: DataSourceUtils.applyTransactionTimeout See Also: DataSourceUtils.doReleaseConnection |