From d387694ee06c95a7584d2a2d68097e2f882f4fd7 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 13 May 2011 08:51:40 +0000 Subject: [PATCH] =?UTF-8?q?DruidDataSource=E6=94=AF=E6=8C=81Filter?= 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@52 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../alibaba/druid/pool/DruidDataSource.java | 12 ++- .../druid/stat/JdbcConnectionStat.java | 1 + .../com/alibaba/druid/bvt/pool/ParamTest.java | 96 +++++++++++++++++++ 3 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index bcdb4c01c3..16074d4f31 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -90,6 +90,14 @@ public class DruidDataSource extends DruidDataAbstractSource implements DruidDat if (inited) { return; } + + if (maxActive <= 0) { + throw new IllegalArgumentException("illegal maxActive " + maxActive); + } + + if (maxIdle <= 0 || maxIdle < minIdle) { + throw new IllegalArgumentException("illegal maxPoolSize"); + } if (this.driverClass != null) { this.driverClass = driverClass.trim(); @@ -119,10 +127,6 @@ public class DruidDataSource extends DruidDataAbstractSource implements DruidDat initConnectionFactory(); - if (maxIdle <= 0 || maxIdle < minIdle) { - throw new IllegalArgumentException("illegal maxPoolSize"); - } - int capacity = maxIdle + maxActive; if (capacity < getInitialSize()) { diff --git a/src/main/java/com/alibaba/druid/stat/JdbcConnectionStat.java b/src/main/java/com/alibaba/druid/stat/JdbcConnectionStat.java index 6b22ed7c37..86dbfd642f 100644 --- a/src/main/java/com/alibaba/druid/stat/JdbcConnectionStat.java +++ b/src/main/java/com/alibaba/druid/stat/JdbcConnectionStat.java @@ -63,6 +63,7 @@ public class JdbcConnectionStat implements JdbcConnectionStatMBean { lastErrorTime = 0; lastSampleTime = 0; + count.set(0); closeCount.set(0); commitCount.set(0); rollbackCount.set(0); diff --git a/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java b/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java new file mode 100644 index 0000000000..ade040afc2 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/ParamTest.java @@ -0,0 +1,96 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.stat.JdbcStatManager; + +public class ParamTest extends TestCase { + + public void test_default() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:"); + + Assert.assertEquals(0, dataSource.getFilters().size()); + + dataSource.setFilters("stat"); + + JdbcStatManager.getInstance().reset(); + + Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + Assert.assertEquals(1, dataSource.getFilters().size()); + + for (int i = 0; i < 2; ++i) { + Connection conn = dataSource.getConnection(); + + Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount()); + + conn.close(); + + Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount()); // logic + // close不会导致计数器+1 + } + + dataSource.close(); + + Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + Assert.assertEquals(1, JdbcStatManager.getInstance().getConnectionstat().getCloseCount()); + + JdbcStatManager.getInstance().reset(); + + Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getCloseCount()); + } + + public void test_zero() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:"); + dataSource.setInitialSize(0); + dataSource.setMaxActive(0); + dataSource.setMinIdle(0); + dataSource.setMaxIdle(0); + + Assert.assertEquals(0, dataSource.getFilters().size()); + + dataSource.setFilters("stat"); + + JdbcStatManager.getInstance().reset(); + + Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + Assert.assertEquals(1, dataSource.getFilters().size()); + + Exception error = null; + try { + dataSource.getConnection(); + } catch (Exception ex) { + error = ex; + } + Assert.assertNotNull(error); + } + + public void test_1() throws Exception { + DruidDataSource dataSource = new DruidDataSource(); + dataSource.setUrl("jdbc:mock:"); + dataSource.setInitialSize(10); + dataSource.setMaxActive(10); + dataSource.setMinIdle(0); + dataSource.setMaxIdle(10); + + dataSource.setFilters("stat"); + Assert.assertEquals(1, dataSource.getFilters().size()); + + JdbcStatManager.getInstance().reset(); + + Assert.assertEquals(0, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + + Connection conn = dataSource.getConnection(); + conn.close(); + + Assert.assertEquals(10, JdbcStatManager.getInstance().getConnectionstat().getConnectCount()); + } +}