W rzeczywistości nie korzystasz z puli połączeń. ConnectionPoolDataSource
nie jest przeznaczony do bezpośredniego użycia. Jest przeznaczony jako (specjalne) DataSource
dla PooledConnection
obiekty, które są następnie utrzymywane w puli połączeń przez (normalne) DataSource
implementacja zapewniająca łączenie połączeń.
Zwykły programista nie powinien używać ConnectionPoolDataSource
bezpośrednio, jest przeznaczony do użytku z pulami połączeń dostarczanych przez serwery aplikacji lub do umieszczenia w DataSource
ogólnego przeznaczenia które zapewniły łączenie połączeń.
Gdy Connection
zostanie zażądany z puli połączeń, pobierze istniejące PooledConnection
(lub poproś o nowy z jego ConnectionPoolDataSource
), pobierz Connection
i zwróć to użytkownikowi. Gdy użytkownik zamknie Connection
, PooledConnection
zasygnalizuje pulę połączeń, że jest ponownie dostępna.
W tym przypadku tworzysz PooledConnection
, pobierając Connection
z niego, a następnie odrzuca PooledConnection
. Oznacza to, że PooledConnection
zostaje porzucone, a jego fizyczne połączenie z bazą danych nie może być ponownie użyte i zostanie zamknięte/odrzucone, gdy zostanie ostatecznie zebrane śmieci (zwykle, gdy pula połączeń chce zamknąć fizyczne połączenie, wywoła funkcję close()
na PooledConnection
).
Musisz albo użyć puli połączeń dostarczonej przez serwer aplikacji, albo użyć puli połączeń ogólnego przeznaczenia, takiej jak DBCP, c3p0 lub BoneCP.