This commit is contained in:
温少
2012-03-20 06:14:06 +08:00
parent a26954e672
commit aaa2e474a5
8 changed files with 53 additions and 38 deletions
@@ -125,15 +125,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean {
public synchronized void init(DataSourceProxy dataSource) {
this.dataSource = dataSource;
ConcurrentMap<String, JdbcDataSourceStat> 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<String, JdbcDataSourceStat> dataSourceStats = JdbcStatManager.getInstance().getDataSources();
String url = dataSource.getUrl();
dataSourceStats.remove(url);
dataSource = null;
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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<szujobs@hotmail.com>
*/
public interface DataSourceProxy {
JdbcDataSourceStat getDataSourceStat();
String getName();
@@ -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;
}
}
@@ -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<String, JdbcDataSourceStat> dataSources = new ConcurrentHashMap<String, JdbcDataSourceStat>();
private final AtomicLong resetCount = new AtomicLong();
public final ThreadLocal<JdbcStatContext> contextLocal = new ThreadLocal<JdbcStatContext>();
@@ -57,10 +54,6 @@ public class JdbcStatManager implements JdbcStatManagerMBean {
}
public ConcurrentMap<String, JdbcDataSourceStat> 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<String, JdbcSqlStat> statMap = dataSource.getSqlStatMap();
for (DataSourceProxyImpl dataSource : DruidDriver.getProxyDataSources().values()) {
Map<String, JdbcSqlStat> statMap = dataSource.getDataSourceStat().getSqlStatMap();
for (Map.Entry<String, JdbcSqlStat> entry : statMap.entrySet()) {
Map<String, Object> map = entry.getValue().getData();
map.put("URL", dataSource.getUrl());
data.put(new CompositeDataSupport(JdbcSqlStat.getCompositeType(), map));
}
}
for (DruidDataSource dataSource : DruidDataSourceStatManager.getDruidDataSourceInstances()) {
Map<String, JdbcSqlStat> statMap = dataSource.getDataSourceStat().getSqlStatMap();
for (Map.Entry<String, JdbcSqlStat> entry : statMap.entrySet()) {
Map<String, Object> map = entry.getValue().getData();
map.put("URL", dataSource.getUrl());
@@ -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());
@@ -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) {