org.apache.tomcat.dbcp.dbcp

## Class DelegatingConnection

- java.lang.Object
- - org.apache.tomcat.dbcp.dbcp.AbandonedTrace
  - - org.apache.tomcat.dbcp.dbcp.DelegatingConnection

- All Implemented Interfaces:
    java.lang.AutoCloseable, java.sql.Connection, java.sql.Wrapper
  Direct Known Subclasses:
    PoolableConnection, PoolingConnection

      public class DelegatingConnection
      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.

  Author:
    Rodney Waldhoff, Glenn L. Nielsen, James House, Dirk Verbeeck

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `_closed`
    `protected java.sql.Connection` | `_conn` My delegate `Connection`.

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

      `TRANSACTION_NONE, TRANSACTION_READ_COMMITTED, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DelegatingConnection(java.sql.Connection c)` Create a wrapper for the Connection which traces this Connection in the AbandonedObjectPool.
    `DelegatingConnection(java.sql.Connection c, AbandonedConfig config)` Create a wrapper for the Connection which traces the Statements created so that any unclosed Statements can be closed when this Connection is closed.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `abort(java.util.concurrent.Executor executor)`
    `protected void` | `activate()`
    `protected void` | `checkOpen()`
    `void` | `clearWarnings()`
    `void` | `close()` Closes the underlying connection, and close any Statements that were not explicitly closed.
    `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` | `equals(java.lang.Object obj)` This method considers two objects to be equal if the underlying JDBC objects are equal.
    `boolean` | `getAutoCommit()`
    `java.lang.String` | `getCatalog()`
    `java.util.Properties` | `getClientInfo()`
    `java.lang.String` | `getClientInfo(java.lang.String name)`
    `java.sql.Connection` | `getDelegate()` Returns my underlying `Connection`.
    `protected java.sql.Connection` | `getDelegateInternal()` Should be final but can't be for compatibility with previous releases.
    `int` | `getHoldability()`
    `java.sql.Connection` | `getInnermostDelegate()` If my underlying `Connection` is not a `DelegatingConnection`, returns it, otherwise recursively invokes this method on my delegate.
    `protected java.sql.Connection` | `getInnermostDelegateInternal()`
    `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)`
    `int` | `hashCode()`
    `boolean` | `innermostDelegateEquals(java.sql.Connection c)` Compares innermost delegate to the given connection.
    `boolean` | `isClosed()`
    `boolean` | `isReadOnly()`
    `boolean` | `isValid(int timeout)`
    `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` | `setCatalog(java.lang.String catalog)`
    `void` | `setClientInfo(java.util.Properties properties)`
    `void` | `setClientInfo(java.lang.String name, java.lang.String value)`
    `void` | `setDelegate(java.sql.Connection c)` 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 innnermost delegate connection.
    `<T> T` | `unwrap(java.lang.Class<T> iface)`

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

      `addTrace, clearTrace, getConfig, getLastUsed, getTrace, printStackTrace, removeTrace, setLastUsed, setLastUsed, setStackTrace`

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

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

- - ### Field Detail

    - #### _conn

          protected java.sql.Connection _conn

      My delegate `Connection`.

    - #### _closed

          protected boolean _closed

  - ### Constructor Detail

    - #### DelegatingConnection

          public DelegatingConnection(java.sql.Connection c)

      Create a wrapper for the Connection which traces this Connection in the AbandonedObjectPool.
      Parameters:
        `c` - the `Connection` to delegate all calls to.

    - #### DelegatingConnection

          public DelegatingConnection(java.sql.Connection c,
                              AbandonedConfig config)

      Create a wrapper for the Connection which traces the Statements created so that any unclosed Statements can be closed when this Connection is closed.
      Parameters:
        `c` - the `Connection` to delegate all calls to.
        `config` - the configuration for tracing abandoned objects

  - ### Method Detail

    - #### toString

          public java.lang.String toString()

      Returns a string representation of the metadata associated with the innnermost delegate connection.
      Overrides:
        `toString` in class `java.lang.Object`
      Since:
        1.2.2

    - #### getDelegate

          public java.sql.Connection getDelegate()

      Returns my underlying `Connection`.
      Returns:
        my underlying `Connection`.

    - #### getDelegateInternal

          protected java.sql.Connection getDelegateInternal()

      Should be final but can't be for compatibility with previous releases.

    - #### 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`
      Since:
        1.2.2

    - #### equals

          public boolean equals(java.lang.Object obj)

      This method considers two objects to be equal if the underlying JDBC objects are equal.
      Overrides:
        `equals` in class `java.lang.Object`

    - #### hashCode

          public int hashCode()

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

    - #### 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:
        The first delegate that is not a `DelegatingConnection`, or `null`.

    - #### getInnermostDelegateInternal

          protected final java.sql.Connection getInnermostDelegateInternal()

    - #### setDelegate

          public void setDelegate(java.sql.Connection c)

      Sets my delegate.
      Parameters:
        `c` - the delegate Connection

    - #### close

          public void close()
                     throws java.sql.SQLException

      Closes the underlying connection, and close any Statements that were not explicitly closed.
      Specified by:
        `close` in interface `java.lang.AutoCloseable`
      Specified by:
        `close` in interface `java.sql.Connection`
      Throws:
        `java.sql.SQLException`

    - #### handleException

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

      Throws:
        `java.sql.SQLException`

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

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

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

Copyright © 2000-2020 Apache Software Foundation. All Rights Reserved.