diff --git a/README b/README index cd1c4dd564..501135c3a6 100644 --- a/README +++ b/README @@ -6,4 +6,13 @@ mvn install:install-file -Dfile=lib/oracle/10.2.0.2/ojdbc14_g.jar -DgroupId=com. mvn install:install-file -Dfile=lib/oracle/10.2.0.5/ojdbc14_g.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.5 -Dpackaging=jar -DgeneratePom=true mvn install:install-file -Dfile=lib/oracle/11.2.0.3/ojdbc5_g.jar -DgroupId=com.oracle -DartifactId=ojdbc5 -Dversion=11.2.0.3 -Dpackaging=jar -DgeneratePom=true -mvn install:install-file -Dfile=lib/oracle/11.2.0.3/ojdbc6_g.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -DgeneratePom=true \ No newline at end of file +mvn install:install-file -Dfile=lib/oracle/11.2.0.3/ojdbc6_g.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar -DgeneratePom=true + +mvn install:install-file -Dfile=lib/proxool/proxool-0.9.1.jar -DgroupId=proxool -DartifactId=proxool -Dversion=0.9.1 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=lib/proxool/proxool-cglib.jar -DgroupId=proxool -DartifactId=proxool-cglib -Dversion=0.9.1 -Dpackaging=jar -DgeneratePom=true + +mvn install:install-file -Dfile=lib/jboss/4.2.3/jboss-common.jar -DgroupId=jboss -DartifactId=jboss-common -Dversion=4.2.3 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=lib/jboss/4.2.3/jboss-remoting.jar -DgroupId=jboss -DartifactId=jboss-remoting -Dversion=4.2.3 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=lib/jboss/4.2.3/jboss-serialization.jar -DgroupId=jboss -DartifactId=jboss-serialization -Dversion=4.2.3 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=lib/jboss/4.2.3/jboss.jar -DgroupId=jboss -DartifactId=jboss -Dversion=4.2.3 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=lib/jboss/4.2.3/jboss-transaction.jar -DgroupId=jboss -DartifactId=jboss-transaction -Dversion=4.2.3 -Dpackaging=jar -DgeneratePom=true \ No newline at end of file diff --git a/lib/proxool/proxool-0.9.1-sources.jar b/lib/proxool/proxool-0.9.1-sources.jar new file mode 100644 index 0000000000..a276e0d438 Binary files /dev/null and b/lib/proxool/proxool-0.9.1-sources.jar differ diff --git a/lib/proxool/proxool-0.9.1.jar b/lib/proxool/proxool-0.9.1.jar new file mode 100644 index 0000000000..ffb163f24e Binary files /dev/null and b/lib/proxool/proxool-0.9.1.jar differ diff --git a/lib/proxool/proxool-cglib.jar b/lib/proxool/proxool-cglib.jar new file mode 100644 index 0000000000..4fe25c136d Binary files /dev/null and b/lib/proxool/proxool-cglib.jar differ diff --git a/pom.xml b/pom.xml index 58ba81d759..60b16c74f9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.alibaba druid - 0.1.18 + 0.1.19-SNAPSHOT druid @@ -54,7 +54,7 @@ http://code.alibabatech.com/wiki/display/Druid/Home - JIRA + Jira http://code.alibabatech.com/jira/browse/DRUID @@ -278,12 +278,37 @@ 0.7.1.RELEASE test + + com.jolbox + bonecp-benchmark + 0.7.1-rc2 + test + + + com.jolbox + bonecp-test-commons + 0.7.1-rc2 + test + + + + proxool + proxool + 0.9.1 + test + + + proxool + proxool-cglib + 0.9.1 + test + + c3p0 c3p0 0.9.1.2 test - \ No newline at end of file diff --git a/src/test/java/com/alibaba/druid/TestForZY.java b/src/test/java/com/alibaba/druid/TestForZY.java new file mode 100644 index 0000000000..f5efa014c3 --- /dev/null +++ b/src/test/java/com/alibaba/druid/TestForZY.java @@ -0,0 +1,15 @@ +package com.alibaba.druid; + +import java.util.HashMap; +import java.util.Map; + + +public class TestForZY { + public void foo() throws Exception { + Map> m = new HashMap>(); + } + + public static class A { + private T value; + } +} diff --git a/src/test/java/com/alibaba/druid/TestLinkedTransferQueue.java b/src/test/java/com/alibaba/druid/TestLinkedTransferQueue.java new file mode 100644 index 0000000000..8b67bbfd02 --- /dev/null +++ b/src/test/java/com/alibaba/druid/TestLinkedTransferQueue.java @@ -0,0 +1,28 @@ +package com.alibaba.druid; + +import junit.framework.TestCase; + +import com.alibaba.druid.util.LinkedTransferQueue; + +public class TestLinkedTransferQueue extends TestCase { + + public void test_LinkedTransferQueue() throws Exception { + final LinkedTransferQueue q = new LinkedTransferQueue(); + + Thread thread = new Thread() { + + public void run() { + for (;;) { + try { + q.take(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + }; + thread.start(); + q.put("1"); + } +} diff --git a/src/test/java/com/alibaba/druid/pool/bonecp/TestLRU.java b/src/test/java/com/alibaba/druid/pool/bonecp/TestLRU.java new file mode 100644 index 0000000000..95ed2ba3e4 --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/bonecp/TestLRU.java @@ -0,0 +1,130 @@ +package com.alibaba.druid.pool.bonecp; + +import java.lang.reflect.Field; +import java.sql.Connection; + +import javax.sql.DataSource; + +import junit.framework.TestCase; + +import org.apache.commons.dbcp.BasicDataSource; +import org.logicalcobwebs.proxool.ProxoolDataSource; + +import com.alibaba.druid.mock.MockConnection; +import com.alibaba.druid.pool.DruidDataSource; +import com.jolbox.bonecp.BoneCPDataSource; +import com.jolbox.bonecp.ConnectionHandle; +import com.mchange.v2.c3p0.ComboPooledDataSource; +import com.mchange.v2.c3p0.impl.NewProxyConnection; + +public class TestLRU extends TestCase { + + public void f_test_boneCP() throws Exception { + BoneCPDataSource ds = new BoneCPDataSource(); + ds.setJdbcUrl("jdbc:mock:test"); + ds.setPartitionCount(1); + ds.setMaxConnectionsPerPartition(10); + ds.setMinConnectionsPerPartition(0); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_druid() throws Exception { + DruidDataSource ds = new DruidDataSource(); + ds.setUrl("jdbc:mock:test"); + ds.setMaxIdle(10); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_dbcp() throws Exception { + BasicDataSource ds = new BasicDataSource(); + ds.setUrl("jdbc:mock:test"); + ds.setMaxIdle(10); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_c3p0() throws Exception { + ComboPooledDataSource ds = new ComboPooledDataSource(); + ds.setJdbcUrl("jdbc:mock:test"); + ds.setMaxPoolSize(10); + ds.setMinPoolSize(0); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_proxool() throws Exception { + ProxoolDataSource ds = new ProxoolDataSource(); + ds.setDriver("com.alibaba.druid.mock.MockDriver"); + ds.setDriverUrl("jdbc:mock:test"); + ds.setMaximumConnectionCount(10); + ds.setMinimumConnectionCount(0); + ds.setUser("user"); + ds.setPassword("password"); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + +// public void test_jboss() throws Exception { +// LocalTxDataSource ds = new LocalTxDataSource(); +// ds.setDriverClass("com.alibaba.druid.mock.MockDriver"); +// ds.setConnectionURL("jdbc:mock:test"); +// ds.setMaxSize(10); +// ds.setMinSize(0); +// ds.setUserName("user"); +// ds.setPassword("password"); +// +// for (int i = 0; i < 10; ++i) { +// f(ds, 5); +// System.out.println("--------------------------------------------"); +// } +// } + + public static void f(DataSource ds, int count) throws Exception { + Connection[] connections = new Connection[count]; + for (int i = 0; i < count; ++i) { + connections[i] = ds.getConnection(); + } + + for (int i = 0; i < count; ++i) { + System.out.println(unwrap(connections[i]).getId()); + } + + for (int i = count - 1; i >= 0; --i) { + connections[i].close(); + } + } + + public static MockConnection unwrap(Connection conn) throws Exception { + if (conn instanceof ConnectionHandle) { + ConnectionHandle handle = (ConnectionHandle) conn; + return (MockConnection) handle.getInternalConnection(); + } + if (conn instanceof NewProxyConnection) { + NewProxyConnection handle = (NewProxyConnection) conn; + + Field field = NewProxyConnection.class.getDeclaredField("inner"); + field.setAccessible(true); + return (MockConnection) field.get(handle); + } + + return conn.unwrap(MockConnection.class); + } + +} diff --git a/src/test/java/com/alibaba/druid/pool/bonecp/TestPSCache.java b/src/test/java/com/alibaba/druid/pool/bonecp/TestPSCache.java new file mode 100644 index 0000000000..886e2a2715 --- /dev/null +++ b/src/test/java/com/alibaba/druid/pool/bonecp/TestPSCache.java @@ -0,0 +1,129 @@ +package com.alibaba.druid.pool.bonecp; + +import java.lang.reflect.Field; +import java.sql.Connection; +import java.sql.PreparedStatement; + +import javax.sql.DataSource; + +import junit.framework.TestCase; + +import org.apache.commons.dbcp.BasicDataSource; +import org.logicalcobwebs.proxool.ProxoolDataSource; + +import com.alibaba.druid.mock.MockConnection; +import com.alibaba.druid.mock.MockPreparedStatement; +import com.alibaba.druid.pool.DruidDataSource; +import com.jolbox.bonecp.BoneCPDataSource; +import com.jolbox.bonecp.ConnectionHandle; +import com.mchange.v2.c3p0.ComboPooledDataSource; +import com.mchange.v2.c3p0.impl.NewProxyConnection; +import com.mchange.v2.c3p0.impl.NewProxyPreparedStatement; + +public class TestPSCache extends TestCase { + + public void test_boneCP() throws Exception { + BoneCPDataSource ds = new BoneCPDataSource(); + ds.setJdbcUrl("jdbc:mock:test"); + ds.setPartitionCount(1); + ds.setMaxConnectionsPerPartition(10); + ds.setMinConnectionsPerPartition(0); + ds.setPreparedStatementsCacheSize(10); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_druid() throws Exception { + DruidDataSource ds = new DruidDataSource(); + ds.setUrl("jdbc:mock:test"); + ds.setMaxIdle(10); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_dbcp() throws Exception { + BasicDataSource ds = new BasicDataSource(); + ds.setUrl("jdbc:mock:test"); + ds.setMaxIdle(10); + ds.setPoolPreparedStatements(true); + ds.setMaxOpenPreparedStatements(10); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_c3p0() throws Exception { + ComboPooledDataSource ds = new ComboPooledDataSource(); + ds.setJdbcUrl("jdbc:mock:test"); + ds.setMaxPoolSize(10); + ds.setMinPoolSize(0); + ds.setMaxStatements(10); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public void f_test_proxool() throws Exception { + ProxoolDataSource ds = new ProxoolDataSource(); + ds.setDriver("com.alibaba.druid.mock.MockDriver"); + ds.setDriverUrl("jdbc:mock:test"); + ds.setMaximumConnectionCount(10); + ds.setMinimumConnectionCount(0); + ds.setUser("user"); + ds.setPassword("password"); + + for (int i = 0; i < 10; ++i) { + f(ds, 5); + System.out.println("--------------------------------------------"); + } + } + + public static void f(DataSource ds, int count) throws Exception { + Connection conn = ds.getConnection(); + + for (int i = 0; i < count; ++i) { + PreparedStatement stmt = conn.prepareStatement("SELECT 1"); + System.out.println(System.identityHashCode(unwrap(stmt))); + stmt.close(); + } + + conn.close(); + } + + public static MockPreparedStatement unwrap(PreparedStatement stmt) throws Exception { + if (stmt instanceof NewProxyPreparedStatement) { + Field field = NewProxyPreparedStatement.class.getDeclaredField("inner"); + field.setAccessible(true); + return (MockPreparedStatement) field.get(stmt); + } + MockPreparedStatement mockStmt = stmt.unwrap(MockPreparedStatement.class); + return mockStmt; + } + + public static MockConnection unwrap(Connection conn) throws Exception { + if (conn instanceof ConnectionHandle) { + ConnectionHandle handle = (ConnectionHandle) conn; + return (MockConnection) handle.getInternalConnection(); + } + if (conn instanceof NewProxyConnection) { + NewProxyConnection handle = (NewProxyConnection) conn; + + Field field = NewProxyConnection.class.getDeclaredField("inner"); + field.setAccessible(true); + return (MockConnection) field.get(handle); + } + + return conn.unwrap(MockConnection.class); + } + +}