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
Modifier and Type
Class
Description
`protected static class`
`StatementDecoratorInterceptor.ResultSetProxy`
`protected class`
`StatementDecoratorInterceptor.StatementProxy<T extends Statement>`
Class to measure query execute time.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final String`
`EXECUTE_QUERY`
`protected static final String`
`GET_GENERATED_KEYS`
`protected static final String`
`GET_RESULTSET`
`protected static final 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, GET_STATEMENT, PREPARE_CALL, PREPARE_CALL_IDX, PREPARE_STATEMENT, PREPARE_STATEMENT_IDX, RESULTSET_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
Constructor
Description
`StatementDecoratorInterceptor()`

## Method Summary

Modifier and Type
Method
Description
`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 Details

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

### StatementDecoratorInterceptor

public StatementDecoratorInterceptor()

## Method Details

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