Du använder faktiskt inte en anslutningspool. En ConnectionPoolDataSource
är inte avsedd att användas direkt. Den är avsedd som en (speciell) DataSource
för PooledConnection
objekt som sedan hålls i en anslutningspool av en (normal) DataSource
implementering som tillhandahåller anslutningspoolning.
En normal utvecklare bör inte använda en ConnectionPoolDataSource
direkt, den är avsedd att användas med anslutningspooler som tillhandahålls av applikationsservrar, eller för att lindas in i DataSource
för allmänt ändamål. s som gav anslutningspoolning.
När en Connection
begärs från anslutningspoolen kommer den att checka ut en befintlig PooledConnection
(eller begär en ny från dess ConnectionPoolDataSource
), hämta en Connection
och returnera det till användaren. När användaren stänger Connection
, PooledConnection
kommer att signalera anslutningspoolen att den är tillgänglig igen.
I det här fallet skapar du en PooledConnection
, hämtar en Connection
från den och kassera sedan PooledConnection
. Det betyder att PooledConnection
överges, och dess fysiska anslutning till databasen kan inte återanvändas och kommer att stängas/kasseras när den äntligen samlas in med skräp (normalt när anslutningspoolen vill stänga den fysiska anslutningen kommer den att anropa close()
på PooledConnection
).
Du måste antingen använda anslutningspooling som tillhandahålls av din applikationsserver, eller använda en anslutningspool för allmänna ändamål som DBCP, c3p0 eller BoneCP.