mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
修正isWrapFor && unwrap
git-svn-id: http://code.alibabatech.com/svn/druid/trunk@478 b9813039-fb51-4c41-a8b9-e21c2acb5095
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user