`
ccx20060810501
  • 浏览: 32484 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

数据库连接池——JDBC通过代理模式来保持用户关闭连接的习惯

阅读更多

基本思想:拦截Connection的close()方法,具体做法:使用代理模式来实现

核心代码:

public class MyConnection implements Connection {
	private Connection realConnection;
	private MyDataSource myDataSource;

	MyConnection(Connection connection, MyDataSource myDataSource) {
		this.realConnection = connection;
		this.myDataSource = myDataSource;
	}
......
......
@Override
	public void close() throws SQLException {
		// TODO Auto-generated method stub
		myDataSource.getConnectionPool().addLast(this);
	}
......
......
}

使用动态代理:

/**
 * 
 */
package datasource;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;

/**
 * 
 * 2009-9-29
 * 
 * 湖南大学 计算机与通信学院 计算机科学与技术专业
 * 
 * @author 陈春晓
 * 
 */
public class MyConnectionHander implements InvocationHandler {
	private Connection realConnection = null;
	private Connection warpedConnection = null;
	private MyDataSource myDataSource = null;

	public MyConnectionHander(MyDataSource myDataSource) {
		this.myDataSource = myDataSource;
	}

	Connection bind(Connection realConn) {
		this.realConnection = realConn;
		this.warpedConnection = (Connection) Proxy.newProxyInstance(this.getClass()
				.getClassLoader(), new Class[] { Connection.class }, this);
		return warpedConnection;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
	 *      java.lang.reflect.Method, java.lang.Object[])
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		// TODO Auto-generated method stub
		if ("close".equals(method.getName())) {
			this.myDataSource.getConnectionPool().addLast(warpedConnection);
		}
		return method.invoke(this.realConnection, args);
	}

}
 

完整代码见附件:

分享到:
评论

相关推荐

    Java数据库编程宝典3

    4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 ...

    Java数据库编程宝典2

    4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 ...

    Java数据库编程宝典1

    4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 ...

    Java数据库编程宝典4

    4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 ...

    JDBC API教程与参考手册part3

    以此为起点,您将学习如何建立数据库、如何建立连接、如何从结果集中获取值以及如何使用准备语句,从而学会创建完整的JDBC应用程序。另外,本书提供了很多示例,也举例说明了执行通用任务的方法。然后,本书转向更...

    JDBC API教程与参考手册part4

    以此为起点,您将学习如何建立数据库、如何建立连接、如何从结果集中获取值以及如何使用准备语句,从而学会创建完整的JDBC应用程序。另外,本书提供了很多示例,也举例说明了执行通用任务的方法。然后,本书转向更...

    JDBC API教程与参考手册part2

    以此为起点,您将学习如何建立数据库、如何建立连接、如何从结果集中获取值以及如何使用准备语句,从而学会创建完整的JDBC应用程序。另外,本书提供了很多示例,也举例说明了执行通用任务的方法。然后,本书转向更...

    支持多数据库的ORM框架ef-orm.zip

    该框架对应用环境、连接池、 是否为J2EE应用等没有特殊要求。可以和EJB集成,也可与Spring集成,也可以单独使用。整个框架只有两个JAR包,模块和功能都较为轻量。依赖少 整个框架只有三个jar库。间接依赖仅有...

    基于JSP的码头船只出行及配套货柜码放管理系统,高分毕业设计,技术小白必看!

    数据库连接池的统一管理,如果程序需要连接,则从此池中取出一个连接使用,使用完后又返回给该池,这些连接可以互用,从而提高的效率。 另外,在构建开发环境的时候,我们使用MySQL+Tomcat+MyEclipse,由于这三者的...

    java面试题库2021.pdf

    ②数据库连接池 ③事物管理, 批处理 3、 JDBC 进阶 五、 XML 编程 1、 XML 基础 2、 XML 进阶 3、 Web service ①WSDL 与 SOAP 协议 六、 计算机网络 1、 网络概述 ①关于分层 2、 运输层 ①TCP 与 UDP ②协议 3、 ...

    Mysql的学习笔记01

    模块2:连接池,Mysql自身有个连接池,为了连接线程的复用,Mysql将其进行了池化。将连接资源进行了池化,使得连接线程可以复用。(mysql 5.5以后) 模块3:SQL接口,接受SQL命令后,调用SQL接口,执行并返回相应的...

    基于BootStrap+JSP+Servlet+Mysql的模拟咖啡厅点餐系统源码+数据库+项目说明.zip

    环境配置(Tomcat与JDK的版本使用问题,DBCP/C3P0数据库连接池的配置问题) 2. 登录(会话)维持————session/cookies 3. 分页显示————PageModel/jdbc-mysql查 ### 实现图 ![主页]...

    JAVA WEB典型模块与项目实战大全

    13.2 数据库连接池  13.3 commons dbutils组件  13.4 小结  第14章 ajax技术jquary框架的经典应用  14.1 jquery框架的简单应用  14.2 利用jquery框架实现的经典运用  14.3 实现仿google suggest功能...

    JavaWeb每日总结思维导图

    内容包括:MySQL、MySQL约束&多表、MySQL多表&事务、JDBC、数据库连接池、HTML、CSS、JS基础&高级、BootStrap、XML、Tomcat、Servlet&HTTP&Request、Response、Cookie&Session、JSP&EL&JSTL、Filter&Listener、...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    所有的配置工作都集中在服务器端且所有客户端请求都是通过DBMS来访问数据库,从而大大减少了数据直接暴露的风险。 第四章 系统设计 4.1开发框架技术介绍 对于框架技术,我们采用Struts+ajax的整合! Struts是应用...

    讨论区BBS网站

    本系统采用JSP+Servlet+Java bean模式开发,将界面表现与业务逻辑处理分开,体现了MVC(Model——View-Controller) 的思想,通过JSP技术来表现页面,通过Servlet技术来完成大量的事物处理工作,Servlet创建JSP...

    Java开发技术大全 电子版

    14.4.6响应窗口关闭事件处理示例454 14.4.7事件监听器接口和适配器类456 14.4.8作为参数的事件类456 14.4.9处理多个事件的例子463 14.5Swing组件的特性467 14.5.1Swing组件的优势467 14.5.2Swing组件的体系...

    开涛高可用高并发-亿级流量核心技术

    12.1 数据库连接池 227 12.1.1 DBCP连接池配置 228 12.1.2 DBCP配置建议 233 12.1.3 数据库驱动超时实现 234 12.1.4 连接池使用的一些建议 235 12.2 HttpClient连接池 236 12.2.1 HttpClient 4.5.2配置 236 12.2.2 ...

Global site tag (gtag.js) - Google Analytics