From 03bee022afe6bcd3f0ae18e88eb37e7d1ca84df2 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 11 May 2011 02:48:31 +0000 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=92=8Capache=20dbcp?= =?UTF-8?q?=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@5 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- pom.xml | 11 ++++- .../alibaba/druid/filter/stat/StatFilter.java | 6 +-- .../druid/pool/DruidDataAbstractSource.java | 12 ++--- .../druid/pool/DruidDataSourceMBean.java | 4 +- .../druid/proxy/jdbc/DataSourceProxy.java | 2 +- .../druid/proxy/jdbc/DataSourceProxyImpl.java | 8 +--- src/test/java/com/alibaba/druid/TestUtil.java | 45 +++++++++++++++++++ .../com/alibaba/druid/bvt/pool/Case0.java | 4 +- .../druid/bvt/pool/ConcurrentTest.java | 4 +- .../druid/bvt/pool/TestDruidDataSource.java | 2 +- .../com/alibaba/druid/bvt/pool/Test_C2.java | 2 +- .../alibaba/druid/pool/benckmark/Case0.java | 21 ++++++--- 12 files changed, 89 insertions(+), 32 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/TestUtil.java diff --git a/pom.xml b/pom.xml index 48a1a1aaf5..d6302b6944 100644 --- a/pom.xml +++ b/pom.xml @@ -5,9 +5,18 @@ com.alibaba druid 0.2-SNAPSHOT - + druid + + + oracleReleases + Oracle Released Java Packages + http://download.oracle.com/maven + default + + + 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 5b8f692702..b69b776353 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -80,7 +80,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { ConcurrentMap dataSourceStats = JdbcStatManager.getInstance().getDataSources(); - String url = dataSource.getJdbcUrl(); + String url = dataSource.getUrl(); JdbcDataSourceStat stat = dataSourceStats.get(url); if (stat == null) { dataSourceStats.putIfAbsent(url, new JdbcDataSourceStat(dataSource.getName(), url)); @@ -611,7 +611,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { @Override public String getConnectionUrl() { - return dataSource.getJdbcUrl(); + return dataSource.getUrl(); } public final JdbcSqlStat createSqlStat(StatementProxy statement, String sql) { @@ -620,7 +620,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { JdbcSqlStat newSqlStat = new JdbcSqlStat(sql); if (dataSourceStat.getSqlStatMap().putIfAbsent(sql, newSqlStat) == null) { newSqlStat.setId(JdbcStatManager.getInstance().generateSqlId()); - newSqlStat.setDataSource(this.dataSource.getJdbcUrl()); + newSqlStat.setDataSource(this.dataSource.getUrl()); } sqlStat = dataSourceStat.getSqlStatMap().get(sql); diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataAbstractSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataAbstractSource.java index 20fa6ad3f0..9509046174 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataAbstractSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataAbstractSource.java @@ -277,11 +277,11 @@ public abstract class DruidDataAbstractSource implements DataSource, DataSourceP this.maxActive = maxActive; } - public String getUser() { + public String getUsername() { return user; } - public void setUser(String user) { + public void setUsername(String user) { if (inited) { throw new UnsupportedOperationException(); } @@ -313,7 +313,7 @@ public abstract class DruidDataAbstractSource implements DataSource, DataSourceP this.properties = properties; } - public String getJdbcUrl() { + public String getUrl() { return jdbcUrl; } @@ -333,7 +333,7 @@ public abstract class DruidDataAbstractSource implements DataSource, DataSourceP return driverClass; } - public void setDriverClass(String driverClass) { + public void setDriverClassName(String driverClass) { if (inited) { throw new UnsupportedOperationException(); } @@ -402,14 +402,14 @@ public abstract class DruidDataAbstractSource implements DataSource, DataSourceP public DruidPoolConnectionFactory(DruidDataAbstractSource dataSource){ this.dataSource = dataSource; - this.url = dataSource.getJdbcUrl(); + this.url = dataSource.getUrl(); Properties properties = dataSource.getProperties(); String user; if (dataSource.getUserCallback() != null) { user = dataSource.getUserCallback().getName(); } else { - user = dataSource.getUser(); + user = dataSource.getUsername(); } String password; diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java index 07d5dbe06b..616c5fa088 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceMBean.java @@ -15,11 +15,11 @@ public interface DruidDataSourceMBean { int getInitialSize(); - String getUser(); + String getUsername(); String getPassword(); - String getJdbcUrl(); + String getUrl(); String getDriverClass(); 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 6ed2111a21..1f872596c2 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxy.java @@ -31,7 +31,7 @@ public interface DataSourceProxy { Driver getRawDriver(); - String getJdbcUrl(); + String getUrl(); String getRawJdbcUrl(); 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 255f0edb19..58cbe894f2 100644 --- a/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java +++ b/src/main/java/com/alibaba/druid/proxy/jdbc/DataSourceProxyImpl.java @@ -100,19 +100,13 @@ public class DataSourceProxyImpl implements DataSourceProxy, DataSourceProxyImpl this.id = id; } - @Override - public String getUrl() { - return this.config.getUrl(); - } - - @Override public String getName() { return this.config.getName(); } @Override - public String getJdbcUrl() { + public String getUrl() { return config.getUrl(); } diff --git a/src/test/java/com/alibaba/druid/TestUtil.java b/src/test/java/com/alibaba/druid/TestUtil.java new file mode 100644 index 0000000000..4a6b389255 --- /dev/null +++ b/src/test/java/com/alibaba/druid/TestUtil.java @@ -0,0 +1,45 @@ +package com.alibaba.druid; + +import java.lang.management.ManagementFactory; + +import javax.management.MBeanServer; +import javax.management.ObjectName; + +public class TestUtil { + public static long getYoungGC() { + try { + MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); + ObjectName objectName; + if (mbeanServer.isRegistered(new ObjectName("java.lang:type=GarbageCollector,name=ParNew"))) { + objectName = new ObjectName("java.lang:type=GarbageCollector,name=ParNew"); + } else if (mbeanServer.isRegistered(new ObjectName("java.lang:type=GarbageCollector,name=Copy"))) { + objectName = new ObjectName("java.lang:type=GarbageCollector,name=Copy"); + } else { + objectName = new ObjectName("java.lang:type=GarbageCollector,name=PS Scavenge"); + } + + return (Long) mbeanServer.getAttribute(objectName, "CollectionCount"); + } catch (Exception e) { + throw new RuntimeException("error"); + } + } + + public static long getFullGC() { + try { + MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); + ObjectName objectName; + + if (mbeanServer.isRegistered(new ObjectName("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep"))) { + objectName = new ObjectName("java.lang:type=GarbageCollector,name=ConcurrentMarkSweep"); + } else if (mbeanServer.isRegistered(new ObjectName("java.lang:type=GarbageCollector,name=MarkSweepCompact"))) { + objectName = new ObjectName("java.lang:type=GarbageCollector,name=MarkSweepCompact"); + } else { + objectName = new ObjectName("java.lang:type=GarbageCollector,name=PS MarkSweep"); + } + + return (Long) mbeanServer.getAttribute(objectName, "CollectionCount"); + } catch (Exception e) { + throw new RuntimeException("error"); + } + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/Case0.java b/src/test/java/com/alibaba/druid/bvt/pool/Case0.java index 77b4e2ee33..c51461c5a7 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/Case0.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/Case0.java @@ -43,10 +43,10 @@ public class Case0 extends TestCase { dataSource.setMinIdle(minPoolSize); dataSource.setMaxIdle(maxPoolSize); dataSource.setPoolPreparedStatements(true); - dataSource.setDriverClass(driverClass); + dataSource.setDriverClassName(driverClass); dataSource.setUrl(jdbcUrl); dataSource.setPoolPreparedStatements(true); - dataSource.setUser(user); + dataSource.setUsername(user); dataSource.setPassword(password); final int LOOP_COUNT = 1000 * 1000; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ConcurrentTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ConcurrentTest.java index 8fccd10cce..287c3a9e8d 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/ConcurrentTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/ConcurrentTest.java @@ -41,10 +41,10 @@ public class ConcurrentTest extends TestCase { dataSource.setMinIdle(minPoolSize); dataSource.setMaxIdle(maxPoolSize); dataSource.setPoolPreparedStatements(true); - dataSource.setDriverClass(driverClass); + dataSource.setDriverClassName(driverClass); dataSource.setUrl(jdbcUrl); dataSource.setPoolPreparedStatements(true); - dataSource.setUser(user); + dataSource.setUsername(user); dataSource.setPassword(password); final int THREAD_COUNT = 2; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestDruidDataSource.java b/src/test/java/com/alibaba/druid/bvt/pool/TestDruidDataSource.java index ac5f0de7c6..e1a68997b7 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestDruidDataSource.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestDruidDataSource.java @@ -16,7 +16,7 @@ public class TestDruidDataSource extends TestCase { dataSource.setInitialSize(10); dataSource.setMaxIdle(10); - dataSource.setDriverClass("com.alibaba.druid.mock.MockDriver"); + dataSource.setDriverClassName("com.alibaba.druid.mock.MockDriver"); dataSource.setUrl("jdbc:mock:xxx"); Assert.assertEquals(0, dataSource.getConnectCount()); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/Test_C2.java b/src/test/java/com/alibaba/druid/bvt/pool/Test_C2.java index a367a2e679..29f28bf2de 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/Test_C2.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/Test_C2.java @@ -42,7 +42,7 @@ public class Test_C2 extends TestCase { dataSource.setMinIdle(minPoolSize); dataSource.setMaxIdle(maxPoolSize); dataSource.setPoolPreparedStatements(true); - dataSource.setDriverClass(driverClass); + dataSource.setDriverClassName(driverClass); dataSource.setUrl(jdbcUrl); dataSource.setPoolPreparedStatements(true); diff --git a/src/test/java/com/alibaba/druid/pool/benckmark/Case0.java b/src/test/java/com/alibaba/druid/pool/benckmark/Case0.java index 5633437380..9f9833b9f2 100644 --- a/src/test/java/com/alibaba/druid/pool/benckmark/Case0.java +++ b/src/test/java/com/alibaba/druid/pool/benckmark/Case0.java @@ -10,6 +10,7 @@ import junit.framework.TestCase; import org.apache.commons.dbcp.BasicDataSource; +import com.alibaba.druid.TestUtil; import com.alibaba.druid.pool.DruidDataSource; public class Case0 extends TestCase { @@ -38,15 +39,16 @@ public class Case0 extends TestCase { dataSource.setMinIdle(minPoolSize); dataSource.setMaxIdle(maxPoolSize); dataSource.setPoolPreparedStatements(true); - dataSource.setDriverClass(driverClass); + dataSource.setDriverClassName(driverClass); dataSource.setUrl(jdbcUrl); dataSource.setPoolPreparedStatements(true); - dataSource.setUser(user); + dataSource.setUsername(user); dataSource.setPassword(password); for (int i = 0; i < 10; ++i) { - p0(dataSource); + p0(dataSource, "druid"); } + System.out.println(); } public void test_1() throws Exception { @@ -64,18 +66,25 @@ public class Case0 extends TestCase { dataSource.setPassword(password); for (int i = 0; i < 10; ++i) { - p0(dataSource); + p0(dataSource, "dbcp"); } + System.out.println(); } - private void p0(DataSource dataSource) throws SQLException { + private void p0(DataSource dataSource, String name) throws SQLException { long startMillis = System.currentTimeMillis(); + long startYGC = TestUtil.getYoungGC(); + long startFullGC = TestUtil.getFullGC(); + final int COUNT = 1000 * 1000; for (int i = 0; i < COUNT; ++i) { Connection conn = dataSource.getConnection(); conn.close(); } long millis = System.currentTimeMillis() - startMillis; - System.out.println(dataSource.getClass().getName() + " millis : " + NumberFormat.getInstance().format(millis)); + long ygc = TestUtil.getYoungGC() - startYGC; + long fullGC = TestUtil.getFullGC() - startFullGC; + + System.out.println(name + " millis : " + NumberFormat.getInstance().format(millis) + ", YGC " + ygc + " FGC " + fullGC); } }