From cf30e453501a0551589edf5c7e16d095e99208f1 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 31 May 2011 08:23:35 +0000 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9TraceFilter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@225 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/stat/JdbcTraceManager.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/alibaba/druid/stat/JdbcTraceManager.java b/src/main/java/com/alibaba/druid/stat/JdbcTraceManager.java index 8b8e8cb3dc..b434207ab5 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcTraceManager.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcTraceManager.java @@ -30,16 +30,31 @@ import com.alibaba.druid.filter.trace.TraceEventListener; public class JdbcTraceManager extends NotificationBroadcasterSupport implements JdbcTraceManagerMBean { - public final static Log LOG = LogFactory.getLog(JdbcTraceManager.class); + public final static Log LOG = LogFactory.getLog(JdbcTraceManager.class); - private boolean traceEnable = false; + private boolean traceEnable = false; - private final static JdbcTraceManager instance = new JdbcTraceManager(); + private final static JdbcTraceManager instance = new JdbcTraceManager(); - private final List eventListeners = new ArrayList(); + private final List eventListeners = new ArrayList(); - private final AtomicLong fireEventCount = new AtomicLong(); - private final AtomicLong skipEventCount = new AtomicLong(); + private final AtomicLong fireEventCount = new AtomicLong(); + private final AtomicLong skipEventCount = new AtomicLong(); + + private boolean notificationEnable = false; + private final NotificationTraceEventListener notificationListener = new NotificationTraceEventListener(); + + public boolean isNotificationEnable() { + return notificationEnable; + } + + public void setNotificationEnable(boolean notificationEnable) { + this.notificationEnable = notificationEnable; + } + + public NotificationTraceEventListener getNotificationListener() { + return notificationListener; + } public static JdbcTraceManager getInstance() { return instance; @@ -72,6 +87,10 @@ public class JdbcTraceManager extends NotificationBroadcasterSupport implements skipEventCount.incrementAndGet(); return; } + + if (isNotificationEnable()) { + notificationListener.fireEvent(event); + } for (TraceEventListener listener : this.eventListeners) { try { @@ -85,15 +104,19 @@ public class JdbcTraceManager extends NotificationBroadcasterSupport implements public List getEventListeners() { return eventListeners; } - + public class NotificationTraceEventListener implements TraceEventListener { + private long sequenceNumber = 0; + @Override public void fireEvent(TraceEvent event) { Notification notification = new Notification(event.getEventType(), null, sequenceNumber++); notification.setTimeStamp(event.getEventTime().getTime()); notification.setUserData(event.getContext()); + + sendNotification(notification); } - + } }