From fb20f175c9546e929aabe21b400ce033bd0e4d21 Mon Sep 17 00:00:00 2001 From: septer Date: Thu, 9 Aug 2012 10:34:35 +0800 Subject: [PATCH 1/3] test it. --- test.html | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test.html diff --git a/test.html b/test.html new file mode 100644 index 0000000000..e69de29bb2 From 9c284dc95fdcf430c38c530f60109a1d492d068f Mon Sep 17 00:00:00 2001 From: septer Date: Thu, 9 Aug 2012 13:05:28 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E9=87=8D=E6=9E=84DruidStatManagerFacade.java?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DruidDataSourceStatDefaultStrategy.java | 204 +++++++++++++ .../DruidDataSourceStatJNDIStatStrategy.java | 53 ++++ .../stat/DruidDataSourceStatStrategy.java | 22 ++ .../DruidDataSourceStatStrategyContext.java | 44 +++ .../druid/stat/DruidStatManagerFacade.java | 284 +++--------------- 5 files changed, 359 insertions(+), 248 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java new file mode 100644 index 0000000000..4e692646d8 --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java @@ -0,0 +1,204 @@ +package com.alibaba.druid.stat; + +import java.sql.Driver; +import java.sql.DriverManager; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.management.JMException; + +import com.alibaba.druid.VERSION; +import com.alibaba.druid.pool.DruidDataSource; + +public class DruidDataSourceStatDefaultStrategy implements DruidDataSourceStatStrategy { + + private Set getDruidDataSourceInstances() { + return DruidDataSourceStatManager.getDruidDataSourceInstances(); + } + + public void resetDataSourceStat() { + DruidDataSourceStatManager.getInstance().reset(); + } + + public void resetSqlStat() { + JdbcStatManager.getInstance().reset(); + } + + public void resetAll() { + resetSqlStat(); + resetDataSourceStat(); + } + + private JdbcSqlStat getSqlStatById(Integer id) { + + for (DruidDataSource ds : getDruidDataSourceInstances()) { + JdbcSqlStat sqlStat = ds.getDataSourceStat().getSqlStat(id); + if (sqlStat != null) + return sqlStat; + } + return null; + } + + public Map getDataSourceStatData(Integer id) { + if (id == null) { + return null; + } + DruidDataSource datasource = getDruidDataSourceById(id); + return datasource == null ? null : dataSourceToMapData(datasource); + } + + private DruidDataSource getDruidDataSourceById(Integer identity) { + + if (identity == null) { + return null; + } + + for (DruidDataSource datasource : getDruidDataSourceInstances()) { + if (System.identityHashCode(datasource) == identity) { + return datasource; + } + } + return null; + } + + public List> getSqlStatDataList() { + List> result = new ArrayList>(); + for (DruidDataSource datasource : getDruidDataSourceInstances()) { + for (JdbcSqlStat sqlStat : datasource.getDataSourceStat().getSqlStatMap().values()) { + if (sqlStat.getExecuteCount() == 0 && sqlStat.getRunningCount() == 0) { + continue; + } + + result.add(getSqlStatData(sqlStat)); + } + } + return result; + } + + public Map getSqlStatData(Integer id) { + if (id == null) { + return null; + } + JdbcSqlStat sqlStat = getSqlStatById(id); + return sqlStat == null ? null : getSqlStatData(sqlStat); + } + + private Map getSqlStatData(JdbcSqlStat sqlStat) { + try { + return sqlStat.getData(); + } catch (JMException e) { + } + return null; + } + + public List getDataSourceStatList() { + List datasourceList = new ArrayList(); + for (DruidDataSource dataSource : getDruidDataSourceInstances()) { + datasourceList.add(dataSourceToMapData(dataSource)); + } + return datasourceList; + } + + public Map returnJSONBasicStat() { + Map dataMap = new LinkedHashMap(); + dataMap.put("Version", VERSION.getVersionNumber()); + dataMap.put("Drivers", getDriversData()); + return dataMap; + } + + private List getDriversData() { + List drivers = new ArrayList(); + for (Enumeration e = DriverManager.getDrivers(); e.hasMoreElements();) { + Driver driver = e.nextElement(); + drivers.add(driver.getClass().getName()); + } + return drivers; + } + + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + DruidDataSource datasource = getDruidDataSourceById(id); + if (datasource == null) + return null; + return datasource.getPoolingConnectionInfo(); + } + + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + DruidDataSource datasource = getDruidDataSourceById(id); + if (datasource == null || !datasource.isRemoveAbandoned()) + return null; + + return datasource.getActiveConnectionStackTrace(); + } + + private Map dataSourceToMapData(DruidDataSource dataSource) { + + Map dataMap = new LinkedHashMap(); + dataMap.put("Identity", System.identityHashCode(dataSource)); + dataMap.put("Name", dataSource.getName()); + dataMap.put("DbType", dataSource.getDbType()); + dataMap.put("DriverClassName", dataSource.getDriverClassName()); + + dataMap.put("URL", dataSource.getUrl()); + dataMap.put("UserName", dataSource.getUsername()); + dataMap.put("FilterClassNames", dataSource.getFilterClassNames()); + + dataMap.put("WaitThreadCount", dataSource.getWaitThreadCount()); + dataMap.put("NotEmptyWaitCount", dataSource.getNotEmptyWaitCount()); + dataMap.put("NotEmptyWaitMillis", dataSource.getNotEmptyWaitMillis()); + + dataMap.put("PoolingCount", dataSource.getPoolingCount()); + dataMap.put("PoolingPeak", dataSource.getPoolingPeak()); + dataMap.put("PoolingPeakTime", dataSource.getPoolingPeakTime() == null ? null : dataSource.getPoolingPeakTime().toString()); + + dataMap.put("ActiveCount", dataSource.getActiveCount()); + dataMap.put("ActivePeak", dataSource.getActivePeak()); + dataMap.put("ActivePeakTime", dataSource.getActivePeakTime() == null ? null : dataSource.getActivePeakTime().toString()); + + dataMap.put("InitialSize", dataSource.getInitialSize()); + dataMap.put("MinIdle", dataSource.getMinIdle()); + dataMap.put("MaxActive", dataSource.getMaxActive()); + + dataMap.put("QueryTimeout", dataSource.getQueryTimeout()); + dataMap.put("TransactionQueryTimeout", dataSource.getTransactionQueryTimeout()); + dataMap.put("LoginTimeout", dataSource.getLoginTimeout()); + dataMap.put("ValidConnectionCheckerClassName", dataSource.getValidConnectionCheckerClassName()); + dataMap.put("ExceptionSorterClassName", dataSource.getExceptionSorterClassName()); + + dataMap.put("TestOnBorrow", dataSource.isTestOnBorrow()); + dataMap.put("TestOnReturn", dataSource.isTestOnReturn()); + dataMap.put("TestWhileIdle", dataSource.isTestWhileIdle()); + + dataMap.put("DefaultAutoCommit", dataSource.isDefaultAutoCommit()); + dataMap.put("DefaultReadOnly", dataSource.isDefaultAutoCommit()); + dataMap.put("DefaultTransactionIsolation", dataSource.getDefaultTransactionIsolation()); + + dataMap.put("LogicConnectCount", dataSource.getConnectCount()); + dataMap.put("LogicCloseCount", dataSource.getCloseCount()); + dataMap.put("LogicConnectErrorCount", dataSource.getConnectErrorCount()); + + dataMap.put("PhysicalConnectCount", dataSource.getCreateCount()); + dataMap.put("PhysicalCloseCount", dataSource.getDestroyCount()); + dataMap.put("PhysicalConnectErrorCount", dataSource.getCreateErrorCount()); + + dataMap.put("ExecuteCount", dataSource.getExecuteCount()); + dataMap.put("ErrorCount", dataSource.getErrorCount()); + dataMap.put("CommitCount", dataSource.getCommitCount()); + dataMap.put("RollbackCount", dataSource.getRollbackCount()); + + dataMap.put("PSCacheAccessCount", dataSource.getCachedPreparedStatementAccessCount()); + dataMap.put("PSCacheHitCount", dataSource.getCachedPreparedStatementHitCount()); + dataMap.put("PSCacheMissCount", dataSource.getCachedPreparedStatementMissCount()); + + dataMap.put("StartTransactionCount", dataSource.getStartTransactionCount()); + dataMap.put("TransactionHistogram", dataSource.getTransactionHistogramValues()); + + dataMap.put("ConnectionHoldTimeHistogram", dataSource.getDataSourceStat().getConnectionHoldHistogram().toArray()); + dataMap.put("RemoveAbandoned", dataSource.isRemoveAbandoned()); + + return dataMap; + } +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java new file mode 100644 index 0000000000..d8026865f4 --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java @@ -0,0 +1,53 @@ +package com.alibaba.druid.stat; + +import java.util.List; +import java.util.Map; + +import com.alibaba.druid.util.ReflectionUtils; + +public class DruidDataSourceStatJNDIStatStrategy implements DruidDataSourceStatStrategy{ + + private Object getStrategyB() { + return ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatDefaultStrategy"); + } + + @SuppressWarnings("unchecked") + public Map getSqlStatData(Integer id) { + return (Map) ReflectionUtils.callObjectMethod(getStrategyB(), "getSqlStatData", id); + } + + @SuppressWarnings("unchecked") + public List> getSqlStatDataList() { + return (List>) ReflectionUtils.callObjectMethod(getStrategyB(), "getSqlStatDataList"); + } + + @SuppressWarnings("unchecked") + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + return (List) ReflectionUtils.callObjectMethod(getStrategyB(), "getActiveConnectionStackTraceByDataSourceId", id); + } + + @SuppressWarnings("unchecked") + public Map returnJSONBasicStat() { + return (Map) ReflectionUtils.callObjectMethod(getStrategyB(), "returnJSONBasicStat"); + } + + @SuppressWarnings("unchecked") + public List getDataSourceStatList() { + return (List) ReflectionUtils.callObjectMethod(getStrategyB(), "getDataSourceStatList"); + } + + @SuppressWarnings("unchecked") + public Map getDataSourceStatData(Integer id) { + return (Map) ReflectionUtils.callObjectMethod(getStrategyB(), "getDataSourceStatData", id); + } + + @SuppressWarnings("unchecked") + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + return (List>) ReflectionUtils.callObjectMethod(getStrategyB(), "getPoolingConnectionInfoByDataSourceId", id); + } + + public void resetAll() { + ReflectionUtils.callObjectMethod(getStrategyB(), "resetAll"); + } + +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java new file mode 100644 index 0000000000..aedb9279cf --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.stat; + +import java.util.List; +import java.util.Map; + +public interface DruidDataSourceStatStrategy { + public Map getSqlStatData(Integer id); + + public List> getSqlStatDataList(); + + public List getActiveConnectionStackTraceByDataSourceId(Integer id); + + public Map returnJSONBasicStat(); + + public List getDataSourceStatList(); + + public Map getDataSourceStatData(Integer id); + + public List> getPoolingConnectionInfoByDataSourceId(Integer id); + + public void resetAll(); +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java new file mode 100644 index 0000000000..4c02900eb8 --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java @@ -0,0 +1,44 @@ +package com.alibaba.druid.stat; + +import java.util.List; +import java.util.Map; + +public class DruidDataSourceStatStrategyContext { + private DruidDataSourceStatStrategy druidDataSourceStatStrategy; + + public DruidDataSourceStatStrategyContext(DruidDataSourceStatStrategy druidDataSourceStatStrategy) { + this.druidDataSourceStatStrategy = druidDataSourceStatStrategy; + } + + public Map getSqlStatData(Integer id) { + return druidDataSourceStatStrategy.getSqlStatData(id); + } + + public List> getSqlStatDataList() { + return druidDataSourceStatStrategy.getSqlStatDataList(); + } + + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + return druidDataSourceStatStrategy.getActiveConnectionStackTraceByDataSourceId(id); + } + + public Map returnJSONBasicStat() { + return druidDataSourceStatStrategy.returnJSONBasicStat(); + } + + public List getDataSourceStatList() { + return druidDataSourceStatStrategy.getDataSourceStatList(); + } + + public Map getDataSourceStatData(Integer id) { + return druidDataSourceStatStrategy.getDataSourceStatData(id); + } + + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + return druidDataSourceStatStrategy.getPoolingConnectionInfoByDataSourceId(id); + } + + public void resetAll() { + druidDataSourceStatStrategy.resetAll(); + } +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java index 01f71dfe6e..1b14851624 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java +++ b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java @@ -1,20 +1,7 @@ package com.alibaba.druid.stat; -import java.sql.Driver; -import java.sql.DriverManager; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import javax.management.JMException; - -import com.alibaba.druid.VERSION; -import com.alibaba.druid.pool.DruidDataSource; -import com.alibaba.druid.util.ReflectionUtils; /** * 监控相关的对外数据暴露 @@ -28,252 +15,53 @@ import com.alibaba.druid.util.ReflectionUtils; */ public class DruidStatManagerFacade { - private final static DruidStatManagerFacade instance = new DruidStatManagerFacade(); + private final static DruidStatManagerFacade instance = new DruidStatManagerFacade(); - private boolean inited = false; + private static DruidDataSourceStatStrategyContext ctx = null; - protected final ReentrantLock lock = new ReentrantLock(true); + private static DruidDataSourceStatStrategy strategy = null; - private Object druidDataSourceStatManager; - private Object jdbcStatManager; + static { + strategy = new DruidDataSourceStatJNDIStatStrategy(); + ctx = new DruidDataSourceStatStrategyContext(strategy); + } - // TODO shoud be Object - private Set datasourceInstances; + private DruidStatManagerFacade() { + } - private DruidStatManagerFacade() { - } + public static DruidStatManagerFacade getInstance() { + return instance; + } - public static DruidStatManagerFacade getInstance() { - return instance; - } + public Map getSqlStatData(Integer id) { + return ctx.getSqlStatData(id); + } - private void init() { - if (inited) { - return; - } + public List> getSqlStatDataList() { + return ctx.getSqlStatDataList(); + } - lock.lock(); - try { - if (inited) { - return; - } + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + return ctx.getActiveConnectionStackTraceByDataSourceId(id); + } - initByClassLoader(); + public Map returnJSONBasicStat() { + return ctx.returnJSONBasicStat(); + } - inited = true; - } finally { - lock.unlock(); - } - } + public List getDataSourceStatList() { + return ctx.getDataSourceStatList(); + } - @SuppressWarnings("unchecked") - private void initByClassLoader() { - Class druidDataSourceStatManagerClass = ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatManager"); + public Map getDataSourceStatData(Integer id) { + return ctx.getDataSourceStatData(id); + } - druidDataSourceStatManager = (DruidDataSourceStatManager) ReflectionUtils.callStaticMethod(druidDataSourceStatManagerClass, - "getInstance"); - datasourceInstances = (Set) ReflectionUtils.callStaticMethod(druidDataSourceStatManagerClass, - "getDruidDataSourceInstances"); + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + return ctx.getPoolingConnectionInfoByDataSourceId(id); + } - Class jdbcStatManagerClass = ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.JdbcStatManager"); - jdbcStatManager = (JdbcStatManager) ReflectionUtils.callStaticMethod(jdbcStatManagerClass, "getInstance"); - - } - - private Set getDruidDataSourceInstances() { - init(); - return datasourceInstances; - } - - public void resetDataSourceStat() { - init(); - ReflectionUtils.callObjectMethod(druidDataSourceStatManager, "reset"); - } - - public void resetSqlStat() { - init(); - ReflectionUtils.callObjectMethod(jdbcStatManager, "reset"); - } - - public void resetAll() { - init(); - resetSqlStat(); - resetDataSourceStat(); - } - - private JdbcSqlStat getSqlStatById(Integer id) { - - for (DruidDataSource ds : getDruidDataSourceInstances()) { - JdbcSqlStat sqlStat = ds.getDataSourceStat().getSqlStat(id); - if (sqlStat != null) return sqlStat; - } - return null; - } - - public Map getDataSourceStatData(Integer id) { - init(); - if (id == null) { - return null; - } - DruidDataSource datasource = getDruidDataSourceById(id); - return datasource == null ? null : dataSourceToMapData(datasource); - } - - private DruidDataSource getDruidDataSourceById(Integer identity) { - - if (identity == null) { - return null; - } - - for (DruidDataSource datasource : getDruidDataSourceInstances()) { - if (System.identityHashCode(datasource) == identity) { - return datasource; - } - } - return null; - } - - public List> getSqlStatDataList() { - init(); - List> result = new ArrayList>(); - for (DruidDataSource datasource : getDruidDataSourceInstances()) { - for (JdbcSqlStat sqlStat : datasource.getDataSourceStat().getSqlStatMap().values()) { - if (sqlStat.getExecuteCount() == 0 && sqlStat.getRunningCount() == 0) { - continue; - } - - result.add(getSqlStatData(sqlStat)); - } - } - return result; - } - - public Map getSqlStatData(Integer id) { - init(); - if (id == null) { - return null; - } - JdbcSqlStat sqlStat = getSqlStatById(id); - return sqlStat == null ? null : getSqlStatData(sqlStat); - } - - private Map getSqlStatData(JdbcSqlStat sqlStat) { - try { - return sqlStat.getData(); - } catch (JMException e) { - } - return null; - } - - public List getDataSourceStatList() { - init(); - List datasourceList = new ArrayList(); - for (DruidDataSource dataSource : getDruidDataSourceInstances()) { - datasourceList.add(dataSourceToMapData(dataSource)); - } - return datasourceList; - } - - public Map returnJSONBasicStat() { - init(); - Map dataMap = new LinkedHashMap(); - dataMap.put("Version", VERSION.getVersionNumber()); - dataMap.put("Drivers", getDriversData()); - return dataMap; - } - - private List getDriversData() { - List drivers = new ArrayList(); - for (Enumeration e = DriverManager.getDrivers(); e.hasMoreElements();) { - Driver driver = e.nextElement(); - drivers.add(driver.getClass().getName()); - } - return drivers; - } - - public List> getPoolingConnectionInfoByDataSourceId(Integer id) { - init(); - DruidDataSource datasource = getDruidDataSourceById(id); - if (datasource == null) return null; - return datasource.getPoolingConnectionInfo(); - } - - public List getActiveConnectionStackTraceByDataSourceId(Integer id) { - init(); - DruidDataSource datasource = getDruidDataSourceById(id); - if (datasource == null || !datasource.isRemoveAbandoned()) return null; - - return datasource.getActiveConnectionStackTrace(); - } - - private Map dataSourceToMapData(DruidDataSource dataSource) { - - Map dataMap = new LinkedHashMap(); - dataMap.put("Identity", System.identityHashCode(dataSource)); - dataMap.put("Name", dataSource.getName()); - dataMap.put("DbType", dataSource.getDbType()); - dataMap.put("DriverClassName", dataSource.getDriverClassName()); - - dataMap.put("URL", dataSource.getUrl()); - dataMap.put("UserName", dataSource.getUsername()); - dataMap.put("FilterClassNames", dataSource.getFilterClassNames()); - - dataMap.put("WaitThreadCount", dataSource.getWaitThreadCount()); - dataMap.put("NotEmptyWaitCount", dataSource.getNotEmptyWaitCount()); - dataMap.put("NotEmptyWaitMillis", dataSource.getNotEmptyWaitMillis()); - - dataMap.put("PoolingCount", dataSource.getPoolingCount()); - dataMap.put("PoolingPeak", dataSource.getPoolingPeak()); - dataMap.put("PoolingPeakTime", - dataSource.getPoolingPeakTime() == null ? null : dataSource.getPoolingPeakTime().toString()); - - dataMap.put("ActiveCount", dataSource.getActiveCount()); - dataMap.put("ActivePeak", dataSource.getActivePeak()); - dataMap.put("ActivePeakTime", - dataSource.getActivePeakTime() == null ? null : dataSource.getActivePeakTime().toString()); - - dataMap.put("InitialSize", dataSource.getInitialSize()); - dataMap.put("MinIdle", dataSource.getMinIdle()); - dataMap.put("MaxActive", dataSource.getMaxActive()); - - dataMap.put("QueryTimeout", dataSource.getQueryTimeout()); - dataMap.put("TransactionQueryTimeout", dataSource.getTransactionQueryTimeout()); - dataMap.put("LoginTimeout", dataSource.getLoginTimeout()); - dataMap.put("ValidConnectionCheckerClassName", dataSource.getValidConnectionCheckerClassName()); - dataMap.put("ExceptionSorterClassName", dataSource.getExceptionSorterClassName()); - - dataMap.put("TestOnBorrow", dataSource.isTestOnBorrow()); - dataMap.put("TestOnReturn", dataSource.isTestOnReturn()); - dataMap.put("TestWhileIdle", dataSource.isTestWhileIdle()); - - dataMap.put("DefaultAutoCommit", dataSource.isDefaultAutoCommit()); - dataMap.put("DefaultReadOnly", dataSource.isDefaultAutoCommit()); - dataMap.put("DefaultTransactionIsolation", dataSource.getDefaultTransactionIsolation()); - - dataMap.put("LogicConnectCount", dataSource.getConnectCount()); - dataMap.put("LogicCloseCount", dataSource.getCloseCount()); - dataMap.put("LogicConnectErrorCount", dataSource.getConnectErrorCount()); - - dataMap.put("PhysicalConnectCount", dataSource.getCreateCount()); - dataMap.put("PhysicalCloseCount", dataSource.getDestroyCount()); - dataMap.put("PhysicalConnectErrorCount", dataSource.getCreateErrorCount()); - - dataMap.put("ExecuteCount", dataSource.getExecuteCount()); - dataMap.put("ErrorCount", dataSource.getErrorCount()); - dataMap.put("CommitCount", dataSource.getCommitCount()); - dataMap.put("RollbackCount", dataSource.getRollbackCount()); - - dataMap.put("PSCacheAccessCount", dataSource.getCachedPreparedStatementAccessCount()); - dataMap.put("PSCacheHitCount", dataSource.getCachedPreparedStatementHitCount()); - dataMap.put("PSCacheMissCount", dataSource.getCachedPreparedStatementMissCount()); - - dataMap.put("StartTransactionCount", dataSource.getStartTransactionCount()); - dataMap.put("TransactionHistogram", dataSource.getTransactionHistogramValues()); - - dataMap.put("ConnectionHoldTimeHistogram", - dataSource.getDataSourceStat().getConnectionHoldHistogram().toArray()); - dataMap.put("RemoveAbandoned", dataSource.isRemoveAbandoned()); - - return dataMap; - } + public void resetAll() { + ctx.resetAll(); + } } From 26bd63cfb2a03e7ad1aa4658d9f38b0ac4b40067 Mon Sep 17 00:00:00 2001 From: septer Date: Thu, 9 Aug 2012 13:05:28 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E9=87=8D=E6=9E=84DruidStatManagerFacade.java?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DruidDataSourceStatDefaultStrategy.java | 204 +++++++++++++ .../DruidDataSourceStatJNDIStatStrategy.java | 53 ++++ .../stat/DruidDataSourceStatStrategy.java | 22 ++ .../DruidDataSourceStatStrategyContext.java | 44 +++ .../druid/stat/DruidStatManagerFacade.java | 284 +++--------------- .../alibaba/druid/util/ReflectionUtils.java | 67 ++++- 6 files changed, 411 insertions(+), 263 deletions(-) create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java create mode 100644 src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java new file mode 100644 index 0000000000..4e692646d8 --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatDefaultStrategy.java @@ -0,0 +1,204 @@ +package com.alibaba.druid.stat; + +import java.sql.Driver; +import java.sql.DriverManager; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.management.JMException; + +import com.alibaba.druid.VERSION; +import com.alibaba.druid.pool.DruidDataSource; + +public class DruidDataSourceStatDefaultStrategy implements DruidDataSourceStatStrategy { + + private Set getDruidDataSourceInstances() { + return DruidDataSourceStatManager.getDruidDataSourceInstances(); + } + + public void resetDataSourceStat() { + DruidDataSourceStatManager.getInstance().reset(); + } + + public void resetSqlStat() { + JdbcStatManager.getInstance().reset(); + } + + public void resetAll() { + resetSqlStat(); + resetDataSourceStat(); + } + + private JdbcSqlStat getSqlStatById(Integer id) { + + for (DruidDataSource ds : getDruidDataSourceInstances()) { + JdbcSqlStat sqlStat = ds.getDataSourceStat().getSqlStat(id); + if (sqlStat != null) + return sqlStat; + } + return null; + } + + public Map getDataSourceStatData(Integer id) { + if (id == null) { + return null; + } + DruidDataSource datasource = getDruidDataSourceById(id); + return datasource == null ? null : dataSourceToMapData(datasource); + } + + private DruidDataSource getDruidDataSourceById(Integer identity) { + + if (identity == null) { + return null; + } + + for (DruidDataSource datasource : getDruidDataSourceInstances()) { + if (System.identityHashCode(datasource) == identity) { + return datasource; + } + } + return null; + } + + public List> getSqlStatDataList() { + List> result = new ArrayList>(); + for (DruidDataSource datasource : getDruidDataSourceInstances()) { + for (JdbcSqlStat sqlStat : datasource.getDataSourceStat().getSqlStatMap().values()) { + if (sqlStat.getExecuteCount() == 0 && sqlStat.getRunningCount() == 0) { + continue; + } + + result.add(getSqlStatData(sqlStat)); + } + } + return result; + } + + public Map getSqlStatData(Integer id) { + if (id == null) { + return null; + } + JdbcSqlStat sqlStat = getSqlStatById(id); + return sqlStat == null ? null : getSqlStatData(sqlStat); + } + + private Map getSqlStatData(JdbcSqlStat sqlStat) { + try { + return sqlStat.getData(); + } catch (JMException e) { + } + return null; + } + + public List getDataSourceStatList() { + List datasourceList = new ArrayList(); + for (DruidDataSource dataSource : getDruidDataSourceInstances()) { + datasourceList.add(dataSourceToMapData(dataSource)); + } + return datasourceList; + } + + public Map returnJSONBasicStat() { + Map dataMap = new LinkedHashMap(); + dataMap.put("Version", VERSION.getVersionNumber()); + dataMap.put("Drivers", getDriversData()); + return dataMap; + } + + private List getDriversData() { + List drivers = new ArrayList(); + for (Enumeration e = DriverManager.getDrivers(); e.hasMoreElements();) { + Driver driver = e.nextElement(); + drivers.add(driver.getClass().getName()); + } + return drivers; + } + + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + DruidDataSource datasource = getDruidDataSourceById(id); + if (datasource == null) + return null; + return datasource.getPoolingConnectionInfo(); + } + + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + DruidDataSource datasource = getDruidDataSourceById(id); + if (datasource == null || !datasource.isRemoveAbandoned()) + return null; + + return datasource.getActiveConnectionStackTrace(); + } + + private Map dataSourceToMapData(DruidDataSource dataSource) { + + Map dataMap = new LinkedHashMap(); + dataMap.put("Identity", System.identityHashCode(dataSource)); + dataMap.put("Name", dataSource.getName()); + dataMap.put("DbType", dataSource.getDbType()); + dataMap.put("DriverClassName", dataSource.getDriverClassName()); + + dataMap.put("URL", dataSource.getUrl()); + dataMap.put("UserName", dataSource.getUsername()); + dataMap.put("FilterClassNames", dataSource.getFilterClassNames()); + + dataMap.put("WaitThreadCount", dataSource.getWaitThreadCount()); + dataMap.put("NotEmptyWaitCount", dataSource.getNotEmptyWaitCount()); + dataMap.put("NotEmptyWaitMillis", dataSource.getNotEmptyWaitMillis()); + + dataMap.put("PoolingCount", dataSource.getPoolingCount()); + dataMap.put("PoolingPeak", dataSource.getPoolingPeak()); + dataMap.put("PoolingPeakTime", dataSource.getPoolingPeakTime() == null ? null : dataSource.getPoolingPeakTime().toString()); + + dataMap.put("ActiveCount", dataSource.getActiveCount()); + dataMap.put("ActivePeak", dataSource.getActivePeak()); + dataMap.put("ActivePeakTime", dataSource.getActivePeakTime() == null ? null : dataSource.getActivePeakTime().toString()); + + dataMap.put("InitialSize", dataSource.getInitialSize()); + dataMap.put("MinIdle", dataSource.getMinIdle()); + dataMap.put("MaxActive", dataSource.getMaxActive()); + + dataMap.put("QueryTimeout", dataSource.getQueryTimeout()); + dataMap.put("TransactionQueryTimeout", dataSource.getTransactionQueryTimeout()); + dataMap.put("LoginTimeout", dataSource.getLoginTimeout()); + dataMap.put("ValidConnectionCheckerClassName", dataSource.getValidConnectionCheckerClassName()); + dataMap.put("ExceptionSorterClassName", dataSource.getExceptionSorterClassName()); + + dataMap.put("TestOnBorrow", dataSource.isTestOnBorrow()); + dataMap.put("TestOnReturn", dataSource.isTestOnReturn()); + dataMap.put("TestWhileIdle", dataSource.isTestWhileIdle()); + + dataMap.put("DefaultAutoCommit", dataSource.isDefaultAutoCommit()); + dataMap.put("DefaultReadOnly", dataSource.isDefaultAutoCommit()); + dataMap.put("DefaultTransactionIsolation", dataSource.getDefaultTransactionIsolation()); + + dataMap.put("LogicConnectCount", dataSource.getConnectCount()); + dataMap.put("LogicCloseCount", dataSource.getCloseCount()); + dataMap.put("LogicConnectErrorCount", dataSource.getConnectErrorCount()); + + dataMap.put("PhysicalConnectCount", dataSource.getCreateCount()); + dataMap.put("PhysicalCloseCount", dataSource.getDestroyCount()); + dataMap.put("PhysicalConnectErrorCount", dataSource.getCreateErrorCount()); + + dataMap.put("ExecuteCount", dataSource.getExecuteCount()); + dataMap.put("ErrorCount", dataSource.getErrorCount()); + dataMap.put("CommitCount", dataSource.getCommitCount()); + dataMap.put("RollbackCount", dataSource.getRollbackCount()); + + dataMap.put("PSCacheAccessCount", dataSource.getCachedPreparedStatementAccessCount()); + dataMap.put("PSCacheHitCount", dataSource.getCachedPreparedStatementHitCount()); + dataMap.put("PSCacheMissCount", dataSource.getCachedPreparedStatementMissCount()); + + dataMap.put("StartTransactionCount", dataSource.getStartTransactionCount()); + dataMap.put("TransactionHistogram", dataSource.getTransactionHistogramValues()); + + dataMap.put("ConnectionHoldTimeHistogram", dataSource.getDataSourceStat().getConnectionHoldHistogram().toArray()); + dataMap.put("RemoveAbandoned", dataSource.isRemoveAbandoned()); + + return dataMap; + } +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java new file mode 100644 index 0000000000..d8026865f4 --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatJNDIStatStrategy.java @@ -0,0 +1,53 @@ +package com.alibaba.druid.stat; + +import java.util.List; +import java.util.Map; + +import com.alibaba.druid.util.ReflectionUtils; + +public class DruidDataSourceStatJNDIStatStrategy implements DruidDataSourceStatStrategy{ + + private Object getStrategyB() { + return ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatDefaultStrategy"); + } + + @SuppressWarnings("unchecked") + public Map getSqlStatData(Integer id) { + return (Map) ReflectionUtils.callObjectMethod(getStrategyB(), "getSqlStatData", id); + } + + @SuppressWarnings("unchecked") + public List> getSqlStatDataList() { + return (List>) ReflectionUtils.callObjectMethod(getStrategyB(), "getSqlStatDataList"); + } + + @SuppressWarnings("unchecked") + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + return (List) ReflectionUtils.callObjectMethod(getStrategyB(), "getActiveConnectionStackTraceByDataSourceId", id); + } + + @SuppressWarnings("unchecked") + public Map returnJSONBasicStat() { + return (Map) ReflectionUtils.callObjectMethod(getStrategyB(), "returnJSONBasicStat"); + } + + @SuppressWarnings("unchecked") + public List getDataSourceStatList() { + return (List) ReflectionUtils.callObjectMethod(getStrategyB(), "getDataSourceStatList"); + } + + @SuppressWarnings("unchecked") + public Map getDataSourceStatData(Integer id) { + return (Map) ReflectionUtils.callObjectMethod(getStrategyB(), "getDataSourceStatData", id); + } + + @SuppressWarnings("unchecked") + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + return (List>) ReflectionUtils.callObjectMethod(getStrategyB(), "getPoolingConnectionInfoByDataSourceId", id); + } + + public void resetAll() { + ReflectionUtils.callObjectMethod(getStrategyB(), "resetAll"); + } + +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java new file mode 100644 index 0000000000..aedb9279cf --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategy.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.stat; + +import java.util.List; +import java.util.Map; + +public interface DruidDataSourceStatStrategy { + public Map getSqlStatData(Integer id); + + public List> getSqlStatDataList(); + + public List getActiveConnectionStackTraceByDataSourceId(Integer id); + + public Map returnJSONBasicStat(); + + public List getDataSourceStatList(); + + public Map getDataSourceStatData(Integer id); + + public List> getPoolingConnectionInfoByDataSourceId(Integer id); + + public void resetAll(); +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java new file mode 100644 index 0000000000..4c02900eb8 --- /dev/null +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatStrategyContext.java @@ -0,0 +1,44 @@ +package com.alibaba.druid.stat; + +import java.util.List; +import java.util.Map; + +public class DruidDataSourceStatStrategyContext { + private DruidDataSourceStatStrategy druidDataSourceStatStrategy; + + public DruidDataSourceStatStrategyContext(DruidDataSourceStatStrategy druidDataSourceStatStrategy) { + this.druidDataSourceStatStrategy = druidDataSourceStatStrategy; + } + + public Map getSqlStatData(Integer id) { + return druidDataSourceStatStrategy.getSqlStatData(id); + } + + public List> getSqlStatDataList() { + return druidDataSourceStatStrategy.getSqlStatDataList(); + } + + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + return druidDataSourceStatStrategy.getActiveConnectionStackTraceByDataSourceId(id); + } + + public Map returnJSONBasicStat() { + return druidDataSourceStatStrategy.returnJSONBasicStat(); + } + + public List getDataSourceStatList() { + return druidDataSourceStatStrategy.getDataSourceStatList(); + } + + public Map getDataSourceStatData(Integer id) { + return druidDataSourceStatStrategy.getDataSourceStatData(id); + } + + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + return druidDataSourceStatStrategy.getPoolingConnectionInfoByDataSourceId(id); + } + + public void resetAll() { + druidDataSourceStatStrategy.resetAll(); + } +} diff --git a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java index 01f71dfe6e..1b14851624 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java +++ b/src/main/java/com/alibaba/druid/stat/DruidStatManagerFacade.java @@ -1,20 +1,7 @@ package com.alibaba.druid.stat; -import java.sql.Driver; -import java.sql.DriverManager; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.concurrent.locks.ReentrantLock; - -import javax.management.JMException; - -import com.alibaba.druid.VERSION; -import com.alibaba.druid.pool.DruidDataSource; -import com.alibaba.druid.util.ReflectionUtils; /** * 监控相关的对外数据暴露 @@ -28,252 +15,53 @@ import com.alibaba.druid.util.ReflectionUtils; */ public class DruidStatManagerFacade { - private final static DruidStatManagerFacade instance = new DruidStatManagerFacade(); + private final static DruidStatManagerFacade instance = new DruidStatManagerFacade(); - private boolean inited = false; + private static DruidDataSourceStatStrategyContext ctx = null; - protected final ReentrantLock lock = new ReentrantLock(true); + private static DruidDataSourceStatStrategy strategy = null; - private Object druidDataSourceStatManager; - private Object jdbcStatManager; + static { + strategy = new DruidDataSourceStatJNDIStatStrategy(); + ctx = new DruidDataSourceStatStrategyContext(strategy); + } - // TODO shoud be Object - private Set datasourceInstances; + private DruidStatManagerFacade() { + } - private DruidStatManagerFacade() { - } + public static DruidStatManagerFacade getInstance() { + return instance; + } - public static DruidStatManagerFacade getInstance() { - return instance; - } + public Map getSqlStatData(Integer id) { + return ctx.getSqlStatData(id); + } - private void init() { - if (inited) { - return; - } + public List> getSqlStatDataList() { + return ctx.getSqlStatDataList(); + } - lock.lock(); - try { - if (inited) { - return; - } + public List getActiveConnectionStackTraceByDataSourceId(Integer id) { + return ctx.getActiveConnectionStackTraceByDataSourceId(id); + } - initByClassLoader(); + public Map returnJSONBasicStat() { + return ctx.returnJSONBasicStat(); + } - inited = true; - } finally { - lock.unlock(); - } - } + public List getDataSourceStatList() { + return ctx.getDataSourceStatList(); + } - @SuppressWarnings("unchecked") - private void initByClassLoader() { - Class druidDataSourceStatManagerClass = ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.DruidDataSourceStatManager"); + public Map getDataSourceStatData(Integer id) { + return ctx.getDataSourceStatData(id); + } - druidDataSourceStatManager = (DruidDataSourceStatManager) ReflectionUtils.callStaticMethod(druidDataSourceStatManagerClass, - "getInstance"); - datasourceInstances = (Set) ReflectionUtils.callStaticMethod(druidDataSourceStatManagerClass, - "getDruidDataSourceInstances"); + public List> getPoolingConnectionInfoByDataSourceId(Integer id) { + return ctx.getPoolingConnectionInfoByDataSourceId(id); + } - Class jdbcStatManagerClass = ReflectionUtils.getClassFromWebContainerOrCurrentClassLoader("com.alibaba.druid.stat.JdbcStatManager"); - jdbcStatManager = (JdbcStatManager) ReflectionUtils.callStaticMethod(jdbcStatManagerClass, "getInstance"); - - } - - private Set getDruidDataSourceInstances() { - init(); - return datasourceInstances; - } - - public void resetDataSourceStat() { - init(); - ReflectionUtils.callObjectMethod(druidDataSourceStatManager, "reset"); - } - - public void resetSqlStat() { - init(); - ReflectionUtils.callObjectMethod(jdbcStatManager, "reset"); - } - - public void resetAll() { - init(); - resetSqlStat(); - resetDataSourceStat(); - } - - private JdbcSqlStat getSqlStatById(Integer id) { - - for (DruidDataSource ds : getDruidDataSourceInstances()) { - JdbcSqlStat sqlStat = ds.getDataSourceStat().getSqlStat(id); - if (sqlStat != null) return sqlStat; - } - return null; - } - - public Map getDataSourceStatData(Integer id) { - init(); - if (id == null) { - return null; - } - DruidDataSource datasource = getDruidDataSourceById(id); - return datasource == null ? null : dataSourceToMapData(datasource); - } - - private DruidDataSource getDruidDataSourceById(Integer identity) { - - if (identity == null) { - return null; - } - - for (DruidDataSource datasource : getDruidDataSourceInstances()) { - if (System.identityHashCode(datasource) == identity) { - return datasource; - } - } - return null; - } - - public List> getSqlStatDataList() { - init(); - List> result = new ArrayList>(); - for (DruidDataSource datasource : getDruidDataSourceInstances()) { - for (JdbcSqlStat sqlStat : datasource.getDataSourceStat().getSqlStatMap().values()) { - if (sqlStat.getExecuteCount() == 0 && sqlStat.getRunningCount() == 0) { - continue; - } - - result.add(getSqlStatData(sqlStat)); - } - } - return result; - } - - public Map getSqlStatData(Integer id) { - init(); - if (id == null) { - return null; - } - JdbcSqlStat sqlStat = getSqlStatById(id); - return sqlStat == null ? null : getSqlStatData(sqlStat); - } - - private Map getSqlStatData(JdbcSqlStat sqlStat) { - try { - return sqlStat.getData(); - } catch (JMException e) { - } - return null; - } - - public List getDataSourceStatList() { - init(); - List datasourceList = new ArrayList(); - for (DruidDataSource dataSource : getDruidDataSourceInstances()) { - datasourceList.add(dataSourceToMapData(dataSource)); - } - return datasourceList; - } - - public Map returnJSONBasicStat() { - init(); - Map dataMap = new LinkedHashMap(); - dataMap.put("Version", VERSION.getVersionNumber()); - dataMap.put("Drivers", getDriversData()); - return dataMap; - } - - private List getDriversData() { - List drivers = new ArrayList(); - for (Enumeration e = DriverManager.getDrivers(); e.hasMoreElements();) { - Driver driver = e.nextElement(); - drivers.add(driver.getClass().getName()); - } - return drivers; - } - - public List> getPoolingConnectionInfoByDataSourceId(Integer id) { - init(); - DruidDataSource datasource = getDruidDataSourceById(id); - if (datasource == null) return null; - return datasource.getPoolingConnectionInfo(); - } - - public List getActiveConnectionStackTraceByDataSourceId(Integer id) { - init(); - DruidDataSource datasource = getDruidDataSourceById(id); - if (datasource == null || !datasource.isRemoveAbandoned()) return null; - - return datasource.getActiveConnectionStackTrace(); - } - - private Map dataSourceToMapData(DruidDataSource dataSource) { - - Map dataMap = new LinkedHashMap(); - dataMap.put("Identity", System.identityHashCode(dataSource)); - dataMap.put("Name", dataSource.getName()); - dataMap.put("DbType", dataSource.getDbType()); - dataMap.put("DriverClassName", dataSource.getDriverClassName()); - - dataMap.put("URL", dataSource.getUrl()); - dataMap.put("UserName", dataSource.getUsername()); - dataMap.put("FilterClassNames", dataSource.getFilterClassNames()); - - dataMap.put("WaitThreadCount", dataSource.getWaitThreadCount()); - dataMap.put("NotEmptyWaitCount", dataSource.getNotEmptyWaitCount()); - dataMap.put("NotEmptyWaitMillis", dataSource.getNotEmptyWaitMillis()); - - dataMap.put("PoolingCount", dataSource.getPoolingCount()); - dataMap.put("PoolingPeak", dataSource.getPoolingPeak()); - dataMap.put("PoolingPeakTime", - dataSource.getPoolingPeakTime() == null ? null : dataSource.getPoolingPeakTime().toString()); - - dataMap.put("ActiveCount", dataSource.getActiveCount()); - dataMap.put("ActivePeak", dataSource.getActivePeak()); - dataMap.put("ActivePeakTime", - dataSource.getActivePeakTime() == null ? null : dataSource.getActivePeakTime().toString()); - - dataMap.put("InitialSize", dataSource.getInitialSize()); - dataMap.put("MinIdle", dataSource.getMinIdle()); - dataMap.put("MaxActive", dataSource.getMaxActive()); - - dataMap.put("QueryTimeout", dataSource.getQueryTimeout()); - dataMap.put("TransactionQueryTimeout", dataSource.getTransactionQueryTimeout()); - dataMap.put("LoginTimeout", dataSource.getLoginTimeout()); - dataMap.put("ValidConnectionCheckerClassName", dataSource.getValidConnectionCheckerClassName()); - dataMap.put("ExceptionSorterClassName", dataSource.getExceptionSorterClassName()); - - dataMap.put("TestOnBorrow", dataSource.isTestOnBorrow()); - dataMap.put("TestOnReturn", dataSource.isTestOnReturn()); - dataMap.put("TestWhileIdle", dataSource.isTestWhileIdle()); - - dataMap.put("DefaultAutoCommit", dataSource.isDefaultAutoCommit()); - dataMap.put("DefaultReadOnly", dataSource.isDefaultAutoCommit()); - dataMap.put("DefaultTransactionIsolation", dataSource.getDefaultTransactionIsolation()); - - dataMap.put("LogicConnectCount", dataSource.getConnectCount()); - dataMap.put("LogicCloseCount", dataSource.getCloseCount()); - dataMap.put("LogicConnectErrorCount", dataSource.getConnectErrorCount()); - - dataMap.put("PhysicalConnectCount", dataSource.getCreateCount()); - dataMap.put("PhysicalCloseCount", dataSource.getDestroyCount()); - dataMap.put("PhysicalConnectErrorCount", dataSource.getCreateErrorCount()); - - dataMap.put("ExecuteCount", dataSource.getExecuteCount()); - dataMap.put("ErrorCount", dataSource.getErrorCount()); - dataMap.put("CommitCount", dataSource.getCommitCount()); - dataMap.put("RollbackCount", dataSource.getRollbackCount()); - - dataMap.put("PSCacheAccessCount", dataSource.getCachedPreparedStatementAccessCount()); - dataMap.put("PSCacheHitCount", dataSource.getCachedPreparedStatementHitCount()); - dataMap.put("PSCacheMissCount", dataSource.getCachedPreparedStatementMissCount()); - - dataMap.put("StartTransactionCount", dataSource.getStartTransactionCount()); - dataMap.put("TransactionHistogram", dataSource.getTransactionHistogramValues()); - - dataMap.put("ConnectionHoldTimeHistogram", - dataSource.getDataSourceStat().getConnectionHoldHistogram().toArray()); - dataMap.put("RemoveAbandoned", dataSource.isRemoveAbandoned()); - - return dataMap; - } + public void resetAll() { + ctx.resetAll(); + } } diff --git a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java index 73c8f154a1..36e23c2b5f 100644 --- a/src/main/java/com/alibaba/druid/util/ReflectionUtils.java +++ b/src/main/java/com/alibaba/druid/util/ReflectionUtils.java @@ -7,49 +7,86 @@ import javax.servlet.http.HttpServletRequest; /** * @author sandzhang */ -public class ReflectionUtils { +public class ReflectionUtils +{ - public static Class getClassFromWebContainerOrCurrentClassLoader(String className) { + public static Class getClassFromWebContainerOrCurrentClassLoader(String className) + { Class result = null; - try { + try + { result = HttpServletRequest.class.getClassLoader().loadClass(className); - } catch (ClassNotFoundException e) { } - if (result == null) { - try { + catch (ClassNotFoundException e) + { + } + if (result == null) + { + try + { result = Thread.currentThread().getContextClassLoader().loadClass(className); - } catch (ClassNotFoundException e) { + } + catch (ClassNotFoundException e) + { } } return result; } - public static Object callStaticMethod(Class classObject, String methodName) { - try { + public static Object callStaticMethod(Class classObject, String methodName) + { + + try + { Method m = classObject.getMethod(methodName); return m.invoke(classObject); - } catch (Exception e) { + } + catch (Exception e) + { return null; } } - public static Object callObjectMethod(Object obj, String methodName) { - try { + public static Object callObjectMethod(Object obj, String methodName) + { + + try + { Method m = obj.getClass().getMethod(methodName); return m.invoke(obj); - } catch (Exception e) { + } + catch (Exception e) + { return null; } } - public void getTest() { + + public static Object callObjectMethod(Object obj, String methodName, Object methodParam) + { + try + { + Method m = obj.getClass().getMethod(methodName); + return m.invoke(obj,methodParam); + } + catch (Exception e) + { + return null; + } + } + + + public void getTest() + { System.out.println("dd"); // return "test"; } - public static void main(String args[]) { + + public static void main(String args[]) + { System.out.println(callObjectMethod(new ReflectionUtils(), "getTest")); }