我們需要使用Connection Pool的情況都通常都是指網絡連接,比如:DB connection, Socket的Connection,這些對象往往需要使用Pool來管理,因為這些對象的重復創建需要較長的時間,是系統性能的瓶頸。
Connection Pool實現包括兩類:第一種是受管的Connection Pool,需要實現JCA的Resource Adapter規范,通過JNDI lookup出來ConnectionPool對象,然后調用受管ConnectionPool對象的getConnection方法獲得connection,第二種是自己實現一個Connection的Object Pool,通過自定義的ConnectionFactory類獲得一個connection。
第一種:受管的Connection Pool
目前J2EE Container中常用的connection pool有:
- DB Connection Pool
- JMS Connection Pool
- LDAP Connection Pool
- JCA Connection Pool
DB Connection Pool即JDBC connection pool,基本上所有的J2EE容器都提供了實現,JMS connection pool一般的JMS Server都提供了實現,LDAP connection pool由LDAP Server提供實現, JCA connection pool需要自己實現resource adapter。
第二種:實現一個Connection的Object Pool
通??梢栽谝延械谌降?/span>Object Pool上實現自己的Connection Pool,如apache的commons pool,如果非要從頭開始當然也是可以的。通常如果是要用規范的API獲取connection,如jdbc,jms,舉個例子DriverManager.getConnection, Connection.close, 為了使這個Connection Pool可以方便地用在各種jdbc驅動上,而且為了使原來沒有使用該Connection Pool的應用可以方便地切換到該Connection Pool上,我們可能需要用到AOP,這樣DriverManager.getConnection就是從pool中取出connecton(如果pool中有的話),Connection.close就是return給pool,從邏輯上釋放。用OO的方法也是可以實現的。
參考文章:JavaWorld:Dive into connection pooling with J2EE