You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Gabor Horvath (JIRA)" <ji...@apache.org> on 2010/04/15 16:06:50 UTC

[jira] Updated: (POOL-163) GenericKeyedObjectPool.borrowObject does not invalidate object if validateObject fails

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

Gabor Horvath updated POOL-163:
-------------------------------

    Comment: was deleted

(was: Thanks for the quick answer.
Yes, you are right, I also checked the allocate() method. I tried to test where the problem comes from; not sure, however it seems all starts with this validity failure (I just put a printStackTrace into dbcp code):

java.sql.SQLException: PooledConnection was reused, withoutits previous Connection being closed.
        at org.apache.commons.dbcp.cpdsadapter.PooledConnectionImpl.getConnection(PooledConnectionImpl.java:180)
        at org.apache.commons.dbcp.datasources.KeyedCPDSConnectionFactory.validateObject(KeyedCPDSConnectionFactory.java:180)
        at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1197)
        at org.apache.commons.dbcp.datasources.SharedPoolDataSource.getPooledConnectionAndInfo(SharedPoolDataSource.java:181)
        at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:701)
        at org.apache.commons.dbcp.datasources.InstanceKeyDataSource.getConnection(InstanceKeyDataSource.java:676)
        at org.apache.torque.TorqueInstance.getConnection(TorqueInstance.java:912)
        at org.apache.torque.Torque.getConnection(Torque.java:314)
        at org.apache.torque.util.Transaction.beginOptional(Transaction.java:108)
        at org.apache.torque.util.BasePeer.doSelect(BasePeer.java:753)
        at com.barra.cp.bdo.torque.base.BasePFTreePeer.doSelectVillageRecords(BasePFTreePeer.java:390)
        at com.barra.cp.bdo.torque.base.BasePFTreePeer.doSelectVillageRecords(BasePFTreePeer.java:362)
        at com.barra.cp.bdo.torque.base.BasePFTreePeer.doSelect(BasePFTreePeer.java:331)
        at com.barra.cp.bdo.torque.PFTreePeer.readPFTreeByUserId(PFTreePeer.java:143)
        at com.barra.cp.bdo.test.DBConnectionTest.run(DBConnectionTest.java:53)
        at java.lang.Thread.run(Thread.java:619)

And in a little while:

org.apache.torque.TorqueException: java.sql.SQLException: Invalid state, the Connection object is closed.
        at org.apache.torque.util.Transaction.commit(Transaction.java:153)
        at org.apache.torque.util.BasePeer.doSelect(BasePeer.java:757)
        at com.barra.cp.bdo.torque.base.BasePFTreePeer.doSelectVillageRecords(BasePFTreePeer.java:390)
        at com.barra.cp.bdo.torque.base.BasePFTreePeer.doSelectVillageRecords(BasePFTreePeer.java:362)
        at com.barra.cp.bdo.torque.base.BasePFTreePeer.doSelect(BasePFTreePeer.java:331)
        at com.barra.cp.bdo.torque.PFTreePeer.readPFTreeByUserId(PFTreePeer.java:143)
        at com.barra.cp.bdo.test.DBConnectionTest.run(DBConnectionTest.java:53)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.sql.SQLException: Invalid state, the Connection object is closed.
        at net.sourceforge.jtds.jdbc.ConnectionJDBC2.checkOpen(ConnectionJDBC2.java:1699)
        at net.sourceforge.jtds.jdbc.ConnectionJDBC2.getMetaData(ConnectionJDBC2.java:2293)
        at org.apache.commons.dbcp.DelegatingConnection.getMetaData(DelegatingConnection.java:346)
        at org.apache.torque.util.Transaction.commit(Transaction.java:144)
        ... 7 more
)

> GenericKeyedObjectPool.borrowObject does not invalidate object if validateObject fails
> --------------------------------------------------------------------------------------
>
>                 Key: POOL-163
>                 URL: https://issues.apache.org/jira/browse/POOL-163
>             Project: Commons Pool
>          Issue Type: Bug
>    Affects Versions: 1.5.4
>         Environment: Windows, java version "1.6.0_06", Torque 3.3 (DBCP 1.4, jTDS 1.2.5)
>            Reporter: Gabor Horvath
>
> GenericKeyedObjectPool.borrowObject does not invalidate object if validateObject fails (line ~1200). I guess invalidation would be needed for objects which are not newly created (newlyCreated flag in the code).
> Scenario:
> 1.) DB connection put into pool
> 2.) Attempt to reuse connection (borrowObject)
> 3.) Test on borrow (executing simple SQL query) fails: DB connection closed on jTDS level but connection remains in the pool
> 4.) Subsequent attempts to reuse the connection causes "java.sql.SQLException: Invalid state, the Connection object is closed"

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira