本帖最后由 shashadezhu888 于 2010-10-11 14:45:05 编辑

解决方案 »

  1.   

    楼主,你用动态代理重写的close()方法没起作用啊,虽然if是可以进,但不论是否close方法,method.invoke(this.realConnection, argsd)这句依然会调用,也就是还是会关闭连接,我感觉你应该写在else里面的。
      

  2.   

    说的就是你第二次用的时候,我的意思是close()方法并没有达到你需要的效果,并不是说close()方法没有关闭连接,恰恰因为你这个close()方法重写了等于没重写,你第一次关闭的时候是把它放入了连接池,但同时也把它关闭了,第二次你从连接池取出来的是已经关闭了的连接,当然要报异常了。楼主改成这样再试试:if(method.getName().equals("close")){
    System.out.println("重写了close 方法前 "+this.dataSource.connectionPool.size());this.dataSource.connectionPool.addLast(this.wraptedConnection);System.out.println("重写了close 方法后 "+this.dataSource.connectionPool.size());
    return null;
    }
    return method.invoke(this.realConnection, argsd);