Package org.apache.tomcat.dbcp.dbcp2

## 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:
  `PoolableConnection`, `PoolingConnection`

    public class DelegatingConnection<C extends java.sql.Connection>
    extends AbandonedTrace
    implements java.sql.Connection

A base delegating implementation of `Connection`.

All of the methods from the `Connection` interface simply check to see that the `Connection` is 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

### Field Summary

### Fields inherited from interface java.sql.Connection

`TRANSACTION_NONE, TRANSACTION_READ_COMMITTED, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE`

### Constructor Summary

Constructors
`DelegatingConnection​(C c)` Creates a wrapper for the Connection which traces this Connection in the AbandonedObjectPool.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `abort​(java.util.concurrent.Executor executor)`
`protected void` `activate()`
`protected void` `checkOpen()`
`void` `clearCachedState()` Can be used to clear cached state when it is known that the underlying connection may have been accessed directly.
`void` `clearWarnings()`
`void` `close()` Closes the underlying connection, and close any Statements that were not explicitly closed.
`protected void` `closeInternal()`
`void` `commit()`
`java.sql.Array` `createArrayOf​(java.lang.String typeName, java.lang.Object[] elements)`
`java.sql.Blob` `createBlob()`
`java.sql.Clob` `createClob()`
`java.sql.NClob` `createNClob()`
`java.sql.SQLXML` `createSQLXML()`
`java.sql.Statement` `createStatement()`
`java.sql.Statement` `createStatement​(int resultSetType, int resultSetConcurrency)`
`java.sql.Statement` `createStatement​(int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
`java.sql.Struct` `createStruct​(java.lang.String typeName, java.lang.Object[] attributes)`
`boolean` `getAutoCommit()`
`boolean` `getCacheState()` Returns the state caching flag.
`java.lang.String` `getCatalog()`
`java.util.Properties` `getClientInfo()`
`java.lang.String` `getClientInfo​(java.lang.String name)`
`java.lang.Integer` `getDefaultQueryTimeout()` Gets the default query timeout that will be used for `Statement`s created from this connection.
`C` `getDelegate()` Returns my underlying `Connection`.
`protected C` `getDelegateInternal()`
`int` `getHoldability()`
`java.sql.Connection` `getInnermostDelegate()` If my underlying `Connection` is not a `DelegatingConnection`, returns it, otherwise recursively invokes this method on my delegate.
`java.sql.Connection` `getInnermostDelegateInternal()` Although this method is public, it is part of the internal API and should not be used by clients.
`java.sql.DatabaseMetaData` `getMetaData()`
`int` `getNetworkTimeout()`
`java.lang.String` `getSchema()`
`int` `getTransactionIsolation()`
`java.util.Map<java.lang.String,​java.lang.Class<?>>` `getTypeMap()`
`java.sql.SQLWarning` `getWarnings()`
`protected void` `handleException​(java.sql.SQLException e)` Handles the given exception by throwing it.
`protected <T extends java.lang.Throwable> T` `handleExceptionNoThrow​(T e)` Handles the given `SQLException`.
`boolean` `innermostDelegateEquals​(java.sql.Connection c)` Compares innermost delegate to the given connection.
`boolean` `isClosed()`
`protected boolean` `isClosedInternal()`
`boolean` `isReadOnly()`
`boolean` `isValid​(int timeoutSeconds)`
`boolean` `isWrapperFor​(java.lang.Class<?> iface)`
`java.lang.String` `nativeSQL​(java.lang.String sql)`
`protected void` `passivate()`
`java.sql.CallableStatement` `prepareCall​(java.lang.String sql)`
`java.sql.CallableStatement` `prepareCall​(java.lang.String sql, int resultSetType, int resultSetConcurrency)`
`java.sql.CallableStatement` `prepareCall​(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int autoGeneratedKeys)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int[] columnIndexes)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int resultSetType, int resultSetConcurrency)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
`java.sql.PreparedStatement` `prepareStatement​(java.lang.String sql, java.lang.String[] columnNames)`
`void` `releaseSavepoint​(java.sql.Savepoint savepoint)`
`void` `rollback()`
`void` `rollback​(java.sql.Savepoint savepoint)`
`void` `setAutoCommit​(boolean autoCommit)`
`void` `setCacheState​(boolean cacheState)` Sets the state caching flag.
`void` `setCatalog​(java.lang.String catalog)`
`void` `setClientInfo​(java.lang.String name, java.lang.String value)`
`void` `setClientInfo​(java.util.Properties properties)`
`protected void` `setClosedInternal​(boolean closed)`
`void` `setDefaultQueryTimeout​(java.lang.Integer defaultQueryTimeoutSeconds)` Sets the default query timeout that will be used for `Statement`s created from this connection.
`void` `setDelegate​(C connection)` Sets my delegate.
`void` `setHoldability​(int holdability)`
`void` `setNetworkTimeout​(java.util.concurrent.Executor executor, int milliseconds)`
`void` `setReadOnly​(boolean readOnly)`
`java.sql.Savepoint` `setSavepoint()`
`java.sql.Savepoint` `setSavepoint​(java.lang.String name)`
`void` `setSchema​(java.lang.String schema)`
`void` `setTransactionIsolation​(int level)`
`void` `setTypeMap​(java.util.Map<java.lang.String,​java.lang.Class<?>> map)`
`java.lang.String` `toString()` Returns a string representation of the metadata associated with the innermost delegate connection.
`<T> T` `unwrap​(java.lang.Class<T> iface)`

### Methods inherited from class org.apache.tomcat.dbcp.dbcp2.AbandonedTrace

`addTrace, clearTrace, getLastUsed, getTrace, removeThisTrace, removeTrace, setLastUsed, setLastUsed`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface java.sql.Connection

`beginRequest, endRequest, setShardingKey, setShardingKey, setShardingKeyIfValid, setShardingKeyIfValid`

### Constructor Detail

#### DelegatingConnection

    public DelegatingConnection​(C c)

Creates a wrapper for the Connection which traces this Connection in the AbandonedObjectPool.

Parameters:
  `c` - the `Connection` to delegate all calls to.

### Method Detail

#### toString

    public java.lang.String toString()

Returns a string representation of the metadata associated with the innermost delegate connection.

Overrides:
  `toString` in class `java.lang.Object`

#### getDelegate

    public C getDelegate()

Returns my underlying `Connection`.

Returns:
  my underlying `Connection`.

#### getDelegateInternal

    protected final C getDelegateInternal()

#### 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`

#### getInnermostDelegate

    public java.sql.Connection getInnermostDelegate()

If my underlying `Connection` is not a `DelegatingConnection`, returns it, otherwise recursively invokes this method on my delegate.

Hence this method will return the first delegate that is not a `DelegatingConnection`, or `null` when no non-`DelegatingConnection` delegate can be found by traversing this chain.

This method is useful when you may have nested `DelegatingConnection`s, 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.

#### setDelegate

    public void setDelegate​(C connection)

Sets my delegate.

Parameters:
  `connection` - my delegate.

#### close

    public void close()
               throws java.sql.SQLException

Closes the underlying connection, and close any Statements that were not explicitly closed. Sub-classes that override this method must:

1. Call passivate()
2. Call close (or the equivalent appropriate action) on the wrapped connection
3. Set _closed to `false`

Specified by:
  `close` in interface `java.lang.AutoCloseable`
Specified by:
  `close` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### isClosedInternal

    protected boolean isClosedInternal()

#### setClosedInternal

    protected void setClosedInternal​(boolean closed)

#### closeInternal

    protected final void closeInternal()
                                throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

#### handleException

    protected void handleException​(java.sql.SQLException e)
                            throws java.sql.SQLException

Handles 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 given `SQLException`.

Type Parameters:
  `T` - The throwable type.
Parameters:
  `e` - The SQLException
Returns:
  the given `SQLException`
Since:
  2.7.0

#### createStatement

    public java.sql.Statement createStatement()
                                       throws java.sql.SQLException

Specified by:
  `createStatement` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### createStatement

    public java.sql.Statement createStatement​(int resultSetType,
                                              int resultSetConcurrency)
                                       throws java.sql.SQLException

Specified by:
  `createStatement` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### prepareStatement

    public java.sql.PreparedStatement prepareStatement​(java.lang.String sql)
                                                throws java.sql.SQLException

Specified by:
  `prepareStatement` in interface `java.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:
  `prepareStatement` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### prepareCall

    public java.sql.CallableStatement prepareCall​(java.lang.String sql)
                                           throws java.sql.SQLException

Specified by:
  `prepareCall` in interface `java.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:
  `prepareCall` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### clearWarnings

    public void clearWarnings()
                       throws java.sql.SQLException

Specified by:
  `clearWarnings` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### commit

    public void commit()
                throws java.sql.SQLException

Specified by:
  `commit` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getCacheState

    public boolean getCacheState()

Returns the state caching flag.

Returns:
  the state caching flag

#### getAutoCommit

    public boolean getAutoCommit()
                          throws java.sql.SQLException

Specified by:
  `getAutoCommit` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getCatalog

    public java.lang.String getCatalog()
                                throws java.sql.SQLException

Specified by:
  `getCatalog` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getMetaData

    public java.sql.DatabaseMetaData getMetaData()
                                          throws java.sql.SQLException

Specified by:
  `getMetaData` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getTransactionIsolation

    public int getTransactionIsolation()
                                throws java.sql.SQLException

Specified by:
  `getTransactionIsolation` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getTypeMap

    public java.util.Map<java.lang.String,​java.lang.Class<?>> getTypeMap()
                                                                        throws java.sql.SQLException

Specified by:
  `getTypeMap` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getWarnings

    public java.sql.SQLWarning getWarnings()
                                    throws java.sql.SQLException

Specified by:
  `getWarnings` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### isReadOnly

    public boolean isReadOnly()
                       throws java.sql.SQLException

Specified by:
  `isReadOnly` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### nativeSQL

    public java.lang.String nativeSQL​(java.lang.String sql)
                               throws java.sql.SQLException

Specified by:
  `nativeSQL` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### rollback

    public void rollback()
                  throws java.sql.SQLException

Specified by:
  `rollback` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getDefaultQueryTimeout

    public java.lang.Integer getDefaultQueryTimeout()

Gets the default query timeout that will be used for `Statement`s created from this connection. `null` means that the driver default will be used.

Returns:
  query timeout limit in seconds; zero means there is no limit.

#### setDefaultQueryTimeout

    public void setDefaultQueryTimeout​(java.lang.Integer defaultQueryTimeoutSeconds)

Sets the default query timeout that will be used for `Statement`s created from this connection. `null` means that the driver default will be used.

Parameters:
  `defaultQueryTimeoutSeconds` - the new query timeout limit in seconds; zero means there is no limit

#### setCacheState

    public void setCacheState​(boolean cacheState)

Sets the state caching flag.

Parameters:
  `cacheState` - The new value for the state caching flag

#### clearCachedState

    public void clearCachedState()

Can be used to clear cached state when it is known that the underlying connection may have been accessed directly.

#### setAutoCommit

    public void setAutoCommit​(boolean autoCommit)
                       throws java.sql.SQLException

Specified by:
  `setAutoCommit` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setCatalog

    public void setCatalog​(java.lang.String catalog)
                    throws java.sql.SQLException

Specified by:
  `setCatalog` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setReadOnly

    public void setReadOnly​(boolean readOnly)
                     throws java.sql.SQLException

Specified by:
  `setReadOnly` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setTransactionIsolation

    public void setTransactionIsolation​(int level)
                                 throws java.sql.SQLException

Specified by:
  `setTransactionIsolation` in interface `java.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:
  `setTypeMap` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### isClosed

    public boolean isClosed()
                     throws java.sql.SQLException

Specified by:
  `isClosed` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### checkOpen

    protected void checkOpen()
                      throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

#### activate

    protected void activate()

#### passivate

    protected void passivate()
                      throws java.sql.SQLException

Throws:
  `java.sql.SQLException`

#### getHoldability

    public int getHoldability()
                       throws java.sql.SQLException

Specified by:
  `getHoldability` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setHoldability

    public void setHoldability​(int holdability)
                        throws java.sql.SQLException

Specified by:
  `setHoldability` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setSavepoint

    public java.sql.Savepoint setSavepoint()
                                    throws java.sql.SQLException

Specified by:
  `setSavepoint` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setSavepoint

    public java.sql.Savepoint setSavepoint​(java.lang.String name)
                                    throws java.sql.SQLException

Specified by:
  `setSavepoint` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### rollback

    public void rollback​(java.sql.Savepoint savepoint)
                  throws java.sql.SQLException

Specified by:
  `rollback` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### releaseSavepoint

    public void releaseSavepoint​(java.sql.Savepoint savepoint)
                          throws java.sql.SQLException

Specified by:
  `releaseSavepoint` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### createStatement

    public java.sql.Statement createStatement​(int resultSetType,
                                              int resultSetConcurrency,
                                              int resultSetHoldability)
                                       throws java.sql.SQLException

Specified by:
  `createStatement` in interface `java.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:
  `prepareStatement` in interface `java.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:
  `prepareCall` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### prepareStatement

    public java.sql.PreparedStatement prepareStatement​(java.lang.String sql,
                                                       int autoGeneratedKeys)
                                                throws java.sql.SQLException

Specified by:
  `prepareStatement` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### prepareStatement

    public java.sql.PreparedStatement prepareStatement​(java.lang.String sql,
                                                       int[] columnIndexes)
                                                throws java.sql.SQLException

Specified by:
  `prepareStatement` in interface `java.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:
  `prepareStatement` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### isWrapperFor

    public boolean isWrapperFor​(java.lang.Class<?> iface)
                         throws java.sql.SQLException

Specified by:
  `isWrapperFor` in interface `java.sql.Wrapper`
Throws:
  `java.sql.SQLException`

#### unwrap

    public <T> T unwrap​(java.lang.Class<T> iface)
                 throws java.sql.SQLException

Specified by:
  `unwrap` in interface `java.sql.Wrapper`
Throws:
  `java.sql.SQLException`

#### createArrayOf

    public java.sql.Array createArrayOf​(java.lang.String typeName,
                                        java.lang.Object[] elements)
                                 throws java.sql.SQLException

Specified by:
  `createArrayOf` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### createBlob

    public java.sql.Blob createBlob()
                             throws java.sql.SQLException

Specified by:
  `createBlob` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### createClob

    public java.sql.Clob createClob()
                             throws java.sql.SQLException

Specified by:
  `createClob` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### createNClob

    public java.sql.NClob createNClob()
                               throws java.sql.SQLException

Specified by:
  `createNClob` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### createSQLXML

    public java.sql.SQLXML createSQLXML()
                                 throws java.sql.SQLException

Specified by:
  `createSQLXML` in interface `java.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:
  `createStruct` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### isValid

    public boolean isValid​(int timeoutSeconds)
                    throws java.sql.SQLException

Specified by:
  `isValid` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setClientInfo

    public void setClientInfo​(java.lang.String name,
                              java.lang.String value)
                       throws java.sql.SQLClientInfoException

Specified by:
  `setClientInfo` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLClientInfoException`

#### setClientInfo

    public void setClientInfo​(java.util.Properties properties)
                       throws java.sql.SQLClientInfoException

Specified by:
  `setClientInfo` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLClientInfoException`

#### getClientInfo

    public java.util.Properties getClientInfo()
                                       throws java.sql.SQLException

Specified by:
  `getClientInfo` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getClientInfo

    public java.lang.String getClientInfo​(java.lang.String name)
                                   throws java.sql.SQLException

Specified by:
  `getClientInfo` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setSchema

    public void setSchema​(java.lang.String schema)
                   throws java.sql.SQLException

Specified by:
  `setSchema` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getSchema

    public java.lang.String getSchema()
                               throws java.sql.SQLException

Specified by:
  `getSchema` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### abort

    public void abort​(java.util.concurrent.Executor executor)
               throws java.sql.SQLException

Specified by:
  `abort` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### setNetworkTimeout

    public void setNetworkTimeout​(java.util.concurrent.Executor executor,
                                  int milliseconds)
                           throws java.sql.SQLException

Specified by:
  `setNetworkTimeout` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`

#### getNetworkTimeout

    public int getNetworkTimeout()
                          throws java.sql.SQLException

Specified by:
  `getNetworkTimeout` in interface `java.sql.Connection`
Throws:
  `java.sql.SQLException`