org.springframework.jdbc.datasource
Class TransactionAwareDataSourceProxy

java.lang.Object
  extended byorg.springframework.jdbc.datasource.DelegatingDataSource
      extended byorg.springframework.jdbc.datasource.TransactionAwareDataSourceProxy
All Implemented Interfaces:
DataSource, InitializingBean

public class TransactionAwareDataSourceProxy
extends DelegatingDataSource

Proxy for a target DataSource that is aware of Spring-managed transactions. Similar to a transactional JNDI DataSource as provided by a J2EE server.

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 work 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 DataAccessUtils, 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.

NOTE: This DataSource proxy needs to return wrapped Connections to handle close calls on them properly. Therefore, the returned Connections cannot be cast to a native JDBC Connection type like OracleConnection, respectively to a connection pool implementation type.

Since:
1.1
Author:
Juergen Hoeller
See Also:
DataSourceUtils.doGetConnection(javax.sql.DataSource, boolean), DataSourceUtils.doCloseConnectionIfNecessary(java.sql.Connection, javax.sql.DataSource)

Constructor Summary
TransactionAwareDataSourceProxy()
          Create a new TransactionAwareDataSourceProxy.
TransactionAwareDataSourceProxy(DataSource targetDataSource)
          Create a new TransactionAwareDataSourceProxy.
 
Method Summary
 Connection getConnection()
          Delegate to DataSourceUtils for automatically participating in Spring-managed transactions.
protected  Connection getTransactionAwareConnectionProxy(Connection target, DataSource ds)
          Wrap the given Connection with a proxy that delegates every method call to it but delegates close calls to DataSourceUtils.
 
Methods inherited from class org.springframework.jdbc.datasource.DelegatingDataSource
afterPropertiesSet, getConnection, getLoginTimeout, getLogWriter, getTargetDataSource, setLoginTimeout, setLogWriter, setTargetDataSource
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TransactionAwareDataSourceProxy

public TransactionAwareDataSourceProxy()
Create a new TransactionAwareDataSourceProxy.

See Also:
DelegatingDataSource.setTargetDataSource(javax.sql.DataSource)

TransactionAwareDataSourceProxy

public TransactionAwareDataSourceProxy(DataSource targetDataSource)
Create a new TransactionAwareDataSourceProxy.

Parameters:
targetDataSource - the target DataSource
Method Detail

getConnection

public Connection getConnection()
                         throws SQLException
Delegate to DataSourceUtils for automatically participating in Spring-managed transactions. Throws the original SQLException, if any.

Specified by:
getConnection in interface DataSource
Overrides:
getConnection in class DelegatingDataSource
Returns:
a transactional Connection if any, a new one else
Throws:
SQLException
See Also:
DataSourceUtils.doGetConnection(javax.sql.DataSource, boolean)

getTransactionAwareConnectionProxy

protected Connection getTransactionAwareConnectionProxy(Connection target,
                                                        DataSource ds)
Wrap the given Connection with a proxy that delegates every method call to it but delegates close calls to DataSourceUtils.

Parameters:
target - the original Connection to wrap
Returns:
the wrapped Connection
See Also:
DataSourceUtils.doCloseConnectionIfNecessary(java.sql.Connection, javax.sql.DataSource)


Copyright (C) 2003-2004 The Spring Framework Project.