Ваш poolFactory должен реализовать метод
void destroyObject(PooledObject<T> p) throws Exception;
Пока ваш код должен вызывать метод
public void invalidateObject(final T obj) throws Exception
в GenericPool
Во время выполнения, если вы столкнетесь сисключительная ситуация (возможно, вызванная проблемой временной сети), вам нужно удалить объект из пула и заново создать его, поэтому вызов invalidateObject уничтожит этот объект и автоматически создаст новый, когда вы вызовете loanObject