From 7ae1e85e9bfec8faa9ec3eb46350bd4ff9ff7305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Wed, 14 Mar 2012 12:56:56 +0800 Subject: [PATCH] add druid driver jmx support --- .../com/alibaba/druid/proxy/DruidDriver.java | 28 +++++++++++++++++-- .../alibaba/druid/proxy/DruidDriverMBean.java | 2 ++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java index 2d30707eca..042f53982c 100644 --- a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java +++ b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.proxy; +import java.lang.management.ManagementFactory; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; @@ -30,6 +31,9 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Logger; +import javax.management.MBeanServer; +import javax.management.ObjectName; + import com.alibaba.druid.filter.Filter; import com.alibaba.druid.logging.Log; import com.alibaba.druid.logging.LogFactory; @@ -63,7 +67,7 @@ public class DruidDriver implements Driver, DruidDriverMBean { public final static String JMX_PREFIX = "jmx="; public final static String FILTERS_PREFIX = "filters="; - private final AtomicLong connectCounter = new AtomicLong(0); + private final AtomicLong connectCount = new AtomicLong(0); private String acceptPrefix = DEFAULT_PREFIX; @@ -71,6 +75,8 @@ public class DruidDriver implements Driver, DruidDriverMBean { private int minorVersion = 0; + private final static String MBEAN_NAME = "com.alibaba.druid:type=DruidDriver"; + static { registerDriver(instance); } @@ -79,6 +85,17 @@ public class DruidDriver implements Driver, DruidDriverMBean { try { DriverManager.registerDriver(driver); + try { + MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); + + ObjectName objectName = new ObjectName(MBEAN_NAME); + if (!mbeanServer.isRegistered(objectName)) { + mbeanServer.registerMBean(instance, objectName); + } + } catch (Exception ex) { + LOG.error("register druid-driver mbean error", ex); + } + return true; } catch (Exception e) { LOG.error("registerDriver error", e); @@ -118,7 +135,7 @@ public class DruidDriver implements Driver, DruidDriverMBean { return null; } - connectCounter.incrementAndGet(); + connectCount.incrementAndGet(); DataSourceProxyImpl dataSource = getDataSource(url, info); @@ -268,7 +285,7 @@ public class DruidDriver implements Driver, DruidDriverMBean { @Override public long getConnectCount() { - return connectCounter.get(); + return connectCount.get(); } public String getAcceptPrefix() { @@ -287,4 +304,9 @@ public class DruidDriver implements Driver, DruidDriverMBean { public Logger getParentLogger() throws SQLFeatureNotSupportedException { throw new SQLFeatureNotSupportedException(); } + + @Override + public void resetStat() { + connectCount.set(0); + } } diff --git a/src/main/java/com/alibaba/druid/proxy/DruidDriverMBean.java b/src/main/java/com/alibaba/druid/proxy/DruidDriverMBean.java index ed1ead4c2c..446c262525 100644 --- a/src/main/java/com/alibaba/druid/proxy/DruidDriverMBean.java +++ b/src/main/java/com/alibaba/druid/proxy/DruidDriverMBean.java @@ -21,6 +21,8 @@ package com.alibaba.druid.proxy; public interface DruidDriverMBean { long getConnectCount(); + + void resetStat(); String getAcceptPrefix();