Package org.apache.tomcat.jdbc.pool.interceptor

## Class SlowQueryReportJmx

- java.lang.Object
- - org.apache.tomcat.jdbc.pool.JdbcInterceptor
  - - org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor
    - - org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport
      - - org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport
        - - org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReportJmx

- All Implemented Interfaces:
    `java.lang.reflect.InvocationHandler`, `javax.management.NotificationBroadcaster`, `javax.management.NotificationEmitter`, `SlowQueryReportJmxMBean`

      public class SlowQueryReportJmx
      extends SlowQueryReport
      implements javax.management.NotificationEmitter, SlowQueryReportJmxMBean

  Publishes data to JMX and provides notifications when failures happen.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport

      `SlowQueryReport.QueryStats, SlowQueryReport.QueryStatsComparator`

    - ### Nested classes/interfaces inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport

      `AbstractQueryReport.StatementProxy`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `FAILED_QUERY_NOTIFICATION` |
    `protected static java.util.concurrent.ConcurrentHashMap<java.lang.String,​SlowQueryReportJmxMBean>` | `mbeans` |
    `protected javax.management.NotificationBroadcasterSupport` | `notifier` |
    `protected boolean` | `notifyPool` |
    `protected static java.util.concurrent.atomic.AtomicLong` | `notifySequence` |
    `static java.lang.String` | `objectNameAttribute` |
    `protected ConnectionPool` | `pool` |
    `protected java.lang.String` | `poolName` |
    `static java.lang.String` | `SLOW_QUERY_NOTIFICATION` |
    `protected static javax.management.openmbean.CompositeType` | `SLOW_QUERY_TYPE` |

    - ### Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport

      `logFailed, logSlow, maxQueries, perPoolStats, queries, queryStatsComparator`

    - ### Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport

      `threshold`

    - ### Fields inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor

      `constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_QUERY, 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
    --- | ---
    `SlowQueryReportJmx()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addNotificationListener​(javax.management.NotificationListener listener, javax.management.NotificationFilter filter, java.lang.Object handback)` |
    `protected void` | `deregisterJmx()` |
    `protected static javax.management.openmbean.CompositeType` | `getCompositeType()` |
    `javax.management.MBeanNotificationInfo[]` | `getNotificationInfo()` |
    `javax.management.ObjectName` | `getObjectName​(java.lang.Class<?> clazz, java.lang.String poolName)` |
    `java.lang.String` | `getPoolName()` | JMX operation - return the name of the pool
    `java.lang.String[]` | `getPoolNames()` | JMX operation - return the names of all the pools
    `javax.management.openmbean.CompositeData[]` | `getSlowQueriesCD()` | JMX operation - returns all the queries we have collected.
    `boolean` | `isNotifyPool()` |
    `protected void` | `notifyJmx​(java.lang.String query, java.lang.String type)` |
    `void` | `poolClosed​(ConnectionPool pool)` | This method is invoked by a connection pool when the pool is closed.
    `void` | `poolStarted​(ConnectionPool pool)` | This method is invoked by a connection pool when the pool is first started up, usually when the first connection is requested.
    `protected void` | `registerJmx()` |
    `void` | `removeNotificationListener​(javax.management.NotificationListener listener)` |
    `void` | `removeNotificationListener​(javax.management.NotificationListener listener, javax.management.NotificationFilter filter, java.lang.Object handback)` |
    `protected java.lang.String` | `reportFailedQuery​(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, java.lang.Throwable t)` | Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.
    `protected java.lang.String` | `reportSlowQuery​(java.lang.String query, java.lang.Object[] args, java.lang.String name, long start, long delta)` | Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing threshold
    `void` | `reset​(ConnectionPool parent, PooledConnection con)` | no-op for this interceptor. no state is stored.
    `void` | `resetStats()` | JMX operation - remove all stats for this connection pool
    `void` | `setNotifyPool​(boolean notifyPool)` |
    `void` | `setProperties​(java.util.Map<java.lang.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 properties

    - ### Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport

      `closeInvoked, getPoolStats, getQueryStats, isLogFailed, isLogSlow, prepareCall, prepareStatement, removeOldest, reportQuery, setLogFailed, setLogSlow, setMaxQueries`

    - ### Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport

      `createStatement, getThreshold, setThreshold`

    - ### Methods inherited from class org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor

      `getConstructor, invoke, isExecute, isStatement, process`

    - ### Methods inherited from class org.apache.tomcat.jdbc.pool.JdbcInterceptor

      `compare, compare, disconnected, getNext, getProperties, isUseEquals, setNext, setUseEquals`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### SLOW_QUERY_NOTIFICATION

          public static final java.lang.String SLOW_QUERY_NOTIFICATION

      See Also:
        Constant Field Values

    - #### FAILED_QUERY_NOTIFICATION

          public static final java.lang.String FAILED_QUERY_NOTIFICATION

      See Also:
        Constant Field Values

    - #### objectNameAttribute

          public static final java.lang.String objectNameAttribute

      See Also:
        Constant Field Values

    - #### SLOW_QUERY_TYPE

          protected static volatile javax.management.openmbean.CompositeType SLOW_QUERY_TYPE

    - #### mbeans

          protected static final java.util.concurrent.ConcurrentHashMap<java.lang.String,​SlowQueryReportJmxMBean> mbeans

    - #### notifier

          protected volatile javax.management.NotificationBroadcasterSupport notifier

    - #### poolName

          protected java.lang.String poolName

    - #### notifySequence

          protected static final java.util.concurrent.atomic.AtomicLong notifySequence

    - #### notifyPool

          protected boolean notifyPool

    - #### pool

          protected ConnectionPool pool

  - ### Constructor Detail

    - #### SlowQueryReportJmx

          public SlowQueryReportJmx()

  - ### Method Detail

    - #### addNotificationListener

          public void addNotificationListener​(javax.management.NotificationListener listener,
                                              javax.management.NotificationFilter filter,
                                              java.lang.Object handback)
                                       throws java.lang.IllegalArgumentException

      Specified by:
        `addNotificationListener` in interface `javax.management.NotificationBroadcaster`
      Throws:
        `java.lang.IllegalArgumentException`

    - #### getNotificationInfo

          public javax.management.MBeanNotificationInfo[] getNotificationInfo()

      Specified by:
        `getNotificationInfo` in interface `javax.management.NotificationBroadcaster`

    - #### removeNotificationListener

          public void removeNotificationListener​(javax.management.NotificationListener listener)
                                          throws javax.management.ListenerNotFoundException

      Specified by:
        `removeNotificationListener` in interface `javax.management.NotificationBroadcaster`
      Throws:
        `javax.management.ListenerNotFoundException`

    - #### removeNotificationListener

          public void removeNotificationListener​(javax.management.NotificationListener listener,
                                                 javax.management.NotificationFilter filter,
                                                 java.lang.Object handback)
                                          throws javax.management.ListenerNotFoundException

      Specified by:
        `removeNotificationListener` in interface `javax.management.NotificationEmitter`
      Throws:
        `javax.management.ListenerNotFoundException`

    - #### getCompositeType

          protected static javax.management.openmbean.CompositeType getCompositeType()

    - #### reset

          public void reset​(ConnectionPool parent,
                            PooledConnection con)

      Description copied from class: `AbstractCreateStatementInterceptor`
      no-op for this interceptor. no state is stored.
      Overrides:
        `reset` in class `SlowQueryReport`
      Parameters:
        `parent` - - the connection pool owning the connection
        `con` - - the pooled connection

    - #### poolClosed

          public void poolClosed​(ConnectionPool pool)

      Description copied from class: `SlowQueryReport`
      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 `SlowQueryReport`
      Parameters:
        `pool` - - the pool that is being closed.

    - #### poolStarted

          public void poolStarted​(ConnectionPool pool)

      Description copied from class: `SlowQueryReport`
      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 `SlowQueryReport`
      Parameters:
        `pool` - - the pool that is being closed.

    - #### reportFailedQuery

          protected java.lang.String reportFailedQuery​(java.lang.String query,
                                                       java.lang.Object[] args,
                                                       java.lang.String name,
                                                       long start,
                                                       java.lang.Throwable t)

      Description copied from class: `AbstractQueryReport`
      Invoked when a query execution, a call to execute/executeQuery or executeBatch failed.
      Overrides:
        `reportFailedQuery` in class `SlowQueryReport`
      Parameters:
        `query` - the query that was executed and failed
        `args` - the arguments to the execution
        `name` - the name of the method used to execute `AbstractCreateStatementInterceptor.isExecute(Method, boolean)`
        `start` - the time the query execution started
        `t` - the exception that happened
      Returns:
        - the SQL that was executed or the string "batch" if it was a batch execution

    - #### notifyJmx

          protected void notifyJmx​(java.lang.String query,
                                   java.lang.String type)

    - #### reportSlowQuery

          protected java.lang.String reportSlowQuery​(java.lang.String query,
                                                     java.lang.Object[] args,
                                                     java.lang.String name,
                                                     long start,
                                                     long delta)

      Description copied from class: `AbstractQueryReport`
      Invoked when a query execution, a call to execute/executeQuery or executeBatch succeeded and was exceeded the timing threshold
      Overrides:
        `reportSlowQuery` in class `SlowQueryReport`
      Parameters:
        `query` - the query that was executed and failed
        `args` - the arguments to the execution
        `name` - the name of the method used to execute `AbstractCreateStatementInterceptor.isExecute(Method, boolean)`
        `start` - the time the query execution started
        `delta` - the time the execution took
      Returns:
        - the SQL that was executed or the string "batch" if it was a batch execution

    - #### getPoolNames

          public java.lang.String[] getPoolNames()

      JMX operation - return the names of all the pools
      Returns:
        - all the names of pools that we have stored data for

    - #### getPoolName

          public java.lang.String getPoolName()

      JMX operation - return the name of the pool
      Returns:
        the name of the pool, unique within the JVM

    - #### isNotifyPool

          public boolean isNotifyPool()

    - #### setNotifyPool

          public void setNotifyPool​(boolean notifyPool)

    - #### resetStats

          public void resetStats()

      JMX operation - remove all stats for this connection pool

    - #### getSlowQueriesCD

          public javax.management.openmbean.CompositeData[] getSlowQueriesCD()
                                                                      throws javax.management.openmbean.OpenDataException

      JMX operation - returns all the queries we have collected.
      Specified by:
        `getSlowQueriesCD` in interface `SlowQueryReportJmxMBean`
      Returns:
        - the slow query report as composite data.
      Throws:
        `javax.management.openmbean.OpenDataException`

    - #### deregisterJmx

          protected void deregisterJmx()

    - #### getObjectName

          public javax.management.ObjectName getObjectName​(java.lang.Class<?> clazz,
                                                           java.lang.String poolName)
                                                    throws javax.management.MalformedObjectNameException

      Throws:
        `javax.management.MalformedObjectNameException`

    - #### registerJmx

          protected void registerJmx()

    - #### 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 `SlowQueryReport`
      Parameters:
        `properties` - The properties