org.apache.tomcat.dbcp.dbcp2

## Class DelegatingConnection<C extends 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:
    AutoCloseable, Connection, Wrapper, TrackedUse
  Direct Known Subclasses:
    PoolableConnection, PoolingConnection

      public class DelegatingConnection<C extends Connection>
      extends AbandonedTrace
      implements 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
  Author:
    Rodney Waldhoff, Glenn L. Nielsen, James House, Dirk Verbeeck

- - ### 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
    Constructor and Description
    `DelegatingConnection(C c)` Create a wrapper for the Connection which traces this Connection in the AbandonedObjectPool.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `abort(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()`
    `Array` | `createArrayOf(String typeName, Object[] elements)`
    `Blob` | `createBlob()`
    `Clob` | `createClob()`
    `NClob` | `createNClob()`
    `SQLXML` | `createSQLXML()`
    `Statement` | `createStatement()`
    `Statement` | `createStatement(int resultSetType, int resultSetConcurrency)`
    `Statement` | `createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
    `Struct` | `createStruct(String typeName, Object[] attributes)`
    `boolean` | `getAutoCommit()`
    `boolean` | `getCacheState()` Returns the state caching flag.
    `String` | `getCatalog()`
    `Properties` | `getClientInfo()`
    `String` | `getClientInfo(String name)`
    `Integer` | `getDefaultQueryTimeout()` Obtain 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()`
    `Connection` | `getInnermostDelegate()` If my underlying `Connection` is not a `DelegatingConnection`, returns it, otherwise recursively invokes this method on my delegate.
    `Connection` | `getInnermostDelegateInternal()` Although this method is public, it is part of the internal API and should not be used by clients.
    `DatabaseMetaData` | `getMetaData()`
    `int` | `getNetworkTimeout()`
    `String` | `getSchema()`
    `int` | `getTransactionIsolation()`
    `Map<String,Class<?>>` | `getTypeMap()`
    `SQLWarning` | `getWarnings()`
    `protected void` | `handleException(SQLException e)`
    `boolean` | `innermostDelegateEquals(Connection c)` Compares innermost delegate to the given connection.
    `boolean` | `isClosed()`
    `protected boolean` | `isClosedInternal()`
    `boolean` | `isReadOnly()`
    `boolean` | `isValid(int timeout)`
    `boolean` | `isWrapperFor(Class<?> iface)`
    `String` | `nativeSQL(String sql)`
    `protected void` | `passivate()`
    `CallableStatement` | `prepareCall(String sql)`
    `CallableStatement` | `prepareCall(String sql, int resultSetType, int resultSetConcurrency)`
    `CallableStatement` | `prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
    `PreparedStatement` | `prepareStatement(String sql)`
    `PreparedStatement` | `prepareStatement(String sql, int autoGeneratedKeys)`
    `PreparedStatement` | `prepareStatement(String sql, int[] columnIndexes)`
    `PreparedStatement` | `prepareStatement(String sql, int resultSetType, int resultSetConcurrency)`
    `PreparedStatement` | `prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)`
    `PreparedStatement` | `prepareStatement(String sql, String[] columnNames)`
    `void` | `releaseSavepoint(Savepoint savepoint)`
    `void` | `rollback()`
    `void` | `rollback(Savepoint savepoint)`
    `void` | `setAutoCommit(boolean autoCommit)`
    `void` | `setCacheState(boolean cacheState)` Sets the state caching flag.
    `void` | `setCatalog(String catalog)`
    `void` | `setClientInfo(Properties properties)`
    `void` | `setClientInfo(String name, String value)`
    `protected void` | `setClosedInternal(boolean closed)`
    `void` | `setDefaultQueryTimeout(Integer defaultQueryTimeout)` Set the default query timeout that will be used for `Statement`s created from this connection.
    `void` | `setDelegate(C c)` Sets my delegate.
    `void` | `setHoldability(int holdability)`
    `void` | `setNetworkTimeout(Executor executor, int milliseconds)`
    `void` | `setReadOnly(boolean readOnly)`
    `Savepoint` | `setSavepoint()`
    `Savepoint` | `setSavepoint(String name)`
    `void` | `setSchema(String schema)`
    `void` | `setTransactionIsolation(int level)`
    `void` | `setTypeMap(Map<String,Class<?>> map)`
    `String` | `toString()` Returns a string representation of the metadata associated with the innermost delegate connection.
    `<T> T` | `unwrap(Class<T> iface)`

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

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

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

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

- - ### Constructor Detail

    - #### DelegatingConnection

          public DelegatingConnection(C c)

      Create 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 String toString()

      Returns a string representation of the metadata associated with the innermost delegate connection.
      Overrides:
        `toString` in class `Object`

    - #### getDelegate

          public C getDelegate()

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

    - #### getDelegateInternal

          protected final C getDelegateInternal()

    - #### innermostDelegateEquals

          public boolean innermostDelegateEquals(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 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 connection

    - #### getInnermostDelegateInternal

          public final 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:
        the connection

    - #### setDelegate

          public void setDelegate(C c)

      Sets my delegate.
      Parameters:
        `c` - The connection

    - #### close

          public void close()
                     throws 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 `AutoCloseable`
      Specified by:
        `close` in interface `Connection`
      Throws:
        `SQLException` - Error closing connection

    - #### isClosedInternal

          protected boolean isClosedInternal()

    - #### setClosedInternal

          protected void setClosedInternal(boolean closed)

    - #### closeInternal

          protected final void closeInternal()
                                      throws SQLException

      Throws:
        `SQLException`

    - #### handleException

          protected void handleException(SQLException e)
                                  throws SQLException

      Throws:
        `SQLException`

    - #### createStatement

          public Statement createStatement()
                                    throws SQLException

      Specified by:
        `createStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### createStatement

          public Statement createStatement(int resultSetType,
                                  int resultSetConcurrency)
                                    throws SQLException

      Specified by:
        `createStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareStatement

          public PreparedStatement prepareStatement(String sql)
                                             throws SQLException

      Specified by:
        `prepareStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareStatement

          public PreparedStatement prepareStatement(String sql,
                                           int resultSetType,
                                           int resultSetConcurrency)
                                             throws SQLException

      Specified by:
        `prepareStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareCall

          public CallableStatement prepareCall(String sql)
                                        throws SQLException

      Specified by:
        `prepareCall` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareCall

          public CallableStatement prepareCall(String sql,
                                      int resultSetType,
                                      int resultSetConcurrency)
                                        throws SQLException

      Specified by:
        `prepareCall` in interface `Connection`
      Throws:
        `SQLException`

    - #### clearWarnings

          public void clearWarnings()
                             throws SQLException

      Specified by:
        `clearWarnings` in interface `Connection`
      Throws:
        `SQLException`

    - #### commit

          public void commit()
                      throws SQLException

      Specified by:
        `commit` in interface `Connection`
      Throws:
        `SQLException`

    - #### getCacheState

          public boolean getCacheState()

      Returns the state caching flag.
      Returns:
        the state caching flag

    - #### getAutoCommit

          public boolean getAutoCommit()
                                throws SQLException

      Specified by:
        `getAutoCommit` in interface `Connection`
      Throws:
        `SQLException`

    - #### getCatalog

          public String getCatalog()
                            throws SQLException

      Specified by:
        `getCatalog` in interface `Connection`
      Throws:
        `SQLException`

    - #### getMetaData

          public DatabaseMetaData getMetaData()
                                       throws SQLException

      Specified by:
        `getMetaData` in interface `Connection`
      Throws:
        `SQLException`

    - #### getTransactionIsolation

          public int getTransactionIsolation()
                                      throws SQLException

      Specified by:
        `getTransactionIsolation` in interface `Connection`
      Throws:
        `SQLException`

    - #### getTypeMap

          public Map<String,Class<?>> getTypeMap()
                                          throws SQLException

      Specified by:
        `getTypeMap` in interface `Connection`
      Throws:
        `SQLException`

    - #### getWarnings

          public SQLWarning getWarnings()
                                 throws SQLException

      Specified by:
        `getWarnings` in interface `Connection`
      Throws:
        `SQLException`

    - #### isReadOnly

          public boolean isReadOnly()
                             throws SQLException

      Specified by:
        `isReadOnly` in interface `Connection`
      Throws:
        `SQLException`

    - #### nativeSQL

          public String nativeSQL(String sql)
                           throws SQLException

      Specified by:
        `nativeSQL` in interface `Connection`
      Throws:
        `SQLException`

    - #### rollback

          public void rollback()
                        throws SQLException

      Specified by:
        `rollback` in interface `Connection`
      Throws:
        `SQLException`

    - #### getDefaultQueryTimeout

          public Integer getDefaultQueryTimeout()

      Obtain 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:
        the timeout

    - #### setDefaultQueryTimeout

          public void setDefaultQueryTimeout(Integer defaultQueryTimeout)

      Set 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:
        `defaultQueryTimeout` - The timeout value

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

      Specified by:
        `setAutoCommit` in interface `Connection`
      Throws:
        `SQLException`

    - #### setCatalog

          public void setCatalog(String catalog)
                          throws SQLException

      Specified by:
        `setCatalog` in interface `Connection`
      Throws:
        `SQLException`

    - #### setReadOnly

          public void setReadOnly(boolean readOnly)
                           throws SQLException

      Specified by:
        `setReadOnly` in interface `Connection`
      Throws:
        `SQLException`

    - #### setTransactionIsolation

          public void setTransactionIsolation(int level)
                                       throws SQLException

      Specified by:
        `setTransactionIsolation` in interface `Connection`
      Throws:
        `SQLException`

    - #### setTypeMap

          public void setTypeMap(Map<String,Class<?>> map)
                          throws SQLException

      Specified by:
        `setTypeMap` in interface `Connection`
      Throws:
        `SQLException`

    - #### isClosed

          public boolean isClosed()
                           throws SQLException

      Specified by:
        `isClosed` in interface `Connection`
      Throws:
        `SQLException`

    - #### checkOpen

          protected void checkOpen()
                            throws SQLException

      Throws:
        `SQLException`

    - #### activate

          protected void activate()

    - #### passivate

          protected void passivate()
                            throws SQLException

      Throws:
        `SQLException`

    - #### getHoldability

          public int getHoldability()
                             throws SQLException

      Specified by:
        `getHoldability` in interface `Connection`
      Throws:
        `SQLException`

    - #### setHoldability

          public void setHoldability(int holdability)
                              throws SQLException

      Specified by:
        `setHoldability` in interface `Connection`
      Throws:
        `SQLException`

    - #### setSavepoint

          public Savepoint setSavepoint()
                                 throws SQLException

      Specified by:
        `setSavepoint` in interface `Connection`
      Throws:
        `SQLException`

    - #### setSavepoint

          public Savepoint setSavepoint(String name)
                                 throws SQLException

      Specified by:
        `setSavepoint` in interface `Connection`
      Throws:
        `SQLException`

    - #### rollback

          public void rollback(Savepoint savepoint)
                        throws SQLException

      Specified by:
        `rollback` in interface `Connection`
      Throws:
        `SQLException`

    - #### releaseSavepoint

          public void releaseSavepoint(Savepoint savepoint)
                                throws SQLException

      Specified by:
        `releaseSavepoint` in interface `Connection`
      Throws:
        `SQLException`

    - #### createStatement

          public Statement createStatement(int resultSetType,
                                  int resultSetConcurrency,
                                  int resultSetHoldability)
                                    throws SQLException

      Specified by:
        `createStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareStatement

          public PreparedStatement prepareStatement(String sql,
                                           int resultSetType,
                                           int resultSetConcurrency,
                                           int resultSetHoldability)
                                             throws SQLException

      Specified by:
        `prepareStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareCall

          public CallableStatement prepareCall(String sql,
                                      int resultSetType,
                                      int resultSetConcurrency,
                                      int resultSetHoldability)
                                        throws SQLException

      Specified by:
        `prepareCall` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareStatement

          public PreparedStatement prepareStatement(String sql,
                                           int autoGeneratedKeys)
                                             throws SQLException

      Specified by:
        `prepareStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareStatement

          public PreparedStatement prepareStatement(String sql,
                                           int[] columnIndexes)
                                             throws SQLException

      Specified by:
        `prepareStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### prepareStatement

          public PreparedStatement prepareStatement(String sql,
                                           String[] columnNames)
                                             throws SQLException

      Specified by:
        `prepareStatement` in interface `Connection`
      Throws:
        `SQLException`

    - #### isWrapperFor

          public boolean isWrapperFor(Class<?> iface)
                               throws SQLException

      Specified by:
        `isWrapperFor` in interface `Wrapper`
      Throws:
        `SQLException`

    - #### unwrap

          public <T> T unwrap(Class<T> iface)
                   throws SQLException

      Specified by:
        `unwrap` in interface `Wrapper`
      Throws:
        `SQLException`

    - #### createArrayOf

          public Array createArrayOf(String typeName,
                            Object[] elements)
                              throws SQLException

      Specified by:
        `createArrayOf` in interface `Connection`
      Throws:
        `SQLException`

    - #### createBlob

          public Blob createBlob()
                          throws SQLException

      Specified by:
        `createBlob` in interface `Connection`
      Throws:
        `SQLException`

    - #### createClob

          public Clob createClob()
                          throws SQLException

      Specified by:
        `createClob` in interface `Connection`
      Throws:
        `SQLException`

    - #### createNClob

          public NClob createNClob()
                            throws SQLException

      Specified by:
        `createNClob` in interface `Connection`
      Throws:
        `SQLException`

    - #### createSQLXML

          public SQLXML createSQLXML()
                              throws SQLException

      Specified by:
        `createSQLXML` in interface `Connection`
      Throws:
        `SQLException`

    - #### createStruct

          public Struct createStruct(String typeName,
                            Object[] attributes)
                              throws SQLException

      Specified by:
        `createStruct` in interface `Connection`
      Throws:
        `SQLException`

    - #### isValid

          public boolean isValid(int timeout)
                          throws SQLException

      Specified by:
        `isValid` in interface `Connection`
      Throws:
        `SQLException`

    - #### setClientInfo

          public void setClientInfo(String name,
                           String value)
                             throws SQLClientInfoException

      Specified by:
        `setClientInfo` in interface `Connection`
      Throws:
        `SQLClientInfoException`

    - #### setClientInfo

          public void setClientInfo(Properties properties)
                             throws SQLClientInfoException

      Specified by:
        `setClientInfo` in interface `Connection`
      Throws:
        `SQLClientInfoException`

    - #### getClientInfo

          public Properties getClientInfo()
                                   throws SQLException

      Specified by:
        `getClientInfo` in interface `Connection`
      Throws:
        `SQLException`

    - #### getClientInfo

          public String getClientInfo(String name)
                               throws SQLException

      Specified by:
        `getClientInfo` in interface `Connection`
      Throws:
        `SQLException`

    - #### setSchema

          public void setSchema(String schema)
                         throws SQLException

      Specified by:
        `setSchema` in interface `Connection`
      Throws:
        `SQLException`

    - #### getSchema

          public String getSchema()
                           throws SQLException

      Specified by:
        `getSchema` in interface `Connection`
      Throws:
        `SQLException`

    - #### abort

          public void abort(Executor executor)
                     throws SQLException

      Specified by:
        `abort` in interface `Connection`
      Throws:
        `SQLException`

    - #### setNetworkTimeout

          public void setNetworkTimeout(Executor executor,
                               int milliseconds)
                                 throws SQLException

      Specified by:
        `setNetworkTimeout` in interface `Connection`
      Throws:
        `SQLException`

    - #### getNetworkTimeout

          public int getNetworkTimeout()
                                throws SQLException

      Specified by:
        `getNetworkTimeout` in interface `Connection`
      Throws:
        `SQLException`

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