Class ManagedConnection<C extends Connection>
java.lang.Object
org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
org.apache.tomcat.dbcp.dbcp2.DelegatingConnection<C>
org.apache.tomcat.dbcp.dbcp2.managed.ManagedConnection<C>
- Type Parameters:
C- the Connection type
- All Implemented Interfaces:
AutoCloseable,Connection,Wrapper,TrackedUse
ManagedConnection is responsible for managing a database connection in a transactional environment (typically called
"Container Managed"). A managed connection operates like any other connection when no global transaction (a.k.a. XA
transaction or JTA Transaction) is in progress. When a global transaction is active a single physical connection to
the database is used by all ManagedConnections accessed in the scope of the transaction. Connection sharing means
that all data access during a transaction has a consistent view of the database. When the global transaction is
committed or rolled back the enlisted connections are committed or rolled back. Typically, upon transaction
completion, a connection returns to the auto commit setting in effect before being enlisted in the transaction, but
some vendors do not properly implement this.
When enlisted in a transaction the setAutoCommit(), commit(), rollback(), and setReadOnly() methods throw a SQLException. This is necessary to assure that the transaction completes as a single unit.
- Since:
- 2.0
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classDelegates totransactionComplete()for transaction completion events. -
Field Summary
Fields inherited from interface java.sql.Connection
TRANSACTION_NONE, TRANSACTION_READ_COMMITTED, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE -
Constructor Summary
ConstructorsConstructorDescriptionManagedConnection(ObjectPool<C> pool, TransactionRegistry transactionRegistry, boolean accessToUnderlyingConnectionAllowed) Constructs a new instance responsible for managing a database connection in a transactional environment. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidThrows a SQLException if this connection is not open.voidclose()Closes the underlying connection, and close any Statements that were not explicitly closed.voidcommit()Returns my underlyingConnection.If my underlyingConnectionis not aDelegatingConnection, returns it, otherwise recursively invokes this method on my delegate.Gets the transaction context.Gets the transaction registry.booleanIf false, getDelegate() and getInnermostDelegate() will return null.voidrollback()voidsetAutoCommit(boolean autoCommit) voidsetReadOnly(boolean readOnly) protected voidCompletes the transaction.Methods inherited from class org.apache.tomcat.dbcp.dbcp2.DelegatingConnection
abort, activate, clearCachedState, clearWarnings, closeInternal, createArrayOf, createBlob, createClob, createNClob, createSQLXML, createStatement, createStatement, createStatement, createStruct, getAutoCommit, getCacheState, getCatalog, getClientInfo, getClientInfo, getDefaultQueryTimeout, getDefaultQueryTimeoutDuration, getDelegateInternal, getHoldability, getInnermostDelegateInternal, getMetaData, getNetworkTimeout, getSchema, getTransactionIsolation, getTypeMap, getWarnings, handleException, handleExceptionNoThrow, innermostDelegateEquals, isClosed, isClosedInternal, isReadOnly, isValid, isValid, isWrapperFor, nativeSQL, passivate, prepareCall, prepareCall, prepareCall, prepareStatement, prepareStatement, prepareStatement, prepareStatement, prepareStatement, prepareStatement, releaseSavepoint, rollback, setCacheState, setCatalog, setClientInfo, setClientInfo, setClosedInternal, setDefaultQueryTimeout, setDefaultQueryTimeout, setDelegate, setHoldability, setNetworkTimeout, setSavepoint, setSavepoint, setSchema, setTransactionIsolation, setTypeMap, toString, unwrapMethods inherited from class org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
addTrace, clearTrace, close, getLastUsed, getLastUsedInstant, getTrace, removeThisTrace, removeTrace, setLastUsed, setLastUsed, setLastUsedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface java.sql.Connection
beginRequest, endRequest, setShardingKey, setShardingKey, setShardingKeyIfValid, setShardingKeyIfValid
-
Constructor Details
-
ManagedConnection
public ManagedConnection(ObjectPool<C> pool, TransactionRegistry transactionRegistry, boolean accessToUnderlyingConnectionAllowed) throws SQLException Constructs a new instance responsible for managing a database connection in a transactional environment.- Parameters:
pool- The connection pool.transactionRegistry- The transaction registry.accessToUnderlyingConnectionAllowed- Whether or not to allow access to the underlying Connection.- Throws:
SQLException- Thrown when there is problem managing transactions.
-
-
Method Details
-
checkOpen
Description copied from class:DelegatingConnectionThrows a SQLException if this connection is not open.- Overrides:
checkOpenin classDelegatingConnection<C extends Connection>- Throws:
SQLException- Thrown if this connection is not open.
-
close
Description copied from class:DelegatingConnectionCloses the underlying connection, and close any Statements that were not explicitly closed. Sub-classes that override this method must:- Call
DelegatingConnection.passivate() - Call close (or the equivalent appropriate action) on the wrapped connection
- Set
closedtofalse
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceConnection- Overrides:
closein classDelegatingConnection<C extends Connection>- Throws:
SQLException- Ignored here, for subclasses.
- Call
-
commit
- Specified by:
commitin interfaceConnection- Overrides:
commitin classDelegatingConnection<C extends Connection>- Throws:
SQLException
-
getDelegate
Description copied from class:DelegatingConnectionReturns my underlyingConnection.- Overrides:
getDelegatein classDelegatingConnection<C extends Connection>- Returns:
- my underlying
Connection.
-
getInnermostDelegate
Description copied from class:DelegatingConnectionIf my underlyingConnectionis not aDelegatingConnection, returns it, otherwise recursively invokes this method on my delegate.Hence this method will return the first delegate that is not a
DelegatingConnection, ornullwhen no non-DelegatingConnectiondelegate can be found by traversing this chain.This method is useful when you may have nested
DelegatingConnections, and you want to make sure to obtain a "genuine"Connection.- Overrides:
getInnermostDelegatein classDelegatingConnection<C extends Connection>- Returns:
- innermost delegate.
-
getTransactionContext
Gets the transaction context.- Returns:
- The transaction context.
- Since:
- 2.6.0
-
getTransactionRegistry
Gets the transaction registry.- Returns:
- The transaction registry.
- Since:
- 2.6.0
-
isAccessToUnderlyingConnectionAllowed
public boolean isAccessToUnderlyingConnectionAllowed()If false, getDelegate() and getInnermostDelegate() will return null.- Returns:
- if false, getDelegate() and getInnermostDelegate() will return null
-
rollback
- Specified by:
rollbackin interfaceConnection- Overrides:
rollbackin classDelegatingConnection<C extends Connection>- Throws:
SQLException
-
setAutoCommit
- Specified by:
setAutoCommitin interfaceConnection- Overrides:
setAutoCommitin classDelegatingConnection<C extends Connection>- Throws:
SQLException
-
setReadOnly
- Specified by:
setReadOnlyin interfaceConnection- Overrides:
setReadOnlyin classDelegatingConnection<C extends Connection>- Throws:
SQLException
-
transactionComplete
protected void transactionComplete()Completes the transaction.
-