Vous n'utilisez pas réellement un pool de connexions. Un ConnectionPoolDataSource
n'est pas destiné à être utilisé directement. Il est conçu comme un DataSource
(spécial) pour PooledConnection
des objets qui sont ensuite conservés dans un pool de connexion par un DataSource
(normal) mise en œuvre qui fournit le regroupement de connexions.
Un développeur normal ne devrait pas utiliser un ConnectionPoolDataSource
directement, il est destiné à être utilisé avec des pools de connexions fournis par des serveurs d'applications, ou à être encapsulé dans un DataSource
à usage général s qui fournissait le regroupement de connexions.
Lorsqu'une Connection
est demandé à partir du pool de connexion, il extraira une PooledConnection
existante (ou en demander un nouveau depuis son ConnectionPoolDataSource
), récupérer une Connection
et le renvoyer à l'utilisateur. Lorsque l'utilisateur ferme la Connection
, la PooledConnection
signalera au pool de connexion qu'il est à nouveau disponible.
Dans ce cas, vous créez une PooledConnection
, récupérant une Connection
de celui-ci, puis en supprimant le PooledConnection
. Cela signifie que la PooledConnection
est abandonnée et sa connexion physique à la base de données ne peut pas être réutilisée et sera fermée/supprimée lorsqu'elle sera finalement ramassée (normalement, lorsque le pool de connexions veut fermer la connexion physique, il appellera close()
sur la PooledConnection
).
Vous devez soit utiliser le regroupement de connexions fourni par votre serveur d'applications, soit utiliser un pool de connexions à usage général tel que DBCP, c3p0 ou BoneCP.