From 4eda7cb278a2e5a3929d65e6de246da182f2db27 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 11 Aug 2012 20:58:00 +0800 Subject: [PATCH] refactor DruidDataSourceFactory --- .../druid/pool/DruidDataSourceFactory.java | 73 ++++++++++--------- .../bvt/pool/DruidDataSourceFactoryTest.java | 38 ++++++++++ 2 files changed, 78 insertions(+), 33 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java index fa83edd03d..004bd5ee43 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java @@ -36,39 +36,41 @@ public class DruidDataSourceFactory implements ObjectFactory { static final int UNKNOWN_TRANSACTIONISOLATION = -1; - public final static String PROP_DEFAULTAUTOCOMMIT = "defaultAutoCommit"; - public final static String PROP_DEFAULTREADONLY = "defaultReadOnly"; - public final static String PROP_DEFAULTTRANSACTIONISOLATION = "defaultTransactionIsolation"; - public final static String PROP_DEFAULTCATALOG = "defaultCatalog"; - public final static String PROP_DRIVERCLASSNAME = "driverClassName"; - public final static String PROP_MAXACTIVE = "maxActive"; - public final static String PROP_MAXIDLE = "maxIdle"; - public final static String PROP_MINIDLE = "minIdle"; - public final static String PROP_INITIALSIZE = "initialSize"; - public final static String PROP_MAXWAIT = "maxWait"; - public final static String PROP_TESTONBORROW = "testOnBorrow"; - public final static String PROP_TESTONRETURN = "testOnReturn"; - public final static String PROP_TIMEBETWEENEVICTIONRUNSMILLIS = "timeBetweenEvictionRunsMillis"; - public final static String PROP_NUMTESTSPEREVICTIONRUN = "numTestsPerEvictionRun"; - public final static String PROP_MINEVICTABLEIDLETIMEMILLIS = "minEvictableIdleTimeMillis"; - public final static String PROP_TESTWHILEIDLE = "testWhileIdle"; - public final static String PROP_PASSWORD = "password"; - public final static String PROP_URL = "url"; - public final static String PROP_USERNAME = "username"; - public final static String PROP_VALIDATIONQUERY = "validationQuery"; - public final static String PROP_VALIDATIONQUERY_TIMEOUT = "validationQueryTimeout"; + public final static String PROP_DEFAULTAUTOCOMMIT = "defaultAutoCommit"; + public final static String PROP_DEFAULTREADONLY = "defaultReadOnly"; + public final static String PROP_DEFAULTTRANSACTIONISOLATION = "defaultTransactionIsolation"; + public final static String PROP_DEFAULTCATALOG = "defaultCatalog"; + public final static String PROP_DRIVERCLASSNAME = "driverClassName"; + public final static String PROP_MAXACTIVE = "maxActive"; + public final static String PROP_MAXIDLE = "maxIdle"; + public final static String PROP_MINIDLE = "minIdle"; + public final static String PROP_INITIALSIZE = "initialSize"; + public final static String PROP_MAXWAIT = "maxWait"; + public final static String PROP_TESTONBORROW = "testOnBorrow"; + public final static String PROP_TESTONRETURN = "testOnReturn"; + public final static String PROP_TIMEBETWEENEVICTIONRUNSMILLIS = "timeBetweenEvictionRunsMillis"; + public final static String PROP_NUMTESTSPEREVICTIONRUN = "numTestsPerEvictionRun"; + public final static String PROP_MINEVICTABLEIDLETIMEMILLIS = "minEvictableIdleTimeMillis"; + public final static String PROP_TESTWHILEIDLE = "testWhileIdle"; + public final static String PROP_PASSWORD = "password"; + public final static String PROP_URL = "url"; + public final static String PROP_USERNAME = "username"; + public final static String PROP_VALIDATIONQUERY = "validationQuery"; + public final static String PROP_VALIDATIONQUERY_TIMEOUT = "validationQueryTimeout"; - public final static String PROP_INITCONNECTIONSQLS = "initConnectionSqls"; - public final static String PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED = "accessToUnderlyingConnectionAllowed"; - public final static String PROP_REMOVEABANDONED = "removeAbandoned"; - public final static String PROP_REMOVEABANDONEDTIMEOUT = "removeAbandonedTimeout"; - public final static String PROP_LOGABANDONED = "logAbandoned"; - public final static String PROP_POOLPREPAREDSTATEMENTS = "poolPreparedStatements"; - public final static String PROP_MAXOPENPREPAREDSTATEMENTS = "maxOpenPreparedStatements"; - public final static String PROP_CONNECTIONPROPERTIES = "connectionProperties"; - public final static String PROP_FILTERS = "filters"; - public final static String PROP_EXCEPTION_SORTER = "exceptionSorter"; - public final static String PROP_EXCEPTION_SORTER_CLASS_NAME = "exception-sorter-class-name"; + public final static String PROP_INITCONNECTIONSQLS = "initConnectionSqls"; + public final static String PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED = "accessToUnderlyingConnectionAllowed"; + public final static String PROP_REMOVEABANDONED = "removeAbandoned"; + public final static String PROP_REMOVEABANDONEDTIMEOUT = "removeAbandonedTimeout"; + public final static String PROP_LOGABANDONED = "logAbandoned"; + public final static String PROP_POOLPREPAREDSTATEMENTS = "poolPreparedStatements"; + public final static String PROP_MAXOPENPREPAREDSTATEMENTS = "maxOpenPreparedStatements"; + public final static String PROP_CONNECTIONPROPERTIES = "connectionProperties"; + public final static String PROP_FILTERS = "filters"; + public final static String PROP_EXCEPTION_SORTER = "exceptionSorter"; + public final static String PROP_EXCEPTION_SORTER_CLASS_NAME = "exception-sorter-class-name"; + + public final static String PROP_INIT = "init"; private final static String[] ALL_PROPERTIES = { PROP_DEFAULTAUTOCOMMIT, PROP_DEFAULTREADONLY, PROP_DEFAULTTRANSACTIONISOLATION, PROP_DEFAULTCATALOG, PROP_DRIVERCLASSNAME, @@ -78,7 +80,7 @@ public class DruidDataSourceFactory implements ObjectFactory { PROP_VALIDATIONQUERY, PROP_VALIDATIONQUERY_TIMEOUT, PROP_INITCONNECTIONSQLS, PROP_ACCESSTOUNDERLYINGCONNECTIONALLOWED, PROP_REMOVEABANDONED, PROP_REMOVEABANDONEDTIMEOUT, PROP_LOGABANDONED, PROP_POOLPREPAREDSTATEMENTS, PROP_MAXOPENPREPAREDSTATEMENTS, PROP_CONNECTIONPROPERTIES, - PROP_FILTERS, PROP_EXCEPTION_SORTER, PROP_EXCEPTION_SORTER_CLASS_NAME }; + PROP_FILTERS, PROP_EXCEPTION_SORTER, PROP_EXCEPTION_SORTER_CLASS_NAME, PROP_INIT }; @Override public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable environment) @@ -304,6 +306,11 @@ public class DruidDataSourceFactory implements ObjectFactory { dataSource.addConnectionProperty(propertyName, p.getProperty(propertyName)); } } + + value = (String) properties.get(PROP_INIT); + if ("true".equals(value)) { + dataSource.init(); + } // Return the configured DataSource instance return dataSource; diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java new file mode 100644 index 0000000000..64b7d68e28 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest.java @@ -0,0 +1,38 @@ +package com.alibaba.druid.bvt.pool; + +import java.util.Hashtable; + +import javax.naming.Reference; +import javax.naming.StringRefAddr; +import javax.sql.DataSource; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidDataSourceFactory; +import com.alibaba.druid.util.JdbcUtils; + +public class DruidDataSourceFactoryTest extends TestCase { + + private DruidDataSource dataSource; + + protected void tearDown() throws Exception { + JdbcUtils.close(dataSource); + } + + public void test_factory() throws Exception { + DruidDataSourceFactory factory = new DruidDataSourceFactory(); + + Reference ref = new Reference(DataSource.class.getName()); + ref.add(new StringRefAddr(DruidDataSourceFactory.PROP_REMOVEABANDONED, "true")); + ref.add(new StringRefAddr(DruidDataSourceFactory.PROP_MAXACTIVE, "20")); + + Hashtable env = new Hashtable(); + + dataSource = (DruidDataSource) factory.getObjectInstance(ref, null, null, env); + + Assert.assertTrue(dataSource.isRemoveAbandoned()); + Assert.assertEquals(20, dataSource.getMaxActive()); + } +}