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:
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.
-
Nested Class Summary
Nested classes/interfaces inherited from class SlowQueryReport
SlowQueryReport.QueryStats, SlowQueryReport.QueryStatsComparatorNested classes/interfaces inherited from class AbstractQueryReport
AbstractQueryReport.StatementProxy -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringNotification type for failed query events.protected static final ConcurrentHashMap<String, SlowQueryReportJmxMBean> Registry of JMX MBeans for each connection pool.protected NotificationBroadcasterSupportNotification broadcaster support for JMX notifications.protected booleanWhether to send notifications to the pool.protected static final AtomicLongAtomic sequence counter for notifications.static final StringProperty key for overriding the JMX object name.protected ConnectionPoolThe connection pool reference.protected StringThe name of the connection pool.static final StringNotification type for slow query events.protected static CompositeTypeComposite type used for JMX query statistics data.Fields inherited from class SlowQueryReport
logFailed, logSlow, maxQueries, perPoolStats, queries, queryStatsComparatorFields inherited from class AbstractQueryReport
thresholdFields inherited from class AbstractCreateStatementInterceptor
constructors, CREATE_STATEMENT, CREATE_STATEMENT_IDX, EXECUTE, EXECUTE_BATCH, EXECUTE_QUERY, EXECUTE_TYPES, EXECUTE_UPDATE, GET_GENERATED_KEYS, GET_RESULTSET, 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 TypeMethodDescriptionvoidaddNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) Adds a notification listener.protected voidDeregisters this interceptor from JMX.protected static CompositeTypeReturns the composite type used for JMX query statistics.Returns information about the notifications this MBean can send.getObjectName(Class<?> clazz, String poolName) Returns the JMX ObjectName for the given class and pool name.JMX operation - return the name of the poolString[]JMX operation - return the names of all the poolsJMX operation - returns all the queries we have collected.booleanReturns whether notifications are sent to the pool.protected voidSends a JMX notification for the given query and notification type.voidpoolClosed(ConnectionPool pool) Called when the connection pool is closed; deregisters JMX.voidpoolStarted(ConnectionPool pool) Called when the connection pool is started.protected voidRegisters this interceptor with JMX.voidRemoves a notification listener.voidremoveNotificationListener(NotificationListener listener, NotificationFilter filter, Object handback) Removes a notification listener with the given filter and handback.protected StringreportFailedQuery(String query, Object[] args, String name, long start, Throwable t) Reports a failed query and sends a JMX notification if logging is enabled.protected StringreportSlowQuery(String query, Object[] args, String name, long start, long delta) Reports a slow query and sends a JMX notification if logging is enabled.voidreset(ConnectionPool parent, PooledConnection con) Resets this interceptor for a new connection, registering JMX if applicable.voidJMX operation - remove all stats for this connection poolvoidsetNotifyPool(boolean notifyPool) Sets whether notifications are sent to the pool.voidsetProperties(Map<String, PoolProperties.InterceptorProperty> properties) Sets the interceptor properties, including the notifyPool flag.Methods inherited from class SlowQueryReport
closeInvoked, getPoolStats, getQueryStats, isLogFailed, isLogSlow, prepareCall, prepareStatement, removeOldest, reportQuery, setLogFailed, setLogSlow, setMaxQueriesMethods inherited from class AbstractQueryReport
createStatement, getThreshold, setThresholdMethods inherited from class AbstractCreateStatementInterceptor
getConstructor, invoke, isExecute, isStatement, processMethods inherited from class JdbcInterceptor
compare, compare, disconnected, getNext, getProperties, isUseEquals, setNext, setUseEquals
-
Field Details
-
SLOW_QUERY_NOTIFICATION
Notification type for slow query events.- See Also:
-
FAILED_QUERY_NOTIFICATION
Notification type for failed query events.- See Also:
-
objectNameAttribute
Property key for overriding the JMX object name.- See Also:
-
SLOW_QUERY_TYPE
Composite type used for JMX query statistics data. -
mbeans
Registry of JMX MBeans for each connection pool. -
notifier
Notification broadcaster support for JMX notifications. -
poolName
The name of the connection pool. -
notifySequence
Atomic sequence counter for notifications. -
notifyPool
protected boolean notifyPoolWhether to send notifications to the pool. -
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:
addNotificationListenerin interfaceNotificationBroadcaster- Parameters:
listener- the listener to addfilter- the notification filterhandback- the handback object- Throws:
IllegalArgumentException- if the listener is null
-
getNotificationInfo
Returns information about the notifications this MBean can send.- Specified by:
getNotificationInfoin interfaceNotificationBroadcaster- Returns:
- an array of MBeanNotificationInfo objects
-
removeNotificationListener
public void removeNotificationListener(NotificationListener listener) throws ListenerNotFoundException Removes a notification listener.- Specified by:
removeNotificationListenerin interfaceNotificationBroadcaster- 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:
removeNotificationListenerin interfaceNotificationEmitter- Parameters:
listener- the listener to removefilter- the notification filterhandback- the handback object- Throws:
ListenerNotFoundException- if the listener was not previously added
-
getCompositeType
Returns the composite type used for JMX query statistics.- Returns:
- the composite type, or
nullif initialization failed
-
reset
Resets this interceptor for a new connection, registering JMX if applicable.- Overrides:
resetin classSlowQueryReport- Parameters:
parent- the connection poolcon- the pooled connection
-
poolClosed
Called when the connection pool is closed; deregisters JMX.- Overrides:
poolClosedin classSlowQueryReport- Parameters:
pool- the connection pool being closed
-
poolStarted
Called when the connection pool is started.- Overrides:
poolStartedin classSlowQueryReport- 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:
reportFailedQueryin classSlowQueryReport- Parameters:
query- the SQL queryargs- the query argumentsname- the connection pool namestart- the start time in millisecondst- the throwable that caused the failure- Returns:
- the formatted query string
-
notifyJmx
-
reportSlowQuery
Reports a slow query and sends a JMX notification if logging is enabled.- Overrides:
reportSlowQueryin classSlowQueryReport- Parameters:
query- the SQL queryargs- the query argumentsname- the connection pool namestart- the start time in millisecondsdelta- the elapsed time in milliseconds- Returns:
- the formatted query string
-
getPoolNames
JMX operation - return the names of all the pools- Returns:
- - all the names of pools that we have stored data for
-
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
JMX operation - returns all the queries we have collected.- Specified by:
getSlowQueriesCDin interfaceSlowQueryReportJmxMBean- 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 classpoolName- 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
Sets the interceptor properties, including the notifyPool flag.- Overrides:
setPropertiesin classSlowQueryReport- Parameters:
properties- the interceptor properties
-