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.