ConnectionPool的概念

原创 2006年06月09日 00:56:00

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


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ConnectionPool.java

package coreservlets; import java.sql.*;import java.util.*; /** A class for preallocating, recycling...

ConnectionPool

原文地址:http://hi.baidu.com/guowei4634/blog/item/bb16c85c66e90a47faf2c076.html:::http://blog.csdn.net/l...

基于ConnectionPool的 JDBC 工具类

1.jar:  ConnectionPool.jar 2.将  init.properties 拷贝于 src 目录下进行数据库配置 init.properties: datasource.dr...

ConnectionPool

  • 2008-07-28 11:10
  • 55KB
  • 下载

Snap-ConnectionPool资料

  • 2007-09-29 22:27
  • 355KB
  • 下载

C++ 封装、继承、多态、重载、覆盖、隐藏基本概念详解

一、面向对象的三个基本特征 (1)封装   也就是把客观事物封装为抽象的类,并且类可以把自己的数据和方法只让可信的对象或者类进行操作,不可信的类进行隐藏。 (2)继承  就是可以使用现有类的所有功能,...

性能测试概念再理解——集合点

集合点可以简单得理解为一种控制虚拟用户行为的机制,该机制可以达到在一定时间范围内将一定数量的虚拟用户阻挡在一个操作行为点前的位置进行互相等待,在条件(达到虚拟用户数量或超时)到达后唤醒全部等待中的虚拟...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)