Class StatementCache

    • Field Detail

      • ALL_TYPES

        protected static final java.lang.String[] ALL_TYPES
        All statement types (prepared and callable).
      • CALLABLE_TYPE

        protected static final java.lang.String[] CALLABLE_TYPE
        Callable statement type only.
      • PREPARED_TYPE

        protected static final java.lang.String[] PREPARED_TYPE
        Prepared statement type only.
      • NO_TYPE

        protected static final java.lang.String[] NO_TYPE
        No statement types.
      • STATEMENT_CACHE_ATTR

        protected static final java.lang.String STATEMENT_CACHE_ATTR
        Attribute key for storing the statement cache in connection attributes.
    • Constructor Detail

      • StatementCache

        public StatementCache()
        Default constructor.
    • Method Detail

      • isCachePrepared

        public boolean isCachePrepared()
        Description copied from interface: StatementCacheMBean
        Checks if prepared statements are being cached.
        Specified by:
        isCachePrepared in interface StatementCacheMBean
        Returns:
        true if prepared statement caching is enabled
      • isCacheCallable

        public boolean isCacheCallable()
        Description copied from interface: StatementCacheMBean
        Checks if callable statements are being cached.
        Specified by:
        isCacheCallable in interface StatementCacheMBean
        Returns:
        true if callable statement caching is enabled
      • getTypes

        public java.lang.String[] getTypes()
        Returns the statement types being cached.
        Returns:
        array of statement type strings
      • getCacheSize

        public java.util.concurrent.atomic.AtomicInteger getCacheSize()
        Description copied from interface: StatementCacheMBean
        Returns the current global cache size across all connections.
        Specified by:
        getCacheSize in interface StatementCacheMBean
        Returns:
        current cache size counter
      • setProperties

        public void setProperties​(java.util.Map<java.lang.String,​PoolProperties.InterceptorProperty> properties)
        Description copied from class: JdbcInterceptor
        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 properties
        Overrides:
        setProperties in class JdbcInterceptor
        Parameters:
        properties - The properties
      • poolStarted

        public void poolStarted​(ConnectionPool pool)
        Description copied from class: JdbcInterceptor
        This 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:
        poolStarted in class JdbcInterceptor
        Parameters:
        pool - - the pool that is being closed.
      • poolClosed

        public void poolClosed​(ConnectionPool pool)
        Description copied from class: JdbcInterceptor
        This 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:
        poolClosed in class JdbcInterceptor
        Parameters:
        pool - - the pool that is being closed.
      • disconnected

        public void disconnected​(ConnectionPool parent,
                                 PooledConnection con,
                                 boolean finalizing)
        Description copied from class: JdbcInterceptor
        Called when Connection.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:
        disconnected in class JdbcInterceptor
        Parameters:
        parent - - the connection pool that this connection belongs to
        con - - the pooled connection that holds this connection
        finalizing - - if this connection is finalizing. True means that the pooled connection will not reconnect the underlying connection
      • closeStatement

        public void closeStatement​(StatementCache.CachedStatement st)
        Closes the given cached statement by forcing it to close.
        Parameters:
        st - the cached statement to close
      • 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.InvocationTargetException
        Description copied from class: StatementDecoratorInterceptor
        Creates a proxy for a Statement.
        Overrides:
        createDecorator in class StatementDecoratorInterceptor
        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:
        java.lang.InstantiationException - Couldn't instantiate object
        java.lang.IllegalAccessException - Inaccessible constructor
        java.lang.reflect.InvocationTargetException - Exception thrown from constructor
      • invoke

        public java.lang.Object invoke​(java.lang.Object proxy,
                                       java.lang.reflect.Method method,
                                       java.lang.Object[] args)
                                throws java.lang.Throwable
        Description copied from class: JdbcInterceptor
        Gets invoked each time an operation on Connection is invoked.
        Specified by:
        invoke in interface java.lang.reflect.InvocationHandler
        Overrides:
        invoke in class AbstractCreateStatementInterceptor
        Throws:
        java.lang.Throwable
      • isCached

        public StatementCache.CachedStatement isCached​(java.lang.reflect.Method method,
                                                       java.lang.Object[] args)
        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

        public boolean cacheStatement​(StatementCache.CachedStatement proxy)
        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

        public boolean removeStatement​(StatementCache.CachedStatement proxy)
        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 java.util.concurrent.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
      • createCacheKey

        protected org.apache.tomcat.jdbc.pool.interceptor.StatementCache.CacheKey createCacheKey​(java.lang.reflect.Method method,
                                                                                                 java.lang.Object[] args)
        Creates a cache key from the given method and arguments.
        Parameters:
        method - the SQL method
        args - the method arguments
        Returns:
        the cache key
      • createCacheKey

        protected org.apache.tomcat.jdbc.pool.interceptor.StatementCache.CacheKey createCacheKey​(java.lang.String methodName,
                                                                                                 java.lang.Object[] args)
        Creates a cache key from the given method name and arguments.
        Parameters:
        methodName - the SQL method name
        args - the method arguments
        Returns:
        the cache key, or null if the method name doesn't match a cached type