From d67a4578b82be80fae6b59475261b6cb790a6bcf Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 1 Jun 2011 15:06:11 +0000 Subject: [PATCH] jmx support git-svn-id: http://code.alibabatech.com/svn/druid/trunk@231 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../java/com/alibaba/druid/proxy/DruidDriver.java | 14 ++++++++++++++ .../druid/proxy/jdbc/DataSourceProxyConfig.java | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java index aedf7707ea..f89ef69dbf 100644 --- a/src/main/java/com/alibaba/druid/proxy/DruidDriver.java +++ b/src/main/java/com/alibaba/druid/proxy/DruidDriver.java @@ -34,7 +34,9 @@ import com.alibaba.druid.proxy.config.DruidFilterConfigLoader; import com.alibaba.druid.proxy.jdbc.DataSourceProxy; import com.alibaba.druid.proxy.jdbc.DataSourceProxyConfig; import com.alibaba.druid.proxy.jdbc.DataSourceProxyImpl; +import com.alibaba.druid.stat.JdbcStatManager; import com.alibaba.druid.util.DruidLoaderUtils; +import com.alibaba.druid.util.JMXUtils; import com.alibaba.druid.util.JdbcUtils; /** @@ -52,6 +54,7 @@ public class DruidDriver implements Driver, DruidDriverMBean { public final static String DRIVER_PREFIX = "driver="; public final static String PASSWORD_CALLBACK_PREFIX = "passwordCallback="; public final static String NAME_PREFIX = "name="; + public final static String JMX_PREFIX = "jmx="; public final static String FILTERS_PREFIX = "filters="; private final AtomicLong connectCounter = new AtomicLong(0); @@ -168,6 +171,13 @@ public class DruidDriver implements Driver, DruidDriverMBean { config.setName(name); restUrl = restUrl.substring(pos + 1); } + + if (restUrl.startsWith(JMX_PREFIX)) { + int pos = restUrl.indexOf(':', JMX_PREFIX.length()); + String jmxOption = restUrl.substring(JMX_PREFIX.length(), pos); + config.setJmxOption(jmxOption); + restUrl = restUrl.substring(pos + 1); + } String rawUrl = restUrl; config.setRawUrl(rawUrl); @@ -192,6 +202,10 @@ public class DruidDriver implements Driver, DruidDriverMBean { for (Filter filter : config.getFilters()) { filter.init(newDataSource); } + + if (config.isJmxOption()) { + JMXUtils.register("com.alibaba.druid:type=JdbcStat", JdbcStatManager.getInstance()); + } } dataSource = dataSources.get(url); diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyConfig.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyConfig.java index 5350d95c81..081853989d 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyConfig.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyConfig.java @@ -32,6 +32,7 @@ public class DataSourceProxyConfig { private String url; private String rawDriverClassName; private String name; + private boolean jmx; private PasswordCallback passwordCallback; private NameCallback userCallback; @@ -40,6 +41,18 @@ public class DataSourceProxyConfig { public DataSourceProxyConfig(){ } + public boolean isJmxOption() { + return jmx; + } + + public void setJmxOption(boolean jmx) { + this.jmx = jmx; + } + + public void setJmxOption(String jmx) { + this.jmx = Boolean.parseBoolean(jmx); + } + public PasswordCallback getPasswordCallback() { return passwordCallback; }