欧自己做了个连接池。主要参考了这篇文章:使用JAVA中的动态代理实现数据库连接池。可是里面的proxy机制,对于Microsoft sql2000的官方jdbc会导致classcastexcption的异常。网上看到过,据说Weblogic提供的sqlserver的jdbc也一样。
下面的代码,在Microsoft sql2000的官方jdbc通不过。
public java.sql.Connection getConnection()
{ return (java.sql.Connection)Proxy.newProxyInstance( conn.getClass().getClassLoader(),
conn.getClass().getInterfaces(),
this); }
可能和jdbc驱动有关系吧。后来只能想了个笨办法, 自己做了一个EnhydraboyPooledConnection类。
public final class EnhydraboyPooledConnection implements Connection {
private Connection conn=null;
public EnhydraboyPooledConnection(Connection conn) {
this.conn=conn;
}
public Statement createStatement() throws SQLException {
return conn.createStatement();
}
....
}
把java.sql.connection接口的方法都实现一遍,也简单,就调用conn.方法就可以了。
DatasourceImpl里面,在创建代理连接(_Connection类)对象实例的地方,都写成这样
Connection cn=newConnection();
_Connection conn=new _Connection(new EnhydraboyPooledConnection(cn),false,i);
这样就好了,没搞明白,到底SQLServer jdbc驱动出了什么毛病。