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
Implementation of JdbcInterceptor that proxies resultSets and statements.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classInvocation handler that proxies ResultSet instances.protected classClass to measure query execute time. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final StringMethod name for executeQuery.protected static final StringMethod name for getGeneratedKeys.protected static final StringMethod name for getResultSet.protected static final String[]Method names that return a ResultSet.protected static Constructor<?> the constructor to create the resultSet proxiesFields inherited from class AbstractCreateStatementInterceptor
constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_LARGE_BATCH, EXECUTE_LARGE_UPDATE, EXECUTE_TYPES, EXECUTE_UPDATE, GET_STATEMENT, PREPARE_CALL, PREPARE_CALL_IDX, PREPARE_STATEMENT, PREPARE_STATEMENT_IDX, RESULTSET_IDX, STATEMENT_TYPE_COUNT, STATEMENT_TYPESModifier and TypeFieldDescriptionprotected static final Constructor<?>[]the constructors that are used to create statement proxies.protected static final Stringprotected static final intprotected static final Stringprotected static final Stringprotected static final Stringprotected static final StringStatement.executeLargeUpdate(String)and its overloads, andPreparedStatement.executeLargeUpdate()protected static final String[]Array of execute type method namesprotected static final Stringprotected static final Stringprotected static final Stringprotected static final intprotected static final Stringprotected static final intprotected static final intprotected static final intCount of statement types inAbstractCreateStatementInterceptor.STATEMENT_TYPESprotected static final String[]Array of statement type method namesFields inherited from class JdbcInterceptor
ABORT_VAL, CLOSE_VAL, EQUALS_VAL, GETCONNECTION_VAL, HASHCODE_VAL, ISCLOSED_VAL, ISVALID_VAL, ISWRAPPERFOR_VAL, properties, TOSTRING_VAL, UNWRAP_VALModifier and TypeFieldDescriptionstatic final StringConnection.abort(java.util.concurrent.Executor)method namestatic final StringConnection.close()method namestatic final Stringstatic final StringPooledConnection.getConnection()method namestatic final Stringstatic final StringConnection.isClosed()method namestatic final StringConnection.isValid(int)method namestatic final StringWrapper.isWrapperFor(Class)method nameprotected Map<String, PoolProperties.InterceptorProperty> Properties for this interceptor.static final StringObject.toString()method namestatic final StringWrapper.unwrap(Class)method name -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidMethod invoked when the operationConnection.close()is invoked.protected ObjectcreateDecorator(Object proxy, Method method, Object[] args, Object statement, Constructor<?> constructor, String sql) Creates a proxy for a Statement.createStatement(Object proxy, Method method, Object[] args, Object statement, long time) Creates a statement interceptor to monitor query response timesprotected Constructor<?> Gets the constructor for creating ResultSet proxies.protected booleanisExecuteQuery(Method method) Checks if the given method is executeQuery.protected booleanisExecuteQuery(String methodName) Checks if the given method name is executeQuery.protected booleanisResultSet(Method method, boolean process) Checks if the given method returns a ResultSet.Methods inherited from class AbstractCreateStatementInterceptor
getConstructor, invoke, isExecute, isStatement, process, resetModifier and TypeMethodDescriptionprotected Constructor<?> getConstructor(int idx, Class<?> clazz) Creates a constructor for a proxy class, if one doesn't already exist.Gets invoked each time an operation onConnectionis invoked.protected booleanReturns true if the method that is being invoked matches one of the execute types.protected booleanisStatement(Method method, boolean process) Returns true if the method that is being invoked matches one of the statement types.protected booleanReturns true if the method that is being invoked matches one of the method names passed invoidreset(ConnectionPool parent, PooledConnection con) no-op for this interceptor. no state is stored.Methods inherited from class JdbcInterceptor
compare, compare, disconnected, getNext, getProperties, isUseEquals, poolClosed, poolStarted, setNext, setProperties, setUseEqualsModifier and TypeMethodDescriptionbooleanCompares a method name (String) to a method (Method)JdbcInterceptor.compare(String,String)Uses reference comparison unless the useEquals property is set to truebooleanPerforms a string comparison, using references unless the useEquals property is set to true.voiddisconnected(ConnectionPool parent, PooledConnection con, boolean finalizing) Called whenConnection.close()is called on the underlying connection.getNext()Returns the next interceptor in the chainReturns the properties configured for this interceptorbooleanTrue if the compare method uses the Object.equals(Object) method, false if comparison is done on a reference level.voidpoolClosed(ConnectionPool pool) This method is invoked by a connection pool when the pool is closed.voidpoolStarted(ConnectionPool pool) This method is invoked by a connection pool when the pool is first started up, usually when the first connection is requested.voidsetNext(JdbcInterceptor next) configures the next interceptor in the chainvoidsetProperties(Map<String, PoolProperties.InterceptorProperty> properties) Called during the creation of an interceptor The properties can be set during the configuration of an interceptor Override this method to perform type casts between string values and object propertiesvoidsetUseEquals(boolean useEquals) Set to true if string comparisons (for theJdbcInterceptor.compare(String, Method)andJdbcInterceptor.compare(String, String)methods) should use the Object.equals(Object) method The default is false
-
Field Details
-
EXECUTE_QUERY
-
GET_GENERATED_KEYS
-
GET_RESULTSET
-
RESULTSET_TYPES
Method names that return a ResultSet. -
resultSetConstructor
the constructor to create the resultSet proxies
-
-
Constructor Details
-
StatementDecoratorInterceptor
public StatementDecoratorInterceptor()Default constructor.
-
-
Method Details
-
closeInvoked
public void closeInvoked()Description copied from class:AbstractCreateStatementInterceptorMethod invoked when the operationConnection.close()is invoked.- Specified by:
closeInvokedin classAbstractCreateStatementInterceptor
-
getResultSetConstructor
Gets the constructor for creating ResultSet proxies.- Returns:
- the ResultSet proxy constructor
- Throws:
NoSuchMethodException- if the constructor is not found
-
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:
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 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 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:
InstantiationException- Couldn't instantiate objectIllegalAccessException- Inaccessible constructorInvocationTargetException- Exception thrown from constructor
-
isExecuteQuery
Checks if the given method name is executeQuery.- Parameters:
methodName- the method name to check- Returns:
- true if the method is executeQuery
-
isExecuteQuery
Checks if the given method is executeQuery.- Parameters:
method- the method to check- Returns:
- true if the method is executeQuery
-
isResultSet
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
-