From aaa2e474a580a9524fb9123aacbe60c829613a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Tue, 20 Mar 2012 06:14:06 +0800 Subject: [PATCH] refactor --- .../alibaba/druid/filter/stat/StatFilter.java | 14 +------------ .../alibaba/druid/pool/DruidDataSource.java | 10 ++++++++++ .../druid/pool/ha/MultiDataSource.java | 14 +++++++++++-- .../druid/proxy/jdbc/DataSourceProxy.java | 2 ++ .../druid/proxy/jdbc/DataSourceProxyImpl.java | 8 ++++++++ .../alibaba/druid/stat/JdbcStatManager.java | 20 ++++++++++--------- .../bvt/pool/DruidDataSourceFilterTest.java | 5 +++-- .../com/alibaba/druid/bvt/pool/ParamTest.java | 18 ++++++----------- 8 files changed, 53 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index d9a7b4b94b..4859f5d22d 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -125,15 +125,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { public synchronized void init(DataSourceProxy dataSource) { this.dataSource = dataSource; - ConcurrentMap dataSourceStats = JdbcStatManager.getInstance().getDataSources(); - - String url = dataSource.getUrl(); - JdbcDataSourceStat stat = dataSourceStats.get(url); - if (stat == null) { - dataSourceStats.putIfAbsent(url, new JdbcDataSourceStat(dataSource.getName(), url)); - stat = dataSourceStats.get(url); - } - this.dataSourceStat = stat; + this.dataSourceStat = dataSource.getDataSourceStat(); } @Override @@ -142,10 +134,6 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { return; } - ConcurrentMap dataSourceStats = JdbcStatManager.getInstance().getDataSources(); - String url = dataSource.getUrl(); - dataSourceStats.remove(url); - dataSource = null; } diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index ad0d72bb9b..e3e00bf0ea 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -55,6 +55,7 @@ import com.alibaba.druid.proxy.DruidDriver; import com.alibaba.druid.proxy.jdbc.DataSourceProxyConfig; import com.alibaba.druid.proxy.jdbc.TransactionInfo; import com.alibaba.druid.stat.DruidDataSourceStatManager; +import com.alibaba.druid.stat.JdbcDataSourceStat; import com.alibaba.druid.util.JdbcUtils; /** @@ -108,6 +109,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat private boolean closed = false; + private JdbcDataSourceStat dataSourceStat; + public DruidDataSource(){ } @@ -324,6 +327,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat } else if (realDriverClassName.equals("com.alibaba.druid.mock.MockDriver")) { this.exceptionSorter = new MockExceptionSorter(); } + + dataSourceStat = new JdbcDataSourceStat(this.name, this.jdbcUrl); for (Filter filter : filters) { filter.init(this); @@ -1359,4 +1364,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat return VERSION.MajorVersion + "." + VERSION.MinorVersion + "." + VERSION.RevisionVersion; } + @Override + public JdbcDataSourceStat getDataSourceStat() { + return dataSourceStat; + } + } diff --git a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java index 27b86a91ab..4725b44cb0 100644 --- a/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/ha/MultiDataSource.java @@ -30,6 +30,7 @@ import com.alibaba.druid.pool.ha.config.ConfigLoader; import com.alibaba.druid.pool.ha.valid.DataSourceFailureDetecter; import com.alibaba.druid.pool.ha.valid.DefaultDataSourceFailureDetecter; import com.alibaba.druid.proxy.jdbc.DataSourceProxy; +import com.alibaba.druid.stat.JdbcDataSourceStat; import com.alibaba.druid.util.JdbcUtils; public class MultiDataSource extends DataSourceAdapter implements MultiDataSourceMBean, DataSourceProxy { @@ -83,6 +84,8 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc private Balancer balancer = new WeightBalancer(); + private JdbcDataSourceStat dataSourceStat; + public long getMaxWaitMillis() { return maxWaitMillis; } @@ -168,9 +171,11 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc if (inited) { return; } + + dataSourceStat = new JdbcDataSourceStat(name, null); this.balancer.init(this); - + initInternal(); scheduler = Executors.newScheduledThreadPool(schedulerThreadCount); @@ -323,7 +328,7 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc if (!this.balancer.isInited()) { this.balancer.init(this); } - + this.balancer.afterDataSourceChanged(null); } @@ -491,4 +496,9 @@ public class MultiDataSource extends DataSourceAdapter implements MultiDataSourc } } + + @Override + public JdbcDataSourceStat getDataSourceStat() { + return dataSourceStat; + } } diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java index aa31c29b4e..5f4b09123c 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java @@ -19,11 +19,13 @@ import java.sql.Driver; import java.util.List; import com.alibaba.druid.filter.Filter; +import com.alibaba.druid.stat.JdbcDataSourceStat; /** * @author wenshao */ public interface DataSourceProxy { + JdbcDataSourceStat getDataSourceStat(); String getName(); diff --git a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java index dc47943662..495df002ba 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java @@ -60,11 +60,14 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl private final AtomicLong resultSetIdSeed = new AtomicLong(50000); private final AtomicLong transactionIdSeed = new AtomicLong(0); + private final JdbcDataSourceStat dataSourceStat; + public DataSourceProxyImpl(Driver rawDriver, DataSourceProxyConfig config){ super(); this.rawDriver = rawDriver; this.config = config; this.dbType = JdbcUtils.getDbType(config.getRawUrl(), config.getRawDriverClassName()); + this.dataSourceStat = new JdbcDataSourceStat(config.getName(), config.getUrl()); } public String getDbType() { @@ -370,4 +373,9 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl public long createTransactionId() { return transactionIdSeed.getAndIncrement(); } + + public JdbcDataSourceStat getDataSourceStat() { + return dataSourceStat; + } + } diff --git a/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java b/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java index 389d4477f6..1f23512a58 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcStatManager.java @@ -17,7 +17,6 @@ package com.alibaba.druid.stat; import java.util.Map; import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicLong; @@ -47,8 +46,6 @@ public class JdbcStatManager implements JdbcStatManagerMBean { private final JdbcResultSetStat resultSetStat = new JdbcResultSetStat(); private final JdbcStatementStat statementStat = new JdbcStatementStat(); - private final ConcurrentMap dataSources = new ConcurrentHashMap(); - private final AtomicLong resetCount = new AtomicLong(); public final ThreadLocal contextLocal = new ThreadLocal(); @@ -57,10 +54,6 @@ public class JdbcStatManager implements JdbcStatManagerMBean { } - public ConcurrentMap getDataSources() { - return dataSources; - } - public JdbcStatContext getStatContext() { return contextLocal.get(); } @@ -305,8 +298,17 @@ public class JdbcStatManager implements JdbcStatManagerMBean { TabularType tabularType = new TabularType("SqlListStatistic", "SqlListStatistic", rowType, indexNames); TabularData data = new TabularDataSupport(tabularType); - for (JdbcDataSourceStat dataSource : dataSources.values()) { - Map statMap = dataSource.getSqlStatMap(); + for (DataSourceProxyImpl dataSource : DruidDriver.getProxyDataSources().values()) { + Map statMap = dataSource.getDataSourceStat().getSqlStatMap(); + for (Map.Entry entry : statMap.entrySet()) { + Map map = entry.getValue().getData(); + map.put("URL", dataSource.getUrl()); + data.put(new CompositeDataSupport(JdbcSqlStat.getCompositeType(), map)); + } + } + + for (DruidDataSource dataSource : DruidDataSourceStatManager.getDruidDataSourceInstances()) { + Map statMap = dataSource.getDataSourceStat().getSqlStatMap(); for (Map.Entry entry : statMap.entrySet()) { Map map = entry.getValue().getData(); map.put("URL", dataSource.getUrl()); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFilterTest.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFilterTest.java index 3cc3389fc6..5583116f76 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFilterTest.java @@ -43,8 +43,9 @@ public class DruidDataSourceFilterTest extends TestCase { JdbcStatManager.getInstance().reset(); dataSource.init(); - Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size()); - JdbcDataSourceStat dataSourceStat = JdbcStatManager.getInstance().getDataSources().values().iterator().next(); + JdbcDataSourceStat dataSourceStat =dataSource.getDataSourceStat(); +// Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size()); +// JdbcDataSourceStat dataSourceStat = JdbcStatManager.getInstance().getDataSources().values().iterator().next(); Assert.assertEquals(0, dataSourceStat.getConnectionStat().getConnectCount()); Assert.assertEquals(1, dataSource.getProxyFilters().size()); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java index 49c448c64d..b56b79da2d 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java @@ -31,10 +31,7 @@ public class ParamTest extends TestCase { JdbcStatManager.getInstance().reset(); dataSource.init(); - Assert.assertEquals(1, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); - Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size()); - - JdbcDataSourceStat stat = JdbcStatManager.getInstance().getDataSources().values().iterator().next(); + JdbcDataSourceStat stat =dataSource.getDataSourceStat(); Assert.assertEquals(0, stat.getConnectionStat().getConnectCount()); Assert.assertEquals(1, dataSource.getProxyFilters().size()); @@ -54,7 +51,7 @@ public class ParamTest extends TestCase { dataSource.close(); - Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); +// Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); Assert.assertEquals(1, stat.getConnectionStat().getConnectCount()); Assert.assertEquals(1, stat.getConnectionStat().getCloseCount()); @@ -79,8 +76,8 @@ public class ParamTest extends TestCase { JdbcStatManager.getInstance().reset(); - Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); - Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); +// Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); +// Assert.assertEquals(0, JdbcStatManager.getInstance().getDataSources().size()); Assert.assertEquals(1, dataSource.getProxyFilters().size()); @@ -109,11 +106,8 @@ public class ParamTest extends TestCase { JdbcStatManager.getInstance().reset(); dataSource.init(); - Assert.assertEquals(1, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); - Assert.assertEquals(1, JdbcStatManager.getInstance().getDataSources().size()); - - JdbcDataSourceStat stat = JdbcStatManager.getInstance().getDataSources().values().iterator().next(); - + JdbcDataSourceStat stat =dataSource.getDataSourceStat(); + Assert.assertEquals(10, stat.getConnectionStat().getConnectCount()); for (int i = 0; i < 10; ++i) {