[ 
https://issues.apache.org/jira/browse/DBCP-398?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mark Thomas resolved DBCP-398.
------------------------------

    Resolution: Fixed

It is worth noting that the behaviour has been modified slightly in 2.x to 
address DBCP-391.

I have clarified the Javadoc for PoolableConnection#isClosed() in 2.x and 1.5.x.

> 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
>    Affects Versions: 1.2, 1.3, 1.4, 2.0
>            Reporter: Sarvesh Sakalanaga
>         Attachments: DBCP-398.0.patch
>
>
> 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 was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to