JDBC 3.0 定義標準化連線池 SPI,分離驅動廠商與應用伺服器職責,實現可攜式連線池實作。
getConnection() 建立物理連線,開銷大重用 PooledConnection(物理連線),應用取得的是其輕量級 Connection 句柄。關閉時歸還池中而非物理斷開。
| 介面/類別 | 角色 | 提供者 |
|---|---|---|
| ConnectionPoolDataSource | PooledConnection 工廠 | Driver Vendor (JDBC 驅動廠商) |
| PooledConnection | 物理連線代表,產生邏輯 Connection | Driver Vendor |
| DataSource | 應用程式取得連線的入口 | Pooling Vendor (應用伺服器) |
| ConnectionEventListener | 監聽連線關閉/錯誤事件 | Pooling Vendor (池實作) |
| ConnectionEvent | 事件載體 | JDBC 規範 |
DataSource.getConnection()PooledConnectionConnectionPoolDataSource.getPooledConnection() 由驅動建立新物理連線ConnectionEventListener 監聽關閉事件PooledConnection.getConnection() 產生的邏輯 Connectionclose() → 觸發 ConnectionEvent → 池實作回收 PooledConnection

應用程式碼零修改:只需改用
DataSource(JNDI) 取代DriverManager,即可透明享受連線池效能提升。