diff --git a/pom.xml b/pom.xml index 067aa03609..62b060b3c2 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,12 @@ http://code.alibabatech.com/mvn/releases/ default + + + springsource-repo + SpringSource Repository + http://repo.springsource.org/release + @@ -164,12 +170,22 @@ 1.1.1 provided + org.springframework spring - 2.5.6 + 2.0 provided + + log4j log4j @@ -209,14 +225,14 @@ 1.2.4 provided - + postgresql postgresql 9.1-901-1.jdbc4 provided - + com.oracle ojdbc5 @@ -224,14 +240,8 @@ provided - + junit diff --git a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java index 957347ca9e..25b2106fbe 100644 --- a/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java +++ b/src/main/java/com/alibaba/druid/filter/stat/StatFilter.java @@ -643,7 +643,7 @@ public class StatFilter extends FilterEventAdapter implements StatFilterMBean { return dataSource.getUrl(); } - public final JdbcSqlStat createSqlStat(StatementProxy statement, String sql) { + public JdbcSqlStat createSqlStat(StatementProxy statement, String sql) { final ConcurrentMap sqlStatMap = dataSourceStat.getSqlStatMap(); JdbcSqlStat sqlStat = sqlStatMap.get(sql); if (sqlStat == null) { diff --git a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java index 237f1f3b09..550d43c7cf 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidAbstractDataSource.java @@ -218,6 +218,9 @@ public abstract class DruidAbstractDataSource extends WrapperAdapter implements } public void setOracle(boolean isOracle) { + if (inited) { + throw new IllegalStateException(); + } this.isOracle = isOracle; } diff --git a/src/main/java/com/alibaba/druid/support/spring/DruidNativeJdbcExtractor.java b/src/main/java/com/alibaba/druid/support/spring/DruidNativeJdbcExtractor.java index b3e66404da..4996359da6 100644 --- a/src/main/java/com/alibaba/druid/support/spring/DruidNativeJdbcExtractor.java +++ b/src/main/java/com/alibaba/druid/support/spring/DruidNativeJdbcExtractor.java @@ -1,7 +1,33 @@ package com.alibaba.druid.support.spring; -import org.springframework.jdbc.support.nativejdbc.Jdbc4NativeJdbcExtractor; +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; -public class DruidNativeJdbcExtractor extends Jdbc4NativeJdbcExtractor { +import org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractorAdapter; +public class DruidNativeJdbcExtractor extends NativeJdbcExtractorAdapter { + + protected Connection doGetNativeConnection(Connection con) throws SQLException { + return (Connection) con.unwrap(Connection.class); + } + + public Statement getNativeStatement(Statement stmt) throws SQLException { + return (Statement) stmt.unwrap(Statement.class); + } + + public PreparedStatement getNativePreparedStatement(PreparedStatement ps) throws SQLException { + return (PreparedStatement) ps.unwrap(PreparedStatement.class); + } + + public CallableStatement getNativeCallableStatement(CallableStatement cs) throws SQLException { + return (CallableStatement) cs.unwrap(CallableStatement.class); + } + + public ResultSet getNativeResultSet(ResultSet rs) throws SQLException { + return (ResultSet) rs.unwrap(ResultSet.class); + } } diff --git a/src/test/java/com/alibaba/druid/bvt/spring/DruidJdbcExtractorTest.java b/src/test/java/com/alibaba/druid/bvt/spring/DruidJdbcExtractorTest.java index 558266433c..444aa34cd2 100644 --- a/src/test/java/com/alibaba/druid/bvt/spring/DruidJdbcExtractorTest.java +++ b/src/test/java/com/alibaba/druid/bvt/spring/DruidJdbcExtractorTest.java @@ -7,8 +7,6 @@ import java.sql.Statement; import junit.framework.Assert; import junit.framework.TestCase; -import org.springframework.jdbc.support.nativejdbc.Jdbc4NativeJdbcExtractor; - import com.alibaba.druid.mock.MockCallableStatement; import com.alibaba.druid.mock.MockConnection; import com.alibaba.druid.mock.MockPreparedStatement; @@ -56,7 +54,7 @@ public class DruidJdbcExtractorTest extends TestCase { DruidDataSource dataSource = new DruidDataSource(); try { - Jdbc4NativeJdbcExtractor extractor = new Jdbc4NativeJdbcExtractor(); + DruidNativeJdbcExtractor extractor = new DruidNativeJdbcExtractor(); dataSource.setUrl("jdbc:mock:xx1"); dataSource.setFilters("stat"); diff --git a/src/test/java/com/alibaba/druid/bvt/spring/Jdbc4ExtractorTest.java b/src/test/java/com/alibaba/druid/bvt/spring/Jdbc4ExtractorTest.java deleted file mode 100644 index a54a7025c3..0000000000 --- a/src/test/java/com/alibaba/druid/bvt/spring/Jdbc4ExtractorTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.alibaba.druid.bvt.spring; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.Statement; - -import junit.framework.Assert; -import junit.framework.TestCase; - -import org.springframework.jdbc.support.nativejdbc.Jdbc4NativeJdbcExtractor; - -import com.alibaba.druid.mock.MockCallableStatement; -import com.alibaba.druid.mock.MockConnection; -import com.alibaba.druid.mock.MockPreparedStatement; -import com.alibaba.druid.mock.MockResultSet; -import com.alibaba.druid.mock.MockStatement; -import com.alibaba.druid.pool.DruidDataSource; -import com.alibaba.druid.support.spring.DruidNativeJdbcExtractor; - -public class Jdbc4ExtractorTest extends TestCase { - - public void test_spring() throws Exception { - DruidDataSource dataSource = new DruidDataSource(); - - try { - Jdbc4NativeJdbcExtractor extractor = new Jdbc4NativeJdbcExtractor(); - - dataSource.setUrl("jdbc:mock:xx1"); - Connection conn = dataSource.getConnection(); - Assert.assertEquals(true, extractor.getNativeConnection(conn) instanceof MockConnection); - - Statement stmt = conn.createStatement(); - Assert.assertEquals(true, extractor.getNativeConnectionFromStatement(stmt) instanceof MockConnection); - Assert.assertEquals(true, extractor.getNativeStatement(stmt) instanceof MockStatement); - - stmt.close(); - - PreparedStatement preStmt = conn.prepareStatement("select 1"); - Assert.assertEquals(true, extractor.getNativeConnectionFromStatement(preStmt) instanceof MockConnection); - Assert.assertEquals(true, extractor.getNativeStatement(preStmt) instanceof MockPreparedStatement); - Assert.assertEquals(true, extractor.getNativePreparedStatement(preStmt) instanceof MockPreparedStatement); - ResultSet rs = preStmt.executeQuery(); - Assert.assertEquals(true, extractor.getNativeResultSet(rs) instanceof MockResultSet); - rs.close(); - - preStmt.close(); - - PreparedStatement callStmt = conn.prepareCall("select 1"); - Assert.assertEquals(true, extractor.getNativeConnectionFromStatement(callStmt) instanceof MockConnection); - Assert.assertEquals(true, extractor.getNativeStatement(callStmt) instanceof MockCallableStatement); - Assert.assertEquals(true, extractor.getNativePreparedStatement(callStmt) instanceof MockCallableStatement); - callStmt.close(); - - conn.close(); - } finally { - dataSource.close(); - } - } - - public void test_spring_filter() throws Exception { - DruidDataSource dataSource = new DruidDataSource(); - - try { - DruidNativeJdbcExtractor extractor = new DruidNativeJdbcExtractor(); - - dataSource.setUrl("jdbc:mock:xx1"); - dataSource.setFilters("stat"); - Connection conn = dataSource.getConnection(); - Assert.assertEquals(true, extractor.getNativeConnection(conn) instanceof MockConnection); - - Statement stmt = conn.createStatement(); - Assert.assertEquals(true, extractor.getNativeConnectionFromStatement(stmt) instanceof MockConnection); - Assert.assertEquals(true, extractor.getNativeStatement(stmt) instanceof MockStatement); - - stmt.close(); - - PreparedStatement preStmt = conn.prepareStatement("select 1"); - Assert.assertEquals(true, extractor.getNativeConnectionFromStatement(preStmt) instanceof MockConnection); - Assert.assertEquals(true, extractor.getNativeStatement(preStmt) instanceof MockPreparedStatement); - Assert.assertEquals(true, extractor.getNativePreparedStatement(preStmt) instanceof MockPreparedStatement); - ResultSet rs = preStmt.executeQuery(); - Assert.assertEquals(true, extractor.getNativeResultSet(rs) instanceof MockResultSet); - rs.close(); - - preStmt.close(); - - PreparedStatement callStmt = conn.prepareCall("select 1"); - Assert.assertEquals(true, extractor.getNativeConnectionFromStatement(callStmt) instanceof MockConnection); - Assert.assertEquals(true, extractor.getNativeStatement(callStmt) instanceof MockCallableStatement); - Assert.assertEquals(true, extractor.getNativePreparedStatement(callStmt) instanceof MockCallableStatement); - callStmt.close(); - - conn.close(); - } finally { - dataSource.close(); - } - } -}