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 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
    Constructor | Description
    --- | ---
    `StatementDecoratorInterceptor()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    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 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)