为什么我们创建一个PoolableConnectionFactoryObject

问题描述:

所以,我意识到数据库池可能比JDBC更好的选择,但仍然是让我疯狂的东西。在所有示例代码中,他们都建议像这样进行池化。为什么我们创建一个PoolableConnectionFactoryObject

GenericObjectPool connectionPool = new GenericObjectPool(null); 

ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, un, pw); 

PoolableConnectionFactory poolableConnectionFactory = 
      new PoolableConnectionFactory(connectionFactory, connectionPool, null, "SELECT 1", false, true); 
PoolingDataSource dataSource = new PoolingDataSource(connectionPool); 

return dataSource; 

为什么创建PoolableConnectionFactory?它从来没有被使用过,并且从源头上看,我看不到它实际上将任何东西绑定在构造函数中,或者除了设置它自己的私有变量之外,还会做任何奇妙的事情。这个JDBC站点对于他们的信息而言是相当神秘的,而我通过源代码挖掘的东西让我感到困惑。是否有理由这样做?显然你可以用新的实例化对象,而不用实际地将它分配给一个变量,这就足够了......让我更加困惑。

假设这些类是公地DBCP班,PoolableConnectionFactory构造函数注册的实例被创建为工厂pased作为参数池:

_pool = pool; 
_pool.setFactory(this); 

因此,创建工厂创建它,使池在需要时使用它创建新的连接。

+0

谢谢。我认为我忽视了这种方法,因为它被弃用了,我无法弄清楚这些对象是如何连接在一起的 – 2012-07-18 17:51:24