From 89bea2d882eb69080cd5a63ee47eebd487c4286b Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 8 Sep 2011 07:52:51 +0000 Subject: [PATCH] test git-svn-id: http://code.alibabatech.com/svn/druid/trunk@695 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../druid/pool/DruidAbstractDataSource.java | 4 ++ .../stat/DruidDataSourceStatManager.java | 52 ++++++++++++------- .../bvt/pool/DruidDataSourceFilterTest.java | 4 ++ .../druid/bvt/pool/PasswordCallbackTest.java | 2 + .../druid/bvt/pool/SpringFilterTest.java | 5 +- .../alibaba/druid/bvt/pool/TestDisable.java | 12 +++-- .../pool/TestIdle3_Concurrent_MaxActive.java | 5 +- .../pool/TestIdle3_Concurrent_Starvation.java | 5 +- .../com/alibaba/druid/bvt/pool/TestStat.java | 5 +- 9 files changed, 59 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index ad390463ea..046343d3b7 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -474,6 +474,10 @@ public abstract class DruidAbstractDataSource implements DruidAbstractDataSource } return name; } + + public String getNameInternal() { + return this.name; + } public void setName(String name) { this.name = name; diff --git a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java index 218f08ef18..043c4ca965 100644 --- a/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java +++ b/src/main/java/com/alibaba/druid/stat/DruidDataSourceStatManager.java @@ -24,23 +24,20 @@ import com.alibaba.druid.util.ConcurrentIdentityHashMap; public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBean { - private final static Log LOG = LogFactory.getLog(DruidDataSourceStatManager.class); + private final static Log LOG = LogFactory.getLog(DruidDataSourceStatManager.class); - private final static DruidDataSourceStatManager instance = new DruidDataSourceStatManager(); + private final static DruidDataSourceStatManager instance = new DruidDataSourceStatManager(); // global instances - private static final Object PRESENT = new Object(); - private static final ConcurrentIdentityHashMap instances = new ConcurrentIdentityHashMap(); + private static final ConcurrentIdentityHashMap instances = new ConcurrentIdentityHashMap(); - private final static String MBEAN_NAME = "com.alibaba.druid:type=DruidDataSourceStat"; + private final static String MBEAN_NAME = "com.alibaba.druid:type=DruidDataSourceStat"; public static DruidDataSourceStatManager getInstance() { return instance; } public synchronized static void add(DruidDataSource dataSource) { - instances.put(dataSource, PRESENT); - MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); if (instances.size() == 0) { try { @@ -50,23 +47,42 @@ public class DruidDataSourceStatManager implements DruidDataSourceStatManagerMBe } } - try { - int id = System.identityHashCode(dataSource); - mbeanServer.registerMBean(dataSource, new ObjectName("com.alibaba.druid:type=DruidDataSource,id=" + id)); - } catch (JMException ex) { - LOG.error("register mbean error", ex); + ObjectName objectName = null; + if (dataSource.getNameInternal() != null) { + try { + objectName = new ObjectName("com.alibaba.druid:type=DruidDataSource,id=" + dataSource.getNameInternal()); + mbeanServer.registerMBean(dataSource, objectName); + } catch (JMException ex) { + LOG.error("register mbean error", ex); + objectName = null; + } } + + if (objectName == null) { + try { + int id = System.identityHashCode(dataSource); + objectName = new ObjectName("com.alibaba.druid:type=DruidDataSource,id=" + id); + mbeanServer.registerMBean(dataSource, objectName); + } catch (JMException ex) { + LOG.error("register mbean error", ex); + objectName = null; + } + } + + instances.put(dataSource, objectName); } public synchronized static void remove(DruidDataSource dataSource) { - instances.remove(dataSource); + ObjectName objectName = instances.remove(dataSource); MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer(); - try { - int id = System.identityHashCode(dataSource); - mbeanServer.unregisterMBean(new ObjectName("com.alibaba.druid:type=DruidDataSource,id=" + id)); - } catch (JMException ex) { - LOG.error("unregister mbean error", ex); + + if (objectName != null) { + try { + mbeanServer.unregisterMBean(objectName); + } catch (JMException ex) { + LOG.error("unregister mbean error", ex); + } } if (instances.size() == 0) { 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 5063ea470f..cc44b5356b 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFilterTest.java @@ -18,6 +18,8 @@ public class DruidDataSourceFilterTest extends TestCase { dataSource.setFilters("stat"); Assert.assertEquals(1, dataSource.getProxyFilters().size()); + + dataSource.close(); } public void test_filter_2() throws Exception { @@ -28,6 +30,8 @@ public class DruidDataSourceFilterTest extends TestCase { dataSource.setFilters("stat,trace"); Assert.assertEquals(2, dataSource.getProxyFilters().size()); + + dataSource.close(); } public void test_filter_3() throws Exception { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/PasswordCallbackTest.java b/src/test/java/com/alibaba/druid/bvt/pool/PasswordCallbackTest.java index 29aa834833..b434e0cfaf 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/PasswordCallbackTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/PasswordCallbackTest.java @@ -24,6 +24,8 @@ public class PasswordCallbackTest extends TestCase { Assert.assertEquals(dataSource.getUrl(), passwordCallback.getUrl()); Assert.assertEquals(dataSource.getConnectProperties(), passwordCallback.getProperties()); + + dataSource.close(); } public static class TestPasswordCallback extends PasswordCallback { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/SpringFilterTest.java b/src/test/java/com/alibaba/druid/bvt/pool/SpringFilterTest.java index e1f0aff0ad..23beb3e2bc 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/SpringFilterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/SpringFilterTest.java @@ -10,7 +10,6 @@ import javax.sql.DataSource; import junit.framework.Assert; import junit.framework.TestCase; -import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.alibaba.druid.filter.FilterAdapter; @@ -20,7 +19,7 @@ import com.alibaba.druid.proxy.jdbc.ConnectionProxy; public class SpringFilterTest extends TestCase { public void test_spring() throws Exception { - ApplicationContext context = new ClassPathXmlApplicationContext("com/alibaba/druid/pool/spring-config-1.xml"); + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/alibaba/druid/pool/spring-config-1.xml"); DataSource dataSource = (DataSource) context.getBean("dataSource"); Connection conn = dataSource.getConnection(); @@ -28,6 +27,8 @@ public class SpringFilterTest extends TestCase { TestFilter filter = (TestFilter) context.getBean("test-filter"); Assert.assertEquals(1, filter.getConnectCount()); + + context.close(); } public static class TestFilter extends FilterAdapter { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestDisable.java b/src/test/java/com/alibaba/druid/bvt/pool/TestDisable.java index 660865ff74..94ffb17520 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestDisable.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestDisable.java @@ -1,13 +1,14 @@ package com.alibaba.druid.bvt.pool; import java.sql.Connection; -import java.util.Random; import java.util.concurrent.CountDownLatch; +import junit.framework.Assert; +import junit.framework.TestCase; + import com.alibaba.druid.mock.MockDriver; import com.alibaba.druid.pool.DruidDataSource; - -import junit.framework.TestCase; +import com.alibaba.druid.stat.DruidDataSourceStatManager; public class TestDisable extends TestCase { @@ -32,6 +33,11 @@ public class TestDisable extends TestCase { dataSource.setFilters("stat"); } + protected void tearDown() throws Exception { + dataSource.close(); + Assert.assertEquals(0, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); + } + public void test_close() throws Exception { final int threadCount = 100; Thread[] threads = new Thread[threadCount]; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_MaxActive.java b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_MaxActive.java index 26f332dec8..f8cfd7b0f7 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_MaxActive.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_MaxActive.java @@ -35,12 +35,10 @@ public class TestIdle3_Concurrent_MaxActive extends TestCase { dataSource.setValidationQuery("SELECT 1"); dataSource.setFilters("stat"); - ManagementFactory.getPlatformMBeanServer().registerMBean(dataSource, - new ObjectName("com.alibaba:type=DataSource")); } protected void tearDown() throws Exception { - ManagementFactory.getPlatformMBeanServer().unregisterMBean(new ObjectName("com.alibaba:type=DataSource")); + dataSource.close(); } public void test_idle2() throws Exception { @@ -80,7 +78,6 @@ public class TestIdle3_Concurrent_MaxActive extends TestCase { } // Assert.assertEquals(2, dataSource.getPoolingCount()); - dataSource.close(); } private void concurrent(final int threadCount) throws Exception { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java index d759b1b6ec..59b17fc19b 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestIdle3_Concurrent_Starvation.java @@ -36,12 +36,10 @@ public class TestIdle3_Concurrent_Starvation extends TestCase { dataSource.setValidationQuery("SELECT 1"); dataSource.setFilters("stat"); - ManagementFactory.getPlatformMBeanServer().registerMBean(dataSource, - new ObjectName("com.alibaba:type=DataSource")); } protected void tearDown() throws Exception { - ManagementFactory.getPlatformMBeanServer().unregisterMBean(new ObjectName("com.alibaba:type=DataSource")); + dataSource.close(); } public void test_idle2() throws Exception { @@ -79,7 +77,6 @@ public class TestIdle3_Concurrent_Starvation extends TestCase { } // Assert.assertEquals(2, dataSource.getPoolingCount()); - dataSource.close(); } private void concurrent(final int threadCount) throws Exception { diff --git a/src/test/java/com/alibaba/druid/bvt/pool/TestStat.java b/src/test/java/com/alibaba/druid/bvt/pool/TestStat.java index 28c7ddebaa..7f22b7d69a 100644 --- a/src/test/java/com/alibaba/druid/bvt/pool/TestStat.java +++ b/src/test/java/com/alibaba/druid/bvt/pool/TestStat.java @@ -1,12 +1,9 @@ package com.alibaba.druid.bvt.pool; -import java.lang.management.ManagementFactory; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; -import javax.management.ObjectName; - import junit.framework.Assert; import junit.framework.TestCase; @@ -21,6 +18,7 @@ public class TestStat extends TestCase { protected void setUp() throws Exception { dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mock:xxx"); + dataSource.setName("com.alibaba.dragoon.monitor"); } @@ -49,7 +47,6 @@ public class TestStat extends TestCase { JdbcStatManager.getInstance().getDataSourceList(); Assert.assertEquals(1, DruidDataSourceStatManager.getInstance().getDataSourceList().size()); - ManagementFactory.getPlatformMBeanServer().registerMBean(DruidDataSourceStatManager.getInstance(), new ObjectName("com.alibaba.druid:type=DruidDataSourceStat")); } }