[ 
https://issues.apache.org/jira/browse/DBCP-398?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13664292#comment-13664292
 ] 

Gary Gregory edited comment on DBCP-398 at 5/22/13 5:30 PM:
------------------------------------------------------------

A seemingly simple change like replacing {{isClosed()}} an implementation like: 

{code:java}
    public boolean isClosed() throws SQLException {
        return _conn == null ? true : _conn.isClosed();
    }
{code}

causes a lot of unit tests to fail.

You can get the code from 
https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH 
and try it yourself.

You can then provide a patch. You use an local Java database like H2 or 
HyperSQL for your unit tests.

The next release would be 1.4.1, which we could push out ASAP since there are 
other fixes ready.


                
      was (Author: garydgregory):
    A seemingly simple change like replacing {{isClosed()}} the implementation 
with: 

{code:java}
    public boolean isClosed() throws SQLException {
        return _conn == null ? true : _conn.isClosed();
    }
{code}

causes a lot of unit tests to fail.

You can get the code from 
https://svn.apache.org/repos/asf/commons/proper/dbcp/branches/DBCP_1_4_x_BRANCH 
and try it yourself.

You can then provide a patch. You use an local Java database like H2 or 
HyperSQL for your unit tests.

The next release would be 1.4.1, which we could push out ASAP since there are 
other fixes ready.


                  
> DBCP hangs on common pool borrowObject when PoolableConnection is used and 
> the underlying connection closed unexpectedly (connection resets/timouts)
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DBCP-398
>                 URL: https://issues.apache.org/jira/browse/DBCP-398
>             Project: Commons Dbcp
>          Issue Type: Bug
>            Reporter: Sarvesh Sakalanaga
>
> The bug is in org.apache.commons.dbcp.PoolableConnection as isClosed method 
> on this calls super.isClosed which returns true (as 
> DelegatingConnection::isClosed { _closed || _conn.isClosed() }). Since 
> PoolableConnection needs to release objects to pool even if the underlying 
> connection is closed the isClosed method should be overridden in this class 
> and should return _closed. This _closed is the delegating connection close 
> which will be set to false even if the underlying connection is closed 
> (_conn.isClosed). The fix should also not throw on PoolableConnection::Close 
> method if underlying connection is closed as this state is a valid state and 
> is expected.
> Also currently the way it stands the clients of PoolableConnection will/may 
> not call Close() as isClosed always returns true in this case.
> Below is the stack that the thread hangs on:
> ◾waiting on <0x00000007b5a50e48> (a 
> org.apache.commons.pool.impl.GenericObjectPool$Latch)
>  at java.lang.Object.wait(Object.java:503)
>  at 
> org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1104)
> ◾locked <0x00000007b5a50e48> (a 
> org.apache.commons.pool.impl.GenericObjectPool$Latch)
>  at 
> org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)
>  at 
> org.datanucleus.store.rdbms.ConnectionProviderPriorityList.getConnection(ConnectionProviderPriorityList.java:57)
>  at 
> org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl.getConnection(ConnectionFactoryImpl.java:354)
>  at 
> org.datanucleus.store.rdbms.ConnectionFactoryImpl$ManagedConnectionImpl.getXAResource(ConnectionFactoryImpl.java:314)
>  at 
> org.datanucleus.store.connection.ConnectionManagerImpl.enlistResource(ConnectionManagerImpl.java:386)
>  at 
> org.datanucleus.store.connection.ConnectionManagerImpl.allocateConnection(ConnectionManagerImpl.java:252)
>  at 
> org.datanucleus.store.connection.AbstractConnectionFactory.getConnection(AbstractConnectionFactory.java:60)
>  at 
> org.datanucleus.store.AbstractStoreManager.getConnection(AbstractStoreManager.java:449)
>  at 
> org.datanucleus.store.AbstractStoreManager.getConnection(AbstractStoreManager.java:418)
>  at 
> org.datanucleus.store.rdbms.query.JDOQLQuery.performExecute(JDOQLQuery.java:595)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to