# Class ProxyConnection

java.lang.Object
org.apache.tomcat.jdbc.pool.JdbcInterceptor
org.apache.tomcat.jdbc.pool.ProxyConnection

All Implemented Interfaces:
  `InvocationHandler`

public class ProxyConnection extends JdbcInterceptor
A ProxyConnection object is the bottom most interceptor that wraps an object of type `PooledConnection`. The ProxyConnection intercepts three methods:

- `Connection.close()` - returns the connection to the pool. May be called multiple times.
- `Object.toString()` - returns a custom string for this object
- `PooledConnection.getConnection()` - returns the underlying connection

By default method comparisons is done on a String reference level, unless the `PoolConfiguration.setUseEquals(boolean)` has been called with a `true` argument.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected PooledConnection`
  `connection`
  The underlying pooled connection.
  `protected ConnectionPool`
  `pool`
  The parent connection pool.

  ### Fields inherited from class JdbcInterceptor

  `CLOSE_VAL, EQUALS_VAL, GETCONNECTION_VAL, HASHCODE_VAL, ISCLOSED_VAL, ISVALID_VAL, ISWRAPPERFOR_VAL, properties, TOSTRING_VAL, UNWRAP_VAL`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `ProxyConnection(ConnectionPool parent, PooledConnection con, boolean useEquals)`
  Creates a new ProxyConnection wrapping the given pooled connection.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `PooledConnection`
  `getConnection()`
  Returns the underlying pooled connection.
  `PooledConnection`
  `getDelegateConnection()`
  Returns the delegate pooled connection.
  `ConnectionPool`
  `getParentPool()`
  Returns the parent connection pool.
  `ConnectionPool`
  `getPool()`
  Returns the parent connection pool.
  `Object`
  `invoke(Object proxy, Method method, Object[] args)`
  Gets invoked each time an operation on `Connection` is invoked.
  `boolean`
  `isClosed()`
  Returns true if the underlying connection has been closed or discarded.
  `boolean`
  `isWrapperFor(Class<?> iface)`
  Checks whether this proxy wraps the given interface.
  `void`
  `reset(ConnectionPool parent, PooledConnection con)`
  Gets called each time the connection is borrowed from the pool This means that if an interceptor holds a reference to the connection the interceptor can be reused for another connection.
  `void`
  `setConnection(PooledConnection connection)`
  Sets the underlying pooled connection.
  `void`
  `setPool(ConnectionPool pool)`
  Sets the parent connection pool.
  `String`
  `toString()`
  `Object`
  `unwrap(Class<?> iface)`
  Unwraps the connection to the given interface.

  ### Methods inherited from class JdbcInterceptor

  `compare, compare, disconnected, getNext, getProperties, isUseEquals, poolClosed, poolStarted, setNext, setProperties, setUseEquals`

  ### Methods inherited from class Object

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

- ## Field Details

  - ### connection

    protected PooledConnection connection
    The underlying pooled connection.

  - ### pool

    protected ConnectionPool pool
    The parent connection pool.

- ## Constructor Details

  - ### ProxyConnection

    protected ProxyConnection(ConnectionPool parent, PooledConnection con, boolean useEquals)
    Creates a new ProxyConnection wrapping the given pooled connection.
    Parameters:
      `parent` - the parent connection pool
      `con` - the pooled connection
      `useEquals` - whether to use equals for method comparison

- ## Method Details

  - ### getConnection

    public PooledConnection getConnection()
    Returns the underlying pooled connection.
    Returns:
      the pooled connection

  - ### setConnection

    public void setConnection(PooledConnection connection)
    Sets the underlying pooled connection.
    Parameters:
      `connection` - the pooled connection

  - ### getPool

    public ConnectionPool getPool()
    Returns the parent connection pool.
    Returns:
      the connection pool

  - ### setPool

    public void setPool(ConnectionPool pool)
    Sets the parent connection pool.
    Parameters:
      `pool` - the connection pool

  - ### reset

    public void reset(ConnectionPool parent, PooledConnection con)
    Description copied from class: `JdbcInterceptor`
    Gets called each time the connection is borrowed from the pool This means that if an interceptor holds a reference to the connection the interceptor can be reused for another connection.
    This method may be called with null as both arguments when we are closing down the connection.
    Specified by:
      `reset` in class `JdbcInterceptor`
    Parameters:
      `parent` - - the connection pool owning the connection
      `con` - - the pooled connection

  - ### isWrapperFor

    public boolean isWrapperFor(Class<?> iface)
    Checks whether this proxy wraps the given interface.
    Parameters:
      `iface` - the interface to check
    Returns:
      true if this proxy wraps the given interface

  - ### unwrap

    public Object unwrap(Class<?> iface) throws SQLException
    Unwraps the connection to the given interface.
    Parameters:
      `iface` - the interface to unwrap to
    Returns:
      the unwrapped connection
    Throws:
      `SQLException` - if the connection does not wrap the given interface

  - ### invoke

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
    Description copied from class: `JdbcInterceptor`
    Gets invoked each time an operation on `Connection` is invoked.
    Specified by:
      `invoke` in interface `InvocationHandler`
    Overrides:
      `invoke` in class `JdbcInterceptor`
    Throws:
      `Throwable`

  - ### isClosed

    public boolean isClosed()
    Returns true if the underlying connection has been closed or discarded.
    Returns:
      true if closed or discarded

  - ### getDelegateConnection

    public PooledConnection getDelegateConnection()
    Returns the delegate pooled connection.
    Returns:
      the delegate pooled connection

  - ### getParentPool

    public ConnectionPool getParentPool()
    Returns the parent connection pool.
    Returns:
      the parent connection pool

  - ### toString

    public String toString()
    Overrides:
      `toString` in class `Object`