diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java index ec450c8080..de12bae323 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSourceFactory.java @@ -30,8 +30,13 @@ import javax.naming.Reference; import javax.naming.spi.ObjectFactory; import javax.sql.DataSource; +import com.alibaba.druid.support.logging.Log; +import com.alibaba.druid.support.logging.LogFactory; + public class DruidDataSourceFactory implements ObjectFactory { + private final static Log LOG = LogFactory.getLog(DruidDataSourceFactory.class); + static final int UNKNOWN_TRANSACTIONISOLATION = -1; public final static String PROP_DEFAULTAUTOCOMMIT = "defaultAutoCommit"; @@ -106,7 +111,7 @@ public class DruidDataSourceFactory implements ObjectFactory { return createDataSource(properties); } - + @SuppressWarnings("rawtypes") public static DataSource createDataSource(Properties properties) throws Exception { return createDataSource((Map) properties); @@ -150,9 +155,9 @@ public class DruidDataSourceFactory implements ObjectFactory { try { level = Integer.parseInt(value); } catch (NumberFormatException e) { - System.err.println("Could not parse defaultTransactionIsolation: " + value); - System.err.println("WARNING: defaultTransactionIsolation not set"); - System.err.println("using default value of database driver"); + LOG.error("Could not parse defaultTransactionIsolation: " + value); + LOG.error("WARNING: defaultTransactionIsolation not set"); + LOG.error("using default value of database driver"); level = UNKNOWN_TRANSACTIONISOLATION; } } diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceC3P0AdapterTest.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceC3P0AdapterTest.java new file mode 100644 index 0000000000..d98421fae1 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceC3P0AdapterTest.java @@ -0,0 +1,49 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; + +import org.junit.Assert; + +import junit.framework.TestCase; + +import com.alibaba.druid.mock.MockDriver; +import com.alibaba.druid.pool.DruidDataSourceC3P0Adapter; + +public class DruidDataSourceC3P0AdapterTest extends TestCase { + + private DruidDataSourceC3P0Adapter dataSource; + + protected void setUp() throws Exception { + dataSource = new DruidDataSourceC3P0Adapter(); + dataSource.setJdbcUrl("jdbc:mock:xxx"); + dataSource.setInitialPoolSize(1); + } + + protected void tearDown() throws Exception { + dataSource.close(); + } + + public void test_conn_err() throws Exception { + Exception error = null; + try { + dataSource.getConnection(null, null); + } catch (UnsupportedOperationException e) { + error = e; + } + Assert.assertNotNull(error); + } + + public void test_getDriverClass() throws Exception { + Assert.assertNull(dataSource.getDriverClass()); + + Connection conn = dataSource.getConnection(); + conn.close(); + + Assert.assertEquals(MockDriver.class.getName(), dataSource.getDriverClass()); + Assert.assertEquals(MockDriver.instance, dataSource.getDriver()); + } + + public void test_getJdbcUrl() throws Exception { + Assert.assertEquals("jdbc:mock:xxx", dataSource.getJdbcUrl()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest1.java b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest1.java new file mode 100644 index 0000000000..fa6a574fae --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/pool/DruidDataSourceFactoryTest1.java @@ -0,0 +1,163 @@ +package com.alibaba.druid.bvt.pool; + +import java.sql.Connection; +import java.util.Properties; + +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 DruidDataSourceFactoryTest1 extends TestCase { + + public void test_NONE() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_DEFAULTTRANSACTIONISOLATION, "NONE"); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertEquals(Connection.TRANSACTION_NONE, dataSource.getDefaultTransactionIsolation().intValue()); + + } finally { + JdbcUtils.close(dataSource); + } + } + + public void test_READ_COMMITTED() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_DEFAULTTRANSACTIONISOLATION, "READ_COMMITTED"); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertEquals(Connection.TRANSACTION_READ_COMMITTED, + dataSource.getDefaultTransactionIsolation().intValue()); + + } finally { + JdbcUtils.close(dataSource); + } + } + + public void test_READ_UNCOMMITTED() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_DEFAULTTRANSACTIONISOLATION, "READ_UNCOMMITTED"); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, + dataSource.getDefaultTransactionIsolation().intValue()); + + } finally { + JdbcUtils.close(dataSource); + } + } + + public void test_REPEATABLE_READ() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_DEFAULTTRANSACTIONISOLATION, "REPEATABLE_READ"); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertEquals(Connection.TRANSACTION_REPEATABLE_READ, + dataSource.getDefaultTransactionIsolation().intValue()); + + } finally { + JdbcUtils.close(dataSource); + } + } + + public void test_SERIALIZABLE() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_DEFAULTTRANSACTIONISOLATION, "SERIALIZABLE"); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertEquals(Connection.TRANSACTION_SERIALIZABLE, + dataSource.getDefaultTransactionIsolation().intValue()); + + } finally { + JdbcUtils.close(dataSource); + } + } + + public void test_other() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_DEFAULTTRANSACTIONISOLATION, "xxx"); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertEquals(-1, dataSource.getDefaultTransactionIsolation().intValue()); + + } finally { + JdbcUtils.close(dataSource); + } + } + + public void test_integer() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_DEFAULTTRANSACTIONISOLATION, + Integer.toString(Connection.TRANSACTION_SERIALIZABLE)); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertEquals(Connection.TRANSACTION_SERIALIZABLE, + dataSource.getDefaultTransactionIsolation().intValue()); + + } finally { + JdbcUtils.close(dataSource); + } + } + + public void test_init() throws Exception { + Properties properties = new Properties(); + properties.put(DruidDataSourceFactory.PROP_URL, "jdbc:mock:xxx"); + properties.put(DruidDataSourceFactory.PROP_INIT, "true"); + + DruidDataSource dataSource = null; + + try { + dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties); + + Assert.assertEquals("jdbc:mock:xxx", dataSource.getUrl()); + Assert.assertTrue(dataSource.isInited()); + } finally { + JdbcUtils.close(dataSource); + } + } +}