If the underlying connection of a PoolableConnection becomes invalid due to network errors etc., it is not possible to remove it from the pool by using the close-strategy. In case of an exception I'd check if the connection is already closed (=returned to pool). If not I'd close it to return it to the pool.
- The method isClosed() returns true, even if the PoolableConnection has not the _closed state because of _conn.isClosed() returns true. The defective connection remains active, consuming connections.
- The method close throws an SQLException ("already closed") if (and only if) the underlying connection is closed. If the PoolableConnection is in _closed state, close() returns silently (as expected)