enhydraboy

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  欧自己做了个连接池。主要参考了这篇文章:使用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驱动出了什么毛病。

posted on 2004-05-20 15:57  Enhydraboy  阅读(1595)  评论(5编辑  收藏  举报