Class DelegatingConnection<C extends java.sql.Connection>
- java.lang.Object
-
- org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
-
- org.apache.tomcat.dbcp.dbcp2.DelegatingConnection<C>
-
- Type Parameters:
C- the Connection type
- All Implemented Interfaces:
java.lang.AutoCloseable,java.sql.Connection,java.sql.Wrapper,TrackedUse
- Direct Known Subclasses:
ManagedConnection,PoolableConnection,PoolingConnection
public class DelegatingConnection<C extends java.sql.Connection> extends AbandonedTrace implements java.sql.Connection
A base delegating implementation ofConnection.All of the methods from the
Connectioninterface simply check to see that theConnectionis active, and call the corresponding method on the "delegate" provided in my constructor.Extends AbandonedTrace to implement Connection tracking and logging of code which created the Connection. Tracking the Connection ensures that the AbandonedObjectPool can close this connection and recycle it if its pool of connections is nearing exhaustion and this connection's last usage is older than the removeAbandonedTimeout.
- Since:
- 2.0
-
-
Constructor Summary
Constructors Constructor Description DelegatingConnection(C connection)Creates a wrapper for the Connection which traces this Connection in the AbandonedObjectPool.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description voidabort(java.util.concurrent.Executor executor)protected voidactivate()protected voidcheckOpen()voidclearCachedState()Clears the cached state.voidclearWarnings()voidclose()Closes the underlying connection, and close any Statements that were not explicitly closed.protected voidcloseInternal()voidcommit()java.sql.ArraycreateArrayOf(java.lang.String typeName, java.lang.Object[] elements)java.sql.BlobcreateBlob()java.sql.ClobcreateClob()java.sql.NClobcreateNClob()java.sql.SQLXMLcreateSQLXML()java.sql.StatementcreateStatement()java.sql.StatementcreateStatement(int resultSetType, int resultSetConcurrency)java.sql.StatementcreateStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)java.sql.StructcreateStruct(java.lang.String typeName, java.lang.Object[] attributes)booleangetAutoCommit()booleangetCacheState()Returns the state caching flag.java.lang.StringgetCatalog()java.util.PropertiesgetClientInfo()java.lang.StringgetClientInfo(java.lang.String name)java.lang.IntegergetDefaultQueryTimeout()Deprecated.java.time.DurationgetDefaultQueryTimeoutDuration()Gets the default query timeout that will be used forStatements created from this connection.CgetDelegate()Returns my underlyingConnection.protected CgetDelegateInternal()Gets the delegate connection.intgetHoldability()java.sql.ConnectiongetInnermostDelegate()If my underlyingConnectionis not aDelegatingConnection, returns it, otherwise recursively invokes this method on my delegate.java.sql.ConnectiongetInnermostDelegateInternal()Although this method is public, it is part of the internal API and should not be used by clients.java.sql.DatabaseMetaDatagetMetaData()intgetNetworkTimeout()java.lang.StringgetSchema()intgetTransactionIsolation()java.util.Map<java.lang.String,java.lang.Class<?>>getTypeMap()java.sql.SQLWarninggetWarnings()protected voidhandleException(java.sql.SQLException e)Handles the given exception by throwing it.protected <T extends java.lang.Throwable>
ThandleExceptionNoThrow(T e)Handles the givenSQLException.booleaninnermostDelegateEquals(java.sql.Connection c)Compares innermost delegate to the given connection.booleanisClosed()protected booleanisClosedInternal()booleanisReadOnly()booleanisValid(int timeoutSeconds)Deprecated.UseisValid(Duration).booleanisValid(java.time.Duration timeout)Tests if the connection has not been closed and is still valid.booleanisWrapperFor(java.lang.Class<?> iface)java.lang.StringnativeSQL(java.lang.String sql)protected voidpassivate()java.sql.CallableStatementprepareCall(java.lang.String sql)java.sql.CallableStatementprepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency)java.sql.CallableStatementprepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)java.sql.PreparedStatementprepareStatement(java.lang.String sql)java.sql.PreparedStatementprepareStatement(java.lang.String sql, int autoGeneratedKeys)java.sql.PreparedStatementprepareStatement(java.lang.String sql, int[] columnIndexes)java.sql.PreparedStatementprepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency)java.sql.PreparedStatementprepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)java.sql.PreparedStatementprepareStatement(java.lang.String sql, java.lang.String[] columnNames)voidreleaseSavepoint(java.sql.Savepoint savepoint)voidrollback()voidrollback(java.sql.Savepoint savepoint)voidsetAutoCommit(boolean autoCommit)voidsetCacheState(boolean cacheState)Sets the state caching flag.voidsetCatalog(java.lang.String catalog)voidsetClientInfo(java.lang.String name, java.lang.String value)voidsetClientInfo(java.util.Properties properties)protected voidsetClosedInternal(boolean closed)voidsetDefaultQueryTimeout(java.lang.Integer defaultQueryTimeoutSeconds)Deprecated.voidsetDefaultQueryTimeout(java.time.Duration defaultQueryTimeoutDuration)Sets the default query timeout that will be used forStatements created from this connection.voidsetDelegate(C connection)Sets my delegate.voidsetHoldability(int holdability)voidsetNetworkTimeout(java.util.concurrent.Executor executor, int milliseconds)voidsetReadOnly(boolean readOnly)java.sql.SavepointsetSavepoint()java.sql.SavepointsetSavepoint(java.lang.String name)voidsetSchema(java.lang.String schema)voidsetTransactionIsolation(int level)voidsetTypeMap(java.util.Map<java.lang.String,java.lang.Class<?>> map)java.lang.StringtoString()Returns a string representation of the metadata associated with the innermost delegate connection.<T> Tunwrap(java.lang.Class<T> iface)-
Methods inherited from class org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
addTrace, clearTrace, close, getLastUsed, getLastUsedInstant, getTrace, removeThisTrace, removeTrace, setLastUsed, setLastUsed, setLastUsed
-
-
-
-
Constructor Detail
-
DelegatingConnection
public DelegatingConnection(C connection)
Creates a wrapper for the Connection which traces this Connection in the AbandonedObjectPool.- Parameters:
connection- theConnectionto delegate all calls to, may be null (seeManagedConnection).
-
-
Method Detail
-
abort
public void abort(java.util.concurrent.Executor executor) throws java.sql.SQLException- Specified by:
abortin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
activate
protected void activate()
-
checkOpen
protected void checkOpen() throws java.sql.SQLException- Throws:
java.sql.SQLException
-
clearCachedState
public void clearCachedState()
Clears the cached state. Call when you known that the underlying connection may have been accessed directly.
-
clearWarnings
public void clearWarnings() throws java.sql.SQLException- Specified by:
clearWarningsin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
close
public void close() throws java.sql.SQLExceptionCloses the underlying connection, and close any Statements that were not explicitly closed. Sub-classes that override this method must:- Call
passivate() - Call close (or the equivalent appropriate action) on the wrapped connection
- Set
closedtofalse
- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.sql.Connection- Overrides:
closein classAbandonedTrace- Throws:
java.sql.SQLException- Ignored here, for subclasses.
- Call
-
closeInternal
protected final void closeInternal() throws java.sql.SQLException- Throws:
java.sql.SQLException
-
commit
public void commit() throws java.sql.SQLException- Specified by:
commitin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createArrayOf
public java.sql.Array createArrayOf(java.lang.String typeName, java.lang.Object[] elements) throws java.sql.SQLException- Specified by:
createArrayOfin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createBlob
public java.sql.Blob createBlob() throws java.sql.SQLException- Specified by:
createBlobin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createClob
public java.sql.Clob createClob() throws java.sql.SQLException- Specified by:
createClobin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createNClob
public java.sql.NClob createNClob() throws java.sql.SQLException- Specified by:
createNClobin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createSQLXML
public java.sql.SQLXML createSQLXML() throws java.sql.SQLException- Specified by:
createSQLXMLin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createStatement
public java.sql.Statement createStatement() throws java.sql.SQLException- Specified by:
createStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createStatement
public java.sql.Statement createStatement(int resultSetType, int resultSetConcurrency) throws java.sql.SQLException- Specified by:
createStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createStatement
public java.sql.Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLException- Specified by:
createStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
createStruct
public java.sql.Struct createStruct(java.lang.String typeName, java.lang.Object[] attributes) throws java.sql.SQLException- Specified by:
createStructin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getAutoCommit
public boolean getAutoCommit() throws java.sql.SQLException- Specified by:
getAutoCommitin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getCacheState
public boolean getCacheState()
Returns the state caching flag.- Returns:
- the state caching flag
-
getCatalog
public java.lang.String getCatalog() throws java.sql.SQLException- Specified by:
getCatalogin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getClientInfo
public java.util.Properties getClientInfo() throws java.sql.SQLException- Specified by:
getClientInfoin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getClientInfo
public java.lang.String getClientInfo(java.lang.String name) throws java.sql.SQLException- Specified by:
getClientInfoin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getDefaultQueryTimeout
@Deprecated public java.lang.Integer getDefaultQueryTimeout()
Deprecated.Gets the default query timeout that will be used forStatements created from this connection.nullmeans that the driver default will be used.- Returns:
- query timeout limit in seconds; zero means there is no limit.
-
getDefaultQueryTimeoutDuration
public java.time.Duration getDefaultQueryTimeoutDuration()
Gets the default query timeout that will be used forStatements created from this connection.nullmeans that the driver default will be used.- Returns:
- query timeout limit; zero means there is no limit.
- Since:
- 2.10.0
-
getDelegate
public C getDelegate()
Returns my underlyingConnection.- Returns:
- my underlying
Connection.
-
getDelegateInternal
protected final C getDelegateInternal()
Gets the delegate connection.- Returns:
- the delegate connection.
-
getHoldability
public int getHoldability() throws java.sql.SQLException- Specified by:
getHoldabilityin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getInnermostDelegate
public java.sql.Connection getInnermostDelegate()
If 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.- Returns:
- innermost delegate.
-
getInnermostDelegateInternal
public final java.sql.Connection getInnermostDelegateInternal()
Although this method is public, it is part of the internal API and should not be used by clients. The signature of this method may change at any time including in ways that break backwards compatibility.- Returns:
- innermost delegate.
-
getMetaData
public java.sql.DatabaseMetaData getMetaData() throws java.sql.SQLException- Specified by:
getMetaDatain interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getNetworkTimeout
public int getNetworkTimeout() throws java.sql.SQLException- Specified by:
getNetworkTimeoutin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getSchema
public java.lang.String getSchema() throws java.sql.SQLException- Specified by:
getSchemain interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getTransactionIsolation
public int getTransactionIsolation() throws java.sql.SQLException- Specified by:
getTransactionIsolationin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getTypeMap
public java.util.Map<java.lang.String,java.lang.Class<?>> getTypeMap() throws java.sql.SQLException- Specified by:
getTypeMapin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
getWarnings
public java.sql.SQLWarning getWarnings() throws java.sql.SQLException- Specified by:
getWarningsin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
handleException
protected void handleException(java.sql.SQLException e) throws java.sql.SQLExceptionHandles the given exception by throwing it.- Parameters:
e- the exception to throw.- Throws:
java.sql.SQLException- the exception to throw.
-
handleExceptionNoThrow
protected <T extends java.lang.Throwable> T handleExceptionNoThrow(T e)
Handles the givenSQLException.- Type Parameters:
T- The throwable type.- Parameters:
e- The SQLException- Returns:
- the given
SQLException - Since:
- 2.7.0
-
innermostDelegateEquals
public boolean innermostDelegateEquals(java.sql.Connection c)
Compares innermost delegate to the given connection.- Parameters:
c- connection to compare innermost delegate with- Returns:
- true if innermost delegate equals
c
-
isClosed
public boolean isClosed() throws java.sql.SQLException- Specified by:
isClosedin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
isClosedInternal
protected boolean isClosedInternal()
-
isReadOnly
public boolean isReadOnly() throws java.sql.SQLException- Specified by:
isReadOnlyin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
isValid
public boolean isValid(java.time.Duration timeout) throws java.sql.SQLExceptionTests if the connection has not been closed and is still valid.- Parameters:
timeout- The duration to wait for the database operation used to validate the connection to complete.- Returns:
- See
Connection.isValid(int). - Throws:
java.sql.SQLException- SeeConnection.isValid(int).- Since:
- 2.10.0
- See Also:
Connection.isValid(int)
-
isValid
@Deprecated public boolean isValid(int timeoutSeconds) throws java.sql.SQLExceptionDeprecated.UseisValid(Duration).- Specified by:
isValidin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
isWrapperFor
public boolean isWrapperFor(java.lang.Class<?> iface) throws java.sql.SQLException- Specified by:
isWrapperForin interfacejava.sql.Wrapper- Throws:
java.sql.SQLException
-
nativeSQL
public java.lang.String nativeSQL(java.lang.String sql) throws java.sql.SQLException- Specified by:
nativeSQLin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
passivate
protected void passivate() throws java.sql.SQLException- Throws:
java.sql.SQLException
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql) throws java.sql.SQLException- Specified by:
prepareCallin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency) throws java.sql.SQLException- Specified by:
prepareCallin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLException- Specified by:
prepareCallin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql) throws java.sql.SQLException- Specified by:
prepareStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int autoGeneratedKeys) throws java.sql.SQLException- Specified by:
prepareStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency) throws java.sql.SQLException- Specified by:
prepareStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLException- Specified by:
prepareStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int[] columnIndexes) throws java.sql.SQLException- Specified by:
prepareStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, java.lang.String[] columnNames) throws java.sql.SQLException- Specified by:
prepareStatementin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
releaseSavepoint
public void releaseSavepoint(java.sql.Savepoint savepoint) throws java.sql.SQLException- Specified by:
releaseSavepointin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
rollback
public void rollback() throws java.sql.SQLException- Specified by:
rollbackin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
rollback
public void rollback(java.sql.Savepoint savepoint) throws java.sql.SQLException- Specified by:
rollbackin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setAutoCommit
public void setAutoCommit(boolean autoCommit) throws java.sql.SQLException- Specified by:
setAutoCommitin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setCacheState
public void setCacheState(boolean cacheState)
Sets the state caching flag.- Parameters:
cacheState- The new value for the state caching flag
-
setCatalog
public void setCatalog(java.lang.String catalog) throws java.sql.SQLException- Specified by:
setCatalogin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setClientInfo
public void setClientInfo(java.util.Properties properties) throws java.sql.SQLClientInfoException- Specified by:
setClientInfoin interfacejava.sql.Connection- Throws:
java.sql.SQLClientInfoException
-
setClientInfo
public void setClientInfo(java.lang.String name, java.lang.String value) throws java.sql.SQLClientInfoException- Specified by:
setClientInfoin interfacejava.sql.Connection- Throws:
java.sql.SQLClientInfoException
-
setClosedInternal
protected void setClosedInternal(boolean closed)
-
setDefaultQueryTimeout
public void setDefaultQueryTimeout(java.time.Duration defaultQueryTimeoutDuration)
Sets the default query timeout that will be used forStatements created from this connection.nullmeans that the driver default will be used.- Parameters:
defaultQueryTimeoutDuration- the new query timeout limit Duration; zero means there is no limit.- Since:
- 2.10.0
-
setDefaultQueryTimeout
@Deprecated public void setDefaultQueryTimeout(java.lang.Integer defaultQueryTimeoutSeconds)
Deprecated.Sets the default query timeout that will be used forStatements created from this connection.nullmeans that the driver default will be used.- Parameters:
defaultQueryTimeoutSeconds- the new query timeout limit in seconds; zero means there is no limit.
-
setDelegate
public void setDelegate(C connection)
Sets my delegate.- Parameters:
connection- my delegate, may be null.
-
setHoldability
public void setHoldability(int holdability) throws java.sql.SQLException- Specified by:
setHoldabilityin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setNetworkTimeout
public void setNetworkTimeout(java.util.concurrent.Executor executor, int milliseconds) throws java.sql.SQLException- Specified by:
setNetworkTimeoutin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setReadOnly
public void setReadOnly(boolean readOnly) throws java.sql.SQLException- Specified by:
setReadOnlyin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setSavepoint
public java.sql.Savepoint setSavepoint() throws java.sql.SQLException- Specified by:
setSavepointin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setSavepoint
public java.sql.Savepoint setSavepoint(java.lang.String name) throws java.sql.SQLException- Specified by:
setSavepointin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setSchema
public void setSchema(java.lang.String schema) throws java.sql.SQLException- Specified by:
setSchemain interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setTransactionIsolation
public void setTransactionIsolation(int level) throws java.sql.SQLException- Specified by:
setTransactionIsolationin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
setTypeMap
public void setTypeMap(java.util.Map<java.lang.String,java.lang.Class<?>> map) throws java.sql.SQLException- Specified by:
setTypeMapin interfacejava.sql.Connection- Throws:
java.sql.SQLException
-
toString
public java.lang.String toString()
Returns a string representation of the metadata associated with the innermost delegate connection.- Overrides:
toStringin classjava.lang.Object
-
unwrap
public <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException- Specified by:
unwrapin interfacejava.sql.Wrapper- Throws:
java.sql.SQLException
-
-