关闭

ConnectionPool的概念

1124人阅读 评论(0) 收藏 举报

package org.adam.proxy;

import java.lang.reflect.*;
import java.sql.*;

import org.com.pool.*;

/**
* 采用了Dynamic Proxy模式来解决程序员的惯性动作---

* connection.close()---如果真正把连接关闭了,那么连接池的

* 的概念就不存在了,要做到真正重用,不是把连接关闭,而是要

* 使用完的连接重新放到池里,等待下次重用.所以,这里采用了

* 方法拦截器来实现这个connection.close()所带来的关闭连接

* 问题.当客户调用connection.close()将触发方法拦截器,这个

* 时候就可以在invoke(...)方法里进行相关操作,如---把连接

* 重新放回连接池 !---Proxy模式比Decorator模式方便多了,

* 在此便是一个好例子,^_^

* @author Adam Email: yangjh@tarena.com

* @version 1.0.2

*

*/

public class ConnectionHandler implements InvocationHandler{
 Connection dbconn;
 TestConnectionPoolSecond pool;
 
 public ConnectionHandler(TestConnectionPoolSecond pool){
  this.pool = pool;
 }

 /**
 * 将动态代理绑定到指定的Connection

 * @param conn;
 
 * @return 绑定代理后的Connection

 */

 public Connection bind(Connection conn){
  this.dbconn = conn;

  Connection proxyConn = (Connection)Proxy.newProxyInstance(conn.getClass().getClassLoader(),conn.getClass().getInterfaces(),this);

  return proxyConn;
 }

 /**
 * 方法调用拦截器
 
 * 判断当前调用的方法是否为"close"方法

 * 如果是的话,调用pool.returnConnection(Connection con)

 * 方法作为标准close方法的替代!

 */

 public Object invoke(Object proxy,Method method,Object[]args)throws Throwable{
  Object obj = null;
  //如果调用的是close方法,则永pool.returnConnection(Connection con)将其替换
  if("close".equals(method.getName())){
   pool.returnConnection(dbconn);
  }else{
   obj = method.invoke(dbconn,args);
  }
  return obj;
 }
}

 

package org.adam.proxy;

import java.lang.reflect.*;
import java.sql.*;

import org.com.pool.*;

/**
* 采用了Dynamic Proxy模式来解决程序员的惯性动作---

* connection.close()---如果真正把连接关闭了,那么连接池的

* 的概念就不存在了,要做到真正重用,不是把连接关闭,而是要

* 使用完的连接重新放到池里,等待下次重用.所以,这里采用了

* 方法拦截器来实现这个connection.close()所带来的关闭连接

* 问题.当客户调用connection.close()将触发方法拦截器,这个

* 时候就可以在invoke(...)方法里进行相关操作,如---把连接

* 重新放回连接池 !---Proxy模式比Decorator模式方便多了,

* 在此便是一个好例子,^_^

* @author Adam Email: yangjh@tarena.com

* @version 1.0.2

*

*/

public class ConnectionHandler implements InvocationHandler{
 Connection dbconn;
 TestConnectionPoolSecond pool;
 
 public ConnectionHandler(TestConnectionPoolSecond pool){
  this.pool = pool;
 }

 /**
 * 将动态代理绑定到指定的Connection

 * @param conn;
 
 * @return 绑定代理后的Connection

 */

 public Connection bind(Connection conn){
  this.dbconn = conn;

  Connection proxyConn = (Connection)Proxy.newProxyInstance(conn.getClass().getClassLoader(),conn.getClass().getInterfaces(),this);

  return proxyConn;
 }

 /**
 * 方法调用拦截器
 
 * 判断当前调用的方法是否为"close"方法

 * 如果是的话,调用pool.returnConnection(Connection con)

 * 方法作为标准close方法的替代!

 */

 public Object invoke(Object proxy,Method method,Object[]args)throws Throwable{
  Object obj = null;
  //如果调用的是close方法,则永pool.returnConnection(Connection con)将其替换
  if("close".equals(method.getName())){
   pool.returnConnection(dbconn);
  }else{
   obj = method.invoke(dbconn,args);
  }
  return obj;
 }
}

 

jdbcinfo.properties

# Sample ResourceBundle properties file
driver_name=com.pointbase.jdbc.jdbcUniversalDriver
db_url=jdbc:pointbase:server://localhost/Adam
user_name=PBPUBLIC
password=PBPUBLIC
initialConnections=2
incrementalConnections=5
maxConnections=10


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1457次
    • 积分:22
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档
    阅读排行
    评论排行