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


python connection pool

import MySQLdb from DBUtils.PooledDB import PooledDB pool = PooledDB(MySQLdb,15,host='localhost',u...
  • robert198837
  • robert198837
  • 2013年12月26日 23:22
  • 1369

okhttp ConnectionPool使用例子

okhttp ConnectionPool使用例子
  • jacke121
  • jacke121
  • 2017年03月26日 11:01
  • 1613

ConnectionPool

参照夏昕的hibernate书中的连接池例子,来了解装饰模式如何应用。 先新建一个连接池接口。 ConnectionPool.javaJava代码 package com.javapatterns.d...
  • LIXG425
  • LIXG425
  • 2009年09月13日 03:08
  • 349

从一个ConnectionPool的实现看design pattern的运用 (二)

 从一个ConnectionPool的实现看design pattern的运用 (二)好啦,现在让我们看看我们是怎样设计这个ConnectionPool的接口的。Public interface Co...
  • ajoo
  • ajoo
  • 2002年07月22日 10:26
  • 2934

ConnectionPool

import  java.sql.DriverManager;  import  java.sql.Connection;  import  java.sql.SQLException;   impo...
  • liyong1115
  • liyong1115
  • 2008年12月06日 16:14
  • 536

ConnectionPool

原文地址:http://hi.baidu.com/guowei4634/blog/item/bb16c85c66e90a47faf2c076.html:::http://blog.csdn.net/l...
  • terry1989
  • terry1989
  • 2011年03月30日 08:31
  • 241

数据库链接管理类Twisted adbapi.ConnectionPool

转自:http://blog.csdn.net/vinrex/article/details/38423109 【如何使用 adbapi?】 不同于直接创建数据库连接, 而是使用 adbapi.Co...
  • xuxiatian
  • xuxiatian
  • 2016年10月31日 15:02
  • 1453

Okhttp之连接池ConnectionPool简单分析(一)

ConnectionPool
  • chunqiuwei
  • chunqiuwei
  • 2017年07月05日 23:07
  • 1248

java开发中ConnectionPool 连接不同数据库的实现

在JAVA开发中,有时候会遇到要连接多个不同的数据库,可能一个是SQLSERVER, 另一个是Vertica. 那么我们怎么在一个ConnectionPool工具类中实现连接不同的数据库呢? 下面是代...
  • zhanglc_5168
  • zhanglc_5168
  • 2015年02月02日 16:26
  • 1609

okHttp连接流程

在okhttp发起请求的调用链中,在发起请求之前需要建立连接,负责建立连接的就是ConnectInterceptor.intercept了 @Override public Response ...
  • fengrui_sd
  • fengrui_sd
  • 2018年01月08日 16:54
  • 31
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ConnectionPool的概念
举报原因:
原因补充:

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