Class TransactionAwareConnectionFactoryProxy
- java.lang.Object
- org.springframework.jca.cci.connection.DelegatingConnectionFactory
- org.springframework.jca.cci.connection.TransactionAwareConnectionFactoryProxy
- All Implemented Interfaces:
Serializable
,Referenceable
,ConnectionFactory
,Referenceable
,InitializingBean
public class TransactionAwareConnectionFactoryProxy extends DelegatingConnectionFactory
Proxy for a target CCIConnectionFactory
, adding awareness of Spring-managed transactions. Similar to a transactional JNDI ConnectionFactory 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 the
CciLocalTransactionManager
, still needs to work with underlying ConnectionFactory, not with this proxy.Make sure that TransactionAwareConnectionFactoryProxy is the outermost ConnectionFactory of a chain of ConnectionFactory proxies/adapters. TransactionAwareConnectionFactoryProxy can delegate either directly to the target connection pool or to some intermediate proxy/adapter like
ConnectionSpecConnectionFactoryAdapter
.Delegates to
ConnectionFactoryUtils
for automatically participating in thread-bound transactions, for example managed byCciLocalTransactionManager
.getConnection
calls andclose
calls on returned Connections will behave properly within a transaction, i.e. always operate on the transactional Connection. If not within a transaction, normal ConnectionFactory behavior applies.This proxy allows data access code to work with the plain JCA CCI API and still participate in Spring-managed transactions, similar to CCI code in a Java EE/JTA environment. However, if possible, use Spring's ConnectionFactoryUtils, CciTemplate or CCI operation objects to get transaction participation even without a proxy for the target ConnectionFactory, avoiding the need to define such a proxy in the first place.
NOTE: This ConnectionFactory proxy needs to return wrapped Connections in order to handle close calls properly. Therefore, the returned Connections cannot be cast to a native CCI Connection type or to a connection pool implementation type.
- Since:
- 1.2
- Author:
- Juergen Hoeller
- See Also:
ConnectionFactory.getConnection()
,Connection.close()
,ConnectionFactoryUtils.doGetConnection(javax.resource.cci.ConnectionFactory)
,ConnectionFactoryUtils.doReleaseConnection(javax.resource.cci.Connection, javax.resource.cci.ConnectionFactory)
, Serialized Form
Constructor Summary
Constructors Constructor Description TransactionAwareConnectionFactoryProxy()
Create a new TransactionAwareConnectionFactoryProxy.TransactionAwareConnectionFactoryProxy(ConnectionFactory targetConnectionFactory)
Create a new TransactionAwareConnectionFactoryProxy.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Connection
getConnection()
Delegate to ConnectionFactoryUtils for automatically participating in Spring-managed transactions.protected Connection
getTransactionAwareConnectionProxy(Connection target, ConnectionFactory cf)
Wrap the given Connection with a proxy that delegates every method call to it but delegatesclose
calls to ConnectionFactoryUtils.Methods inherited from class org.springframework.jca.cci.connection.DelegatingConnectionFactory
afterPropertiesSet, getConnection, getMetaData, getRecordFactory, getReference, getTargetConnectionFactory, obtainTargetConnectionFactory, setReference, setTargetConnectionFactory
Constructor Detail
TransactionAwareConnectionFactoryProxy
public TransactionAwareConnectionFactoryProxy()
Create a new TransactionAwareConnectionFactoryProxy.
TransactionAwareConnectionFactoryProxy
public TransactionAwareConnectionFactoryProxy(ConnectionFactory targetConnectionFactory)
Create a new TransactionAwareConnectionFactoryProxy.- Parameters:
targetConnectionFactory
- the target ConnectionFactory
Method Detail
getConnection
public Connection getConnection() throws ResourceException
Delegate to ConnectionFactoryUtils for automatically participating in Spring-managed transactions. Throws the original ResourceException, if any.- Specified by:
getConnection
in interfaceConnectionFactory
- Overrides:
getConnection
in classDelegatingConnectionFactory
- Returns:
- a transactional Connection if any, a new one else
- Throws:
ResourceException
- See Also:
ConnectionFactoryUtils.doGetConnection(javax.resource.cci.ConnectionFactory)
getTransactionAwareConnectionProxy
protected Connection getTransactionAwareConnectionProxy(Connection target, ConnectionFactory cf)
Wrap the given Connection with a proxy that delegates every method call to it but delegatesclose
calls to ConnectionFactoryUtils.- Parameters:
target
- the original Connection to wrapcf
- the ConnectionFactory that the Connection came from- Returns:
- the wrapped Connection
- See Also:
Connection.close()
,ConnectionFactoryUtils.doReleaseConnection(javax.resource.cci.Connection, javax.resource.cci.ConnectionFactory)