org.springframework.jdbc.datasource
Class ConnectionHolder

java.lang.Object
  extended by org.springframework.transaction.support.ResourceHolderSupport
      extended by org.springframework.jdbc.datasource.ConnectionHolder
All Implemented Interfaces:
ResourceHolder

public class ConnectionHolder
extends ResourceHolderSupport

Connection holder, wrapping a JDBC Connection. DataSourceTransactionManager binds instances of this class to the thread, for a specific DataSource.

Inherits rollback-only support for nested JDBC transactions and reference count functionality from the base class.

Note: This is an SPI class, not intended to be used by applications.

Since:
06.05.2003
Author:
Juergen Hoeller
See Also:
DataSourceTransactionManager, DataSourceUtils

Field Summary
private  ConnectionHandle connectionHandle
           
private  java.sql.Connection currentConnection
           
static java.lang.String SAVEPOINT_NAME_PREFIX
           
private  int savepointCounter
           
private  java.lang.Boolean savepointsSupported
           
private  boolean transactionActive
           
 
Constructor Summary
ConnectionHolder(java.sql.Connection connection)
          Create a new ConnectionHolder for the given JDBC Connection, wrapping it with a SimpleConnectionHandle, assuming that there is no ongoing transaction.
ConnectionHolder(java.sql.Connection connection, boolean transactionActive)
          Create a new ConnectionHolder for the given JDBC Connection, wrapping it with a SimpleConnectionHandle.
ConnectionHolder(ConnectionHandle connectionHandle)
          Create a new ConnectionHolder for the given ConnectionHandle.
 
Method Summary
 void clear()
          Clear the transactional state of this resource holder.
 java.sql.Savepoint createSavepoint()
          Create a new JDBC 3.0 Savepoint for the current Connection, using generated savepoint names that are unique for the Connection.
 java.sql.Connection getConnection()
          Return the current Connection held by this ConnectionHolder.
 ConnectionHandle getConnectionHandle()
          Return the ConnectionHandle held by this ConnectionHolder.
protected  boolean hasConnection()
          Return whether this holder currently has a Connection.
protected  boolean isTransactionActive()
          Return whether this holder represents an active, JDBC-managed transaction.
 void released()
          Releases the current Connection held by this ConnectionHolder.
protected  void setConnection(java.sql.Connection connection)
          Override the existing Connection handle with the given Connection.
protected  void setTransactionActive(boolean transactionActive)
          Set whether this holder represents an active, JDBC-managed transaction.
 boolean supportsSavepoints()
          Return whether JDBC 3.0 Savepoints are supported.
 
Methods inherited from class org.springframework.transaction.support.ResourceHolderSupport
getDeadline, getTimeToLiveInMillis, getTimeToLiveInSeconds, hasTimeout, isOpen, isRollbackOnly, isSynchronizedWithTransaction, isVoid, requested, reset, setRollbackOnly, setSynchronizedWithTransaction, setTimeoutInMillis, setTimeoutInSeconds, unbound
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SAVEPOINT_NAME_PREFIX

public static final java.lang.String SAVEPOINT_NAME_PREFIX
See Also:
Constant Field Values

connectionHandle

private ConnectionHandle connectionHandle

currentConnection

private java.sql.Connection currentConnection

transactionActive

private boolean transactionActive

savepointsSupported

private java.lang.Boolean savepointsSupported

savepointCounter

private int savepointCounter
Constructor Detail

ConnectionHolder

public ConnectionHolder(ConnectionHandle connectionHandle)
Create a new ConnectionHolder for the given ConnectionHandle.

Parameters:
connectionHandle - the ConnectionHandle to hold

ConnectionHolder

public ConnectionHolder(java.sql.Connection connection)
Create a new ConnectionHolder for the given JDBC Connection, wrapping it with a SimpleConnectionHandle, assuming that there is no ongoing transaction.

Parameters:
connection - the JDBC Connection to hold
See Also:
SimpleConnectionHandle, ConnectionHolder(java.sql.Connection, boolean)

ConnectionHolder

public ConnectionHolder(java.sql.Connection connection,
                        boolean transactionActive)
Create a new ConnectionHolder for the given JDBC Connection, wrapping it with a SimpleConnectionHandle.

Parameters:
connection - the JDBC Connection to hold
transactionActive - whether the given Connection is involved in an ongoing transaction
See Also:
SimpleConnectionHandle
Method Detail

getConnectionHandle

public ConnectionHandle getConnectionHandle()
Return the ConnectionHandle held by this ConnectionHolder.


hasConnection

protected boolean hasConnection()
Return whether this holder currently has a Connection.


setTransactionActive

protected void setTransactionActive(boolean transactionActive)
Set whether this holder represents an active, JDBC-managed transaction.

See Also:
DataSourceTransactionManager

isTransactionActive

protected boolean isTransactionActive()
Return whether this holder represents an active, JDBC-managed transaction.


setConnection

protected void setConnection(java.sql.Connection connection)
Override the existing Connection handle with the given Connection. Reset the handle if given null.

Used for releasing the Connection on suspend (with a null argument) and setting a fresh Connection on resume.


getConnection

public java.sql.Connection getConnection()
Return the current Connection held by this ConnectionHolder.

This will be the same Connection until released gets called on the ConnectionHolder, which will reset the held Connection, fetching a new Connection on demand.

See Also:
ConnectionHandle.getConnection(), released()

supportsSavepoints

public boolean supportsSavepoints()
                           throws java.sql.SQLException
Return whether JDBC 3.0 Savepoints are supported. Caches the flag for the lifetime of this ConnectionHolder.

Throws:
java.sql.SQLException - if thrown by the JDBC driver

createSavepoint

public java.sql.Savepoint createSavepoint()
                                   throws java.sql.SQLException
Create a new JDBC 3.0 Savepoint for the current Connection, using generated savepoint names that are unique for the Connection.

Returns:
the new Savepoint
Throws:
java.sql.SQLException - if thrown by the JDBC driver

released

public void released()
Releases the current Connection held by this ConnectionHolder.

This is necessary for ConnectionHandles that expect "Connection borrowing", where each returned Connection is only temporarily leased and needs to be returned once the data operation is done, to make the Connection available for other operations within the same transaction. This is the case with JDO 2.0 DataStoreConnections, for example.

Overrides:
released in class ResourceHolderSupport
See Also:
DefaultJdoDialect.getJdbcConnection(PersistenceManager, boolean)

clear

public void clear()
Description copied from class: ResourceHolderSupport
Clear the transactional state of this resource holder.

Overrides:
clear in class ResourceHolderSupport