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:
java.lang.reflect.InvocationHandler
- Direct Known Subclasses:
StatementCache
public class StatementDecoratorInterceptor extends AbstractCreateStatementInterceptor
Implementation of JdbcInterceptor that proxies resultSets and statements.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classStatementDecoratorInterceptor.ResultSetProxyInvocation handler that proxies ResultSet instances.protected classStatementDecoratorInterceptor.StatementProxy<T extends java.sql.Statement>Class to measure query execute time.
-
Field Summary
Fields Modifier and Type Field Description protected static java.lang.StringEXECUTE_QUERYMethod name for executeQuery.protected static java.lang.StringGET_GENERATED_KEYSMethod name for getGeneratedKeys.protected static java.lang.StringGET_RESULTSETMethod name for getResultSet.protected static java.lang.String[]RESULTSET_TYPESMethod names that return a ResultSet.protected static java.lang.reflect.Constructor<?>resultSetConstructorthe 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()Default constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcloseInvoked()Method invoked when the operationConnection.close()is invoked.protected java.lang.ObjectcreateDecorator(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.Object statement, java.lang.reflect.Constructor<?> constructor, java.lang.String sql)Creates a proxy for a Statement.java.lang.ObjectcreateStatement(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.Object statement, long time)Creates a statement interceptor to monitor query response timesprotected java.lang.reflect.Constructor<?>getResultSetConstructor()Gets the constructor for creating ResultSet proxies.protected booleanisExecuteQuery(java.lang.reflect.Method method)Checks if the given method is executeQuery.protected booleanisExecuteQuery(java.lang.String methodName)Checks if the given method name is executeQuery.protected booleanisResultSet(java.lang.reflect.Method method, boolean process)Checks if the given method returns a ResultSet.-
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
-
-
-
-
Field Detail
-
EXECUTE_QUERY
protected static final java.lang.String EXECUTE_QUERY
Method name for executeQuery.- See Also:
- Constant Field Values
-
GET_GENERATED_KEYS
protected static final java.lang.String GET_GENERATED_KEYS
Method name for getGeneratedKeys.- See Also:
- Constant Field Values
-
GET_RESULTSET
protected static final java.lang.String GET_RESULTSET
Method name for getResultSet.- See Also:
- Constant Field Values
-
RESULTSET_TYPES
protected static final java.lang.String[] RESULTSET_TYPES
Method names that return a ResultSet.
-
resultSetConstructor
protected static volatile java.lang.reflect.Constructor<?> resultSetConstructor
the constructor to create the resultSet proxies
-
-
Method Detail
-
closeInvoked
public void closeInvoked()
Description copied from class:AbstractCreateStatementInterceptorMethod invoked when the operationConnection.close()is invoked.- Specified by:
closeInvokedin classAbstractCreateStatementInterceptor
-
getResultSetConstructor
protected java.lang.reflect.Constructor<?> getResultSetConstructor() throws java.lang.NoSuchMethodExceptionGets the constructor for creating ResultSet proxies.- Returns:
- the ResultSet proxy constructor
- Throws:
java.lang.NoSuchMethodException- if the constructor is not found
-
createStatement
public java.lang.Object createStatement(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.Object statement, long time)Creates a statement interceptor to monitor query response times- Specified by:
createStatementin classAbstractCreateStatementInterceptor- Parameters:
proxy- the actual proxy objectmethod- the method that was called. It will be one of the methods defined inAbstractCreateStatementInterceptor.STATEMENT_TYPESargs- the arguments to the methodstatement- the statement that the underlying connection createdtime- Elapsed time- Returns:
- a
Statementobject
-
createDecorator
protected java.lang.Object createDecorator(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args, java.lang.Object statement, java.lang.reflect.Constructor<?> constructor, java.lang.String sql) throws java.lang.InstantiationException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetExceptionCreates 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 proxyargs- The arguments passed as part of the method call to the proxystatement- The statement object that is to be proxiedconstructor- The constructor for the desired proxysql- The sql of of the statement- Returns:
- A new proxy for the Statement
- Throws:
java.lang.InstantiationException- Couldn't instantiate objectjava.lang.IllegalAccessException- Inaccessible constructorjava.lang.reflect.InvocationTargetException- Exception thrown from constructor
-
isExecuteQuery
protected boolean isExecuteQuery(java.lang.String methodName)
Checks if the given method name is executeQuery.- Parameters:
methodName- the method name to check- Returns:
- true if the method is executeQuery
-
isExecuteQuery
protected boolean isExecuteQuery(java.lang.reflect.Method method)
Checks if the given method is executeQuery.- Parameters:
method- the method to check- Returns:
- true if the method is executeQuery
-
isResultSet
protected boolean isResultSet(java.lang.reflect.Method method, boolean process)Checks if the given method returns a ResultSet.- Parameters:
method- the method to checkprocess- whether processing is already enabled- Returns:
- true if the method returns a ResultSet
-
-