Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.2
-
None
-
Operating System: All
Platform: PC
-
33591
Description
Mail from Hugh Winkler on commons-dev (15-2-2005)
--------------------------------------------------
PoolableConnection.close() does logic equivalent to :
if ( isClosed())
{ throw new SQLException(.); }else
{ _pool.returnObject(this); }The isClosed() method is that of ancestor DelegatingConnection, and it does:
if(_closed || _conn.isClosed()) { return true; }
return false;
Now nothing prevents the underlying connection from closing itself; that's
why isClosed() checks _conn.isClosed() – "did you close yourself while I
wasn't looking?" But in that case PoolableConnection never calls
_pool.returnObject().
I've got a query in Oracle 10g that causes Oracle's connection to close
itself: the famous "end of file on connection" message causes the connection
to enter the closed state. Doesn't take long to exhaust the pool.
I think the logic we want in PoolableConnection.close() is like so:
if ( _closed ){ // really ask, did *we* close the connection already throw new SQLException(.); } else { _pool.returnObject(this); }
If I've got some logic wrong please stop me before I deploy that change
here!