2012-07-18 188 views
0

所以,我意識到數據庫池可能比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站點對於他們的信息而言是相當神祕的,而我通過源代碼挖掘的東西讓我感到困惑。是否有理由這樣做?顯然你可以用新的實例化對象,而不用實際地將它分配給一個變量,這就足夠了......讓我更加困惑。

回答

1

假設這些類是公地DBCP班,PoolableConnectionFactory構造函數註冊的實例被創建爲工廠pased作爲參數池:

_pool = pool; 
_pool.setFactory(this); 

因此,創建工廠創建它,使池在需要時使用它創建新的連接。

+0

謝謝。我認爲我忽視了這種方法,因爲它被棄用了,我無法弄清楚這些對象是如何連接在一起的 – 2012-07-18 17:51:24

相關問題