转载请注明出处http://chillwarmoon.iteye.com
Apache的commons-pool提供了编写对象池的API,将用完的对象返回对象池中以便于下次利用,从而减少了对象创建时间。这对于创建对象相对耗时的应用来说,能够提高应用的性能。
commons-dbcp数据库连接池正是使用commons-pool来创建和数据库之间的连接对象,在对象池中保存这些对象,从而减少了频繁建立连接对象所造成的性能损耗。本文讲述了commons-dbcp是怎样利用commons-pool来建立对象池的。
例如在tomcat中,利用JNDI来查找到资源javax.sql.DataSource的实现,如果使用dbcp连接池,则该实现为org.apache.commons.dbcp.BasicDataSource。我们可以从这个称为“数据源”的类中调用getConnection方法来获得与数据库的连接。但内部是如何实现的呢?对象池在其中占据什么位置呢?这一切对于外部使用者来说是透明的。
BasicDataSource的getConnection首先建立了PoolingDataSource对象来getConnection。这个PoolingDataSource对象中引用了ObjectPool,在getConnection()时,是从ObjectPool中借用了一个对象,既调用ObjectPool.borrowObject()方法。而对于熟悉commons-pool的程序员来说,ObjectPool肯定有与之对应的Factory创建对象,并放到池中。因此dbcp通过实现了接口org.apache.commons.pool.PoolableObjectFactory的类org.apache.commons.dbcp.PoolableConnectionFactory的makeObject方法来创建连接Connection对象。然而PoolableConnectionFactory持有对ConnectionFactory的引用,ConnectionFactory可以有3种策略来创建Connection对象。其中DriverConnectionFactory调用了数据库厂商提供的Driver来获得Connection。如图所示。
在创建连接时,是创建的DelegatingConnection实例,该对象持有对池的引用,对于java.sql.Connectionl.close()方法来说是调用的对象池的returnObject方法来返回池,而不是真正的把连接关掉。而我们在外界调用这个方法时,并未发现这一点。而对于调用Connection的其他方法而言,都是委派到由Driver得到的Connection相对应的方法。即PoolableConnection-->Connection,前者实现了DelegatingConnection。
在用dbcp连接池的时候,若设置了poolPreparedStatements属性为true,则PoolableConnectionFactory在makeObject时,建立的连接存在的委派关系如下:PoolableConnection-->PoolingConnection-->Connection。PoolingConnection实现了KeyedPoolableObjectFactory,从而为与之对应的对象池keyedObjectPool形成双向关联。在对象池中,以PStmtKey(包含有sql等属性)来标示该池中的一类对象。因此在使用dbcp连接池时,若配置了poolPreparedStatements属性,注意尽量保持相同功能的sql写法一致,来充分利用对象池。
- 描述: 类图
- 大小: 30.7 KB
分享到:
相关推荐
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
dbcp连接池所需jar(commons-collections-3.1.jar,commons-dbcp-1.2.jar,commons-pool-1.6.)
commons-dbcp.jar dbcp数据库连接池驱动,包括pool、logging两个依赖
Commons-dbcp.jar:连接池的实现
commons-pool-1.6,commons-dbcp-1.4 连接池下载
DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种
DBCP是Apache提供的一款开源免费的数据库连接池!Hibernate3.0之后不再对DBCP提供支持!因为Hibernate声明DBCP有致命的缺欠!DBCP因为Hibernate的这一毁谤很是生气,并且说自己没有缺欠。
commons-dbcp2-2.5.0-bin dbcp连接池相关的jar包及api文档
commons-dbcp-1.2.jar包是一款主流的数据库连接池之一(DBCP,c3p0,proxool),如果缺少了这个commons-dbcp.jar包,那将无法对数据库连接池进行正常使用,需要此款commons-dbcp-1.2.jar包的朋友们欢迎前来下载使用。...
commons-dbcp-1.2和commons-pool-1.6,web开发,连接池架包
commons中的DBCP连接池jar,用于利用dbcp链接数据库
dbcp所需jar包,DBCP 数据库连接池所需jar包里面有commons-dbcp-1.4.jar、commons-pool-1.5.6.jar.rar 1、首先在项目下创建一个文件夹,保存我们的jar包。在项目名上右击,依次点击【New】-->【Floder】,打开...
DBCP一般指数据库连接池。 单独使用DBCP需要使用commons-dbpc.jar、commons-collections.jar、commons-pool.jar三个包,都可以在Apache组织的网站上下到(commons.apache.org)。 数据库连接池负责分配、管理和释放...
DBCP数据库连接池所需jar包commons-dbcp2-2.1.jar
tomcat 连接池 mssql 驱动包
commons-dbcp2-2.1.1.jar使用dbcp进行数据库连接池的jar包
包括commons-collection.jar,commons-dbcp.jar,commons-pool.jar
用于实现DBCP连接池所用的JAR依赖文件,包括数据库驱动及创建连接池所需的其他依赖: * commons-collections * commons-dbcp2 * commons-logging * commons-pool2 * mysql-connector
DBCP包 commons-dbcp-1.2.1.zip commons-pool-current.zip
Apache commons dbcp 1.2.2 连接池 API文档