Правильный способ сделать это - обернуть экземпляр соединения в свой собственный класс, который реализует java.sql.Connection, а затем выдать это «соединение» через пул. Вы будете вынуждены реализовать все методы, которые вы можете с радостью передать «реальной» связи. За исключением одного - close (). В этом методе вы должны вернуть соединение с пулом, не закрывая его.
Вы не можете вернуть объект в пул, просто выпустив его из области видимости. Вы можете поместить что-то в finalize (), который возвращает это в пул, но делать это опасно. Finalize () запускается только один раз для любого объекта, поэтому, если вы поместите туда что-нибудь, чтобы «поймать» объект и не дать ему быть gc'd, finalize () никогда не будет вызываться для него снова.