Você não está realmente usando um pool de conexões. Um
ConnectionPoolDataSource
não se destina a ser usado diretamente. Destina-se como um (especial) DataSource
para PooledConnection
objetos que são mantidos em um pool de conexões por um (normal) DataSource
implementação que fornece pool de conexão. Um desenvolvedor normal não deve usar um
ConnectionPoolDataSource
diretamente, destina-se ao uso com pools de conexão fornecidos por Servidores de Aplicativos ou a ser agrupado em DataSource
de uso geral s que forneciam o pool de conexões. Quando uma
Connection
for solicitado do pool de conexões, ele fará o checkout de um PooledConnection
existente (ou solicite um novo de seu ConnectionPoolDataSource
), recupere uma Connection
e devolvê-lo ao usuário. Quando o usuário fecha a Connection
, a PooledConnection
sinalizará ao pool de conexões que ele está disponível novamente. Neste caso, você está criando um
PooledConnection
, recuperando uma Connection
dele e, em seguida, descartando o PooledConnection
. Isso significa que o PooledConnection
é abandonado, e sua conexão física com o banco de dados não pode ser reutilizada e será fechada/descartada quando finalmente for coletada como lixo (normalmente quando o pool de conexões deseja fechar a conexão física, ele chamará close()
na PooledConnection
). Você precisa usar o pool de conexões fornecido pelo seu servidor de aplicativos ou usar um pool de conexões de uso geral, como DBCP, c3p0 ou BoneCP.