Class StatementCache
java.lang.Object
org.apache.tomcat.jdbc.pool.JdbcInterceptor
org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
org.apache.tomcat.jdbc.pool.interceptor.StatementDecoratorInterceptor
org.apache.tomcat.jdbc.pool.interceptor.StatementCache
- All Implemented Interfaces:
InvocationHandler, StatementCacheMBean
Interceptor that caches
PreparedStatement and/or
CallableStatement instances on a connection.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classProxy for a cached prepared statement.Nested classes/interfaces inherited from class StatementDecoratorInterceptor
StatementDecoratorInterceptor.ResultSetProxy, StatementDecoratorInterceptor.StatementProxy<T> -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final String[]All statement types (prepared and callable).protected static final String[]Callable statement type only.protected static final String[]No statement types.protected static final String[]Prepared statement type only.protected static final StringAttribute key for storing the statement cache in connection attributes.Fields inherited from class StatementDecoratorInterceptor
EXECUTE_QUERY, GET_GENERATED_KEYS, GET_RESULTSET, RESULTSET_TYPES, resultSetConstructorFields inherited from class 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_TYPESFields inherited from class JdbcInterceptor
CLOSE_VAL, EQUALS_VAL, GETCONNECTION_VAL, HASHCODE_VAL, ISCLOSED_VAL, ISVALID_VAL, ISWRAPPERFOR_VAL, properties, TOSTRING_VAL, UNWRAP_VAL -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanCaches the given statement proxy if there is room in the cache.voidCloses the given cached statement by forcing it to close.protected org.apache.tomcat.jdbc.pool.interceptor.StatementCache.CacheKeycreateCacheKey(Method method, Object[] args) Creates a cache key from the given method and arguments.protected org.apache.tomcat.jdbc.pool.interceptor.StatementCache.CacheKeycreateCacheKey(String methodName, Object[] args) Creates a cache key from the given method name and arguments.protected ObjectcreateDecorator(Object proxy, Method method, Object[] args, Object statement, Constructor<?> constructor, String sql) Creates a proxy for a Statement.voiddisconnected(ConnectionPool parent, PooledConnection con, boolean finalizing) Called whenConnection.close()is called on the underlying connection.protected ConcurrentHashMap<org.apache.tomcat.jdbc.pool.interceptor.StatementCache.CacheKey, StatementCache.CachedStatement> getCache()Returns the statement cache for the current pooled connection.Returns the current global cache size across all connections.intReturns the cache size for the current connection.intReturns the maximum size of the statement cache.String[]getTypes()Returns the statement types being cached.Gets invoked each time an operation onConnectionis invoked.booleanChecks if callable statements are being cached.Checks if a statement for the given method and arguments is currently cached.booleanChecks if prepared statements are being cached.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.booleanRemoves the given statement from the cache.voidreset(ConnectionPool parent, PooledConnection con) no-op for this interceptor. no state is stored.voidsetProperties(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 propertiesMethods inherited from class StatementDecoratorInterceptor
closeInvoked, createStatement, getResultSetConstructor, isExecuteQuery, isExecuteQuery, isResultSetMethods inherited from class AbstractCreateStatementInterceptor
getConstructor, isExecute, isStatement, processMethods inherited from class JdbcInterceptor
compare, compare, getNext, getProperties, isUseEquals, setNext, setUseEquals
-
Field Details
-
ALL_TYPES
All statement types (prepared and callable). -
CALLABLE_TYPE
Callable statement type only. -
PREPARED_TYPE
Prepared statement type only. -
NO_TYPE
No statement types. -
STATEMENT_CACHE_ATTR
Attribute key for storing the statement cache in connection attributes.
-
-
Constructor Details
-
StatementCache
public StatementCache()Default constructor.
-
-
Method Details
-
isCachePrepared
public boolean isCachePrepared()Description copied from interface:StatementCacheMBeanChecks if prepared statements are being cached.- Specified by:
isCachePreparedin interfaceStatementCacheMBean- Returns:
- true if prepared statement caching is enabled
-
isCacheCallable
public boolean isCacheCallable()Description copied from interface:StatementCacheMBeanChecks if callable statements are being cached.- Specified by:
isCacheCallablein interfaceStatementCacheMBean- Returns:
- true if callable statement caching is enabled
-
getMaxCacheSize
public int getMaxCacheSize()Description copied from interface:StatementCacheMBeanReturns the maximum size of the statement cache.- Specified by:
getMaxCacheSizein interfaceStatementCacheMBean- Returns:
- maximum cache size
-
getTypes
Returns the statement types being cached.- Returns:
- array of statement type strings
-
getCacheSize
Description copied from interface:StatementCacheMBeanReturns the current global cache size across all connections.- Specified by:
getCacheSizein interfaceStatementCacheMBean- Returns:
- current cache size counter
-
setProperties
Description copied from class:JdbcInterceptorCalled 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 properties- Overrides:
setPropertiesin classJdbcInterceptor- Parameters:
properties- The properties
-
poolStarted
Description copied from class:JdbcInterceptorThis method is invoked by a connection pool when the pool is first started up, usually when the first connection is requested. Interceptor classes can override this method if they keep static variables or other tracking means around. This method is only invoked on a single instance of the interceptor, and not on every instance created.- Overrides:
poolStartedin classJdbcInterceptor- Parameters:
pool- - the pool that is being closed.
-
poolClosed
Description copied from class:JdbcInterceptorThis method is invoked by a connection pool when the pool is closed. Interceptor classes can override this method if they keep static variables or other tracking means around. This method is only invoked on a single instance of the interceptor, and not on every instance created.- Overrides:
poolClosedin classJdbcInterceptor- Parameters:
pool- - the pool that is being closed.
-
reset
Description copied from class:AbstractCreateStatementInterceptorno-op for this interceptor. no state is stored.- Overrides:
resetin classAbstractCreateStatementInterceptor- Parameters:
parent- - the connection pool owning the connectioncon- - the pooled connection
-
disconnected
Description copied from class:JdbcInterceptorCalled whenConnection.close()is called on the underlying connection. This is to notify the interceptors, that the physical connection has been released. Implementation of this method should be thought through with care, as no actions should trigger an exception.- Overrides:
disconnectedin classJdbcInterceptor- Parameters:
parent- - the connection pool that this connection belongs tocon- - the pooled connection that holds this connectionfinalizing- - if this connection is finalizing. True means that the pooled connection will not reconnect the underlying connection
-
closeStatement
Closes the given cached statement by forcing it to close.- Parameters:
st- the cached statement to close
-
createDecorator
protected Object createDecorator(Object proxy, Method method, Object[] args, Object statement, Constructor<?> constructor, String sql) throws InstantiationException, IllegalAccessException, InvocationTargetException Description copied from class:StatementDecoratorInterceptorCreates a proxy for a Statement.- Overrides:
createDecoratorin classStatementDecoratorInterceptor- 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
-
invoke
Description copied from class:JdbcInterceptorGets invoked each time an operation onConnectionis invoked.- Specified by:
invokein interfaceInvocationHandler- Overrides:
invokein classAbstractCreateStatementInterceptor- Throws:
Throwable
-
isCached
Checks if a statement for the given method and arguments is currently cached.- Parameters:
method- the SQL method (prepareStatement or prepareCall)args- the method arguments- Returns:
- the cached statement, or null if not cached
-
cacheStatement
Caches the given statement proxy if there is room in the cache.- Parameters:
proxy- the statement proxy to cache- Returns:
- true if the statement was cached, false otherwise
-
removeStatement
Removes the given statement from the cache.- Parameters:
proxy- the statement proxy to remove- Returns:
- true if the statement was removed, false otherwise
-
getCache
protected ConcurrentHashMap<org.apache.tomcat.jdbc.pool.interceptor.StatementCache.CacheKey, StatementCache.CachedStatement> getCache()Returns the statement cache for the current pooled connection.- Returns:
- the cache map, or null if the connection has been closed
-
getCacheSizePerConnection
public int getCacheSizePerConnection()Description copied from interface:StatementCacheMBeanReturns the cache size for the current connection.- Specified by:
getCacheSizePerConnectionin interfaceStatementCacheMBean- Returns:
- number of cached statements for this connection
-
createCacheKey
-
createCacheKey
protected org.apache.tomcat.jdbc.pool.interceptor.StatementCache.CacheKey createCacheKey(String methodName, Object[] args) Creates a cache key from the given method name and arguments.- Parameters:
methodName- the SQL method nameargs- the method arguments- Returns:
- the cache key, or null if the method name doesn't match a cached type
-