Package org.apache.tomcat.jdbc.pool.interceptor

## Class StatementDecoratorInterceptor

- java.lang.Object
- - org.apache.tomcat.jdbc.pool.JdbcInterceptor
  - - org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
    - - org.apache.tomcat.jdbc.pool.interceptor.StatementDecoratorInterceptor

All Implemented Interfaces:
  `InvocationHandler`

Direct Known Subclasses:
  `StatementCache`

    public class StatementDecoratorInterceptor
    extends AbstractCreateStatementInterceptor

Implementation of JdbcInterceptor that proxies resultSets and statements.

Author:
  Guillermo Fernandes

### Nested Class Summary

Nested Classes
`protected static class` `StatementDecoratorInterceptor.ResultSetProxy`
`protected class` `StatementDecoratorInterceptor.StatementProxy<T extends Statement>` Class to measure query execute time.

### Field Summary

Fields
`protected static String` `EXECUTE_QUERY`
`protected static String` `GET_GENERATED_KEYS`
`protected static String` `GET_RESULTSET`
`protected static String[]` `RESULTSET_TYPES`
`protected static Constructor<?>` `resultSetConstructor` the constructor to create the resultSet proxies

### Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor

`constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_TYPES, EXECUTE_UPDATE, PREPARE_CALL, PREPARE_CALL_IDX, PREPARE_STATEMENT, PREPARE_STATEMENT_IDX, STATEMENT_TYPE_COUNT, STATEMENT_TYPES`

### Fields inherited from class org.apache.tomcat.jdbc.pool.JdbcInterceptor

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

### Constructor Summary

Constructors
`StatementDecoratorInterceptor()`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `closeInvoked()` Method invoked when the operation `Connection.close()` is invoked.
`protected Object` `createDecorator​(Object proxy, Method method, Object[] args, Object statement, Constructor<?> constructor, String sql)` Creates a proxy for a Statement.
`Object` `createStatement​(Object proxy, Method method, Object[] args, Object statement, long time)` Creates a statement interceptor to monitor query response times
`protected Constructor<?>` `getResultSetConstructor()`
`protected boolean` `isExecuteQuery​(Method method)`
`protected boolean` `isExecuteQuery​(String methodName)`
`protected boolean` `isResultSet​(Method method, boolean process)`

### Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor

`getConstructor, invoke, isExecute, isStatement, process, reset`

### Methods inherited from class org.apache.tomcat.jdbc.pool.JdbcInterceptor

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

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

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

### Field Detail

#### EXECUTE_QUERY

    protected static final String EXECUTE_QUERY

See Also:
  Constant Field Values

#### GET_GENERATED_KEYS

    protected static final String GET_GENERATED_KEYS

See Also:
  Constant Field Values

#### GET_RESULTSET

    protected static final String GET_RESULTSET

See Also:
  Constant Field Values

#### RESULTSET_TYPES

    protected static final String[] RESULTSET_TYPES

#### resultSetConstructor

    protected static volatile Constructor<?> resultSetConstructor

the constructor to create the resultSet proxies

### Constructor Detail

#### StatementDecoratorInterceptor

    public StatementDecoratorInterceptor()

### Method Detail

#### closeInvoked

    public void closeInvoked()

Description copied from class: `AbstractCreateStatementInterceptor`
Method invoked when the operation `Connection.close()` is invoked.

Specified by:
  `closeInvoked` in class `AbstractCreateStatementInterceptor`

#### getResultSetConstructor

    protected Constructor<?> getResultSetConstructor()
                                              throws NoSuchMethodException

Throws:
  `NoSuchMethodException`

#### createStatement

    public Object createStatement​(Object proxy,
                                  Method method,
                                  Object[] args,
                                  Object statement,
                                  long time)

Creates a statement interceptor to monitor query response times

Specified by:
  `createStatement` in class `AbstractCreateStatementInterceptor`
Parameters:
  `proxy` - the actual proxy object
  `method` - the method that was called. It will be one of the methods defined in `AbstractCreateStatementInterceptor.STATEMENT_TYPES`
  `args` - the arguments to the method
  `statement` - the statement that the underlying connection created
  `time` - Elapsed time
Returns:
  a `Statement` object

#### createDecorator

    protected Object createDecorator​(Object proxy,
                                     Method method,
                                     Object[] args,
                                     Object statement,
                                     Constructor<?> constructor,
                                     String sql)
                              throws InstantiationException,
                                     IllegalAccessException,
                                     InvocationTargetException

Creates a proxy for a Statement.

Parameters:
  `proxy` - The proxy object on which the method that triggered the creation of the statement was called.
  `method` - The method that was called on the proxy
  `args` - The arguments passed as part of the method call to the proxy
  `statement` - The statement object that is to be proxied
  `constructor` - The constructor for the desired proxy
  `sql` - The sql of of the statement
Returns:
  A new proxy for the Statement
Throws:
  `InstantiationException` - Couldn't instantiate object
  `IllegalAccessException` - Inaccessible constructor
  `InvocationTargetException` - Exception thrown from constructor

#### isExecuteQuery

    protected boolean isExecuteQuery​(String methodName)

#### isExecuteQuery

    protected boolean isExecuteQuery​(Method method)

#### isResultSet

    protected boolean isResultSet​(Method method,
                                  boolean process)