修正isWrapFor && unwrap

git-svn-id: http://code.alibabatech.com/svn/druid/trunk@478 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
wenshao
2011-07-19 09:48:20 +00:00
parent babcee9b43
commit 97e4f4ecde
5 changed files with 33 additions and 10 deletions
@@ -447,15 +447,14 @@ public class PoolableConnection implements PooledConnection, Connection {
@Override
public <T> T unwrap(Class<T> iface) throws SQLException {
checkOpen();
if (conn == null) {
return null;
}
return conn.unwrap(iface);
}
@Override
public boolean isWrapperFor(Class<?> iface) throws SQLException {
checkOpen();
return conn.isWrapperFor(iface);
}
@@ -42,6 +42,7 @@ public final class PoolableResultSet extends PoolableWrapper implements ResultSe
private boolean closed = false;
public PoolableResultSet(PoolableStatement stmt, ResultSet rs){
super(rs);
this.stmt = stmt;
this.rs = rs;
}
@@ -30,14 +30,17 @@ import com.alibaba.druid.logging.LogFactory;
* @author wenshao<szujobs@hotmail.com>
*/
public class PoolableStatement extends PoolableWrapper implements Statement {
private final static Log LOG = LogFactory.getLog(PoolableStatement.class);
private final static Log LOG = LogFactory.getLog(PoolableStatement.class);
private final Statement stmt;
protected PoolableConnection conn;
protected final List<ResultSet> resultSetTrace = new ArrayList<ResultSet>();
protected boolean closed = false;
public PoolableStatement(PoolableConnection conn, Statement stmt){
super(stmt);
this.conn = conn;
this.stmt = stmt;
}
@@ -23,6 +23,12 @@ import java.sql.Wrapper;
*/
public class PoolableWrapper implements Wrapper {
private final Wrapper wraaper;
public PoolableWrapper(Wrapper wraaper){
this.wraaper = wraaper;
}
@Override
public boolean isWrapperFor(Class<?> iface) throws SQLException {
if (iface == null) {
@@ -32,8 +38,12 @@ public class PoolableWrapper implements Wrapper {
if (iface.isInstance(this)) {
return true;
}
if (iface.isInstance(wraaper)) {
return true;
}
return false;
return wraaper.isWrapperFor(iface);
}
@SuppressWarnings("unchecked")
@@ -46,8 +56,12 @@ public class PoolableWrapper implements Wrapper {
if (iface.isInstance(this)) {
return (T) this;
}
if (iface.isInstance(wraaper)) {
return (T) wraaper;
}
return null;
return wraaper.unwrap(iface);
}
}
@@ -3,11 +3,11 @@ package com.alibaba.druid.bvt.pool;
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 com.alibaba.druid.mock.MockStatement;
import com.alibaba.druid.pool.DruidDataSource;
public class Case3 extends TestCase {
@@ -50,14 +50,20 @@ public class Case3 extends TestCase {
ResultSet rs = stmt.executeQuery();
rs.next();
MockStatement mockStmt = stmt.unwrap(MockStatement.class);
Assert.assertEquals(false, mockStmt.isClosed());
conn.close();
Assert.assertEquals(true, mockStmt.isClosed());
Assert.assertEquals(true, stmt.isClosed());
Assert.assertEquals(true, rs.isClosed());
rs.close();
stmt.close();
stmt.execute("SELECT 1");
dataSource.close();
}