refactor DruidDataSourceFactory

This commit is contained in:
wenshao
2012-08-11 20:58:00 +08:00
parent 35d4416bd5
commit 4eda7cb278
2 changed files with 78 additions and 33 deletions
@@ -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;
@@ -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<String, String> env = new Hashtable<String, String>();
dataSource = (DruidDataSource) factory.getObjectInstance(ref, null, null, env);
Assert.assertTrue(dataSource.isRemoveAbandoned());
Assert.assertEquals(20, dataSource.getMaxActive());
}
}