Class SlowQueryReportJmx

All Implemented Interfaces:
InvocationHandler, NotificationBroadcaster, NotificationEmitter, SlowQueryReportJmxMBean

public class SlowQueryReportJmx extends SlowQueryReport implements 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 Details

    • SLOW_QUERY_NOTIFICATION

      public static final String SLOW_QUERY_NOTIFICATION
      Notification type for slow query events.
      See Also:
    • FAILED_QUERY_NOTIFICATION

      public static final String FAILED_QUERY_NOTIFICATION
      Notification type for failed query events.
      See Also:
    • objectNameAttribute

      public static final String objectNameAttribute
      Property key for overriding the JMX object name.
      See Also:
    • SLOW_QUERY_TYPE

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

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

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

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

      protected static final AtomicLong notifySequence
      Atomic sequence counter for notifications.
    • notifyPool

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

      protected ConnectionPool pool
      The connection pool reference.
  • Constructor Details

    • SlowQueryReportJmx

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

    • addNotificationListener

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

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

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

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

      protected static 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 String reportFailedQuery(String query, Object[] args, String name, long start, 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(String query, 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 String reportSlowQuery(String query, Object[] args, 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 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 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 CompositeData[] getSlowQueriesCD() throws 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:
      OpenDataException - if the composite data cannot be created
    • deregisterJmx

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

      public ObjectName getObjectName(Class<?> clazz, String poolName) throws 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:
      MalformedObjectNameException - if the object name is malformed
    • registerJmx

      protected void registerJmx()
      Registers this interceptor with JMX.
    • setProperties

      public void setProperties(Map<String, PoolProperties.InterceptorProperty> properties)
      Sets the interceptor properties, including the notifyPool flag.
      Overrides:
      setProperties in class SlowQueryReport
      Parameters:
      properties - the interceptor properties