Class 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
    JMX-enabled slow query report interceptor. Publishes slow and failed query statistics to JMX and provides notifications when slow or failed queries are detected.
    • Field Detail

      • SLOW_QUERY_NOTIFICATION

        public static final java.lang.String SLOW_QUERY_NOTIFICATION
        Notification type for slow query events.
        See Also:
        Constant Field Values
      • FAILED_QUERY_NOTIFICATION

        public static final java.lang.String FAILED_QUERY_NOTIFICATION
        Notification type for failed query events.
        See Also:
        Constant Field Values
      • objectNameAttribute

        public static final java.lang.String objectNameAttribute
        Property key for overriding the JMX object name.
        See Also:
        Constant Field Values
      • SLOW_QUERY_TYPE

        protected static volatile javax.management.openmbean.CompositeType SLOW_QUERY_TYPE
        Composite type used for JMX query statistics data.
      • mbeans

        protected static final java.util.concurrent.ConcurrentHashMap<java.lang.String,​SlowQueryReportJmxMBean> mbeans
        Registry of JMX MBeans for each connection pool.
      • notifier

        protected volatile javax.management.NotificationBroadcasterSupport notifier
        Notification broadcaster support for JMX notifications.
      • poolName

        protected java.lang.String poolName
        The name of the connection pool.
      • notifySequence

        protected static final java.util.concurrent.atomic.AtomicLong notifySequence
        Atomic sequence counter for notifications.
      • notifyPool

        protected boolean notifyPool
        Whether to send notifications to the pool.
    • Constructor Detail

      • SlowQueryReportJmx

        public SlowQueryReportJmx()
        Creates a new SlowQueryReportJmx instance.
    • Method Detail

      • addNotificationListener

        public void addNotificationListener​(javax.management.NotificationListener listener,
                                            javax.management.NotificationFilter filter,
                                            java.lang.Object handback)
                                     throws java.lang.IllegalArgumentException
        Adds a notification listener.
        Specified by:
        addNotificationListener in interface javax.management.NotificationBroadcaster
        Parameters:
        listener - the listener to add
        filter - the notification filter
        handback - the handback object
        Throws:
        java.lang.IllegalArgumentException - if the listener is null
      • getNotificationInfo

        public javax.management.MBeanNotificationInfo[] getNotificationInfo()
        Returns information about the notifications this MBean can send.
        Specified by:
        getNotificationInfo in interface javax.management.NotificationBroadcaster
        Returns:
        an array of MBeanNotificationInfo objects
      • removeNotificationListener

        public void removeNotificationListener​(javax.management.NotificationListener listener)
                                        throws javax.management.ListenerNotFoundException
        Removes a notification listener.
        Specified by:
        removeNotificationListener in interface javax.management.NotificationBroadcaster
        Parameters:
        listener - the listener to remove
        Throws:
        javax.management.ListenerNotFoundException - if the listener was not previously added
      • removeNotificationListener

        public void removeNotificationListener​(javax.management.NotificationListener listener,
                                               javax.management.NotificationFilter filter,
                                               java.lang.Object handback)
                                        throws javax.management.ListenerNotFoundException
        Removes a notification listener with the given filter and handback.
        Specified by:
        removeNotificationListener in interface javax.management.NotificationEmitter
        Parameters:
        listener - the listener to remove
        filter - the notification filter
        handback - the handback object
        Throws:
        javax.management.ListenerNotFoundException - if the listener was not previously added
      • getCompositeType

        protected static javax.management.openmbean.CompositeType getCompositeType()
        Returns the composite type used for JMX query statistics.
        Returns:
        the composite type, or null if initialization failed
      • reset

        public void reset​(ConnectionPool parent,
                          PooledConnection con)
        Resets this interceptor for a new connection, registering JMX if applicable.
        Overrides:
        reset in class SlowQueryReport
        Parameters:
        parent - the connection pool
        con - the pooled connection
      • poolClosed

        public void poolClosed​(ConnectionPool pool)
        Called when the connection pool is closed; deregisters JMX.
        Overrides:
        poolClosed in class SlowQueryReport
        Parameters:
        pool - the connection pool being closed
      • poolStarted

        public void poolStarted​(ConnectionPool pool)
        Called when the connection pool is started.
        Overrides:
        poolStarted in class SlowQueryReport
        Parameters:
        pool - the connection pool being started
      • reportFailedQuery

        protected java.lang.String reportFailedQuery​(java.lang.String query,
                                                     java.lang.Object[] args,
                                                     java.lang.String name,
                                                     long start,
                                                     java.lang.Throwable t)
        Reports a failed query and sends a JMX notification if logging is enabled.
        Overrides:
        reportFailedQuery in class SlowQueryReport
        Parameters:
        query - the SQL query
        args - the query arguments
        name - the connection pool name
        start - the start time in milliseconds
        t - the throwable that caused the failure
        Returns:
        the formatted query string
      • notifyJmx

        protected void notifyJmx​(java.lang.String query,
                                 java.lang.String type)
        Sends a JMX notification for the given query and notification type.
        Parameters:
        query - the SQL query string
        type - the notification type (slow or failed query)
      • reportSlowQuery

        protected java.lang.String reportSlowQuery​(java.lang.String query,
                                                   java.lang.Object[] args,
                                                   java.lang.String name,
                                                   long start,
                                                   long delta)
        Reports a slow query and sends a JMX notification if logging is enabled.
        Overrides:
        reportSlowQuery in class SlowQueryReport
        Parameters:
        query - the SQL query
        args - the query arguments
        name - the connection pool name
        start - the start time in milliseconds
        delta - the elapsed time in milliseconds
        Returns:
        the formatted query string
      • 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()
        Returns whether notifications are sent to the pool.
        Returns:
        true if notifications are sent to the pool
      • setNotifyPool

        public void setNotifyPool​(boolean notifyPool)
        Sets whether notifications are sent to the pool.
        Parameters:
        notifyPool - true if notifications should be sent to the pool
      • 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 - if the composite data cannot be created
      • deregisterJmx

        protected void deregisterJmx()
        Deregisters this interceptor from JMX.
      • getObjectName

        public javax.management.ObjectName getObjectName​(java.lang.Class<?> clazz,
                                                         java.lang.String poolName)
                                                  throws javax.management.MalformedObjectNameException
        Returns the JMX ObjectName for the given class and pool name.
        Parameters:
        clazz - the interceptor class
        poolName - the name of the connection pool
        Returns:
        the JMX ObjectName
        Throws:
        javax.management.MalformedObjectNameException - if the object name is malformed
      • registerJmx

        protected void registerJmx()
        Registers this interceptor with JMX.