You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by AndyG <an...@orprovision.com> on 2013/01/14 10:56:26 UTC

Recent ManagedConnection changes have possibly broken something.

Will try and reproduce in a test case, but posting this now to give you a
heads up.
Not sure if ManagedConnection is responsible, but seems to be a likely
candidate.

Basic scenario is a test with 50 threads concurrently accessing a stateless
EJB. It initially looks like that connections in an active transaction are
being put back into the pool?

java.sql.SQLException: Cannot close a connection while a transaction is
still active.
	at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown
Source)
	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown
Source)
	at
org.apache.derby.impl.jdbc.EmbedConnection.checkForTransactionInProgress(Unknown
Source)
	at org.apache.derby.impl.jdbc.EmbedConnection.close(Unknown Source)
	at
org.apache.commons.dbcp.DelegatingConnection.close(DelegatingConnection.java:247)
	at
org.apache.commons.dbcp.PoolableConnection.reallyClose(PoolableConnection.java:122)
	at
org.apache.commons.dbcp.managed.PoolableManagedConnection.reallyClose(PoolableManagedConnection.java:67)
	at
org.apache.commons.dbcp.PoolableConnectionFactory.destroyObject(PoolableConnectionFactory.java:628)
	at
org.apache.commons.pool.impl.GenericObjectPool.invalidateObject(GenericObjectPool.java:1286)
	at
org.apache.commons.dbcp.AbandonedObjectPool.invalidateObject(AbandonedObjectPool.java:125)
	at
org.apache.commons.dbcp.AbandonedObjectPool.removeAbandoned(AbandonedObjectPool.java:158)
	at
org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:77)
	at
org.apache.commons.dbcp.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:117)
	at
org.apache.commons.dbcp.managed.ManagedConnection.<init>(ManagedConnection.java:55)
	at
org.apache.commons.dbcp.managed.ManagedDataSource.getConnection(ManagedDataSource.java:77)
	at
org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
	at
org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70)
	at
org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292)
	at
org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
	at
org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
	at
org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.extractPhysicalConnection(ConnectionProxyHandler.java:82)
	at
org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:138)
	at
org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
	at $Proxy96.prepareStatement(Unknown Source)
	at
org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:147)
	at
org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:166)
	at
org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:145)
	at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1854)
	at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1831)
	at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
	at org.hibernate.loader.Loader.doQuery(Loader.java:899)
	at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
	at
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:2111)
	at
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
	at
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
	at
org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
	at
org.hibernate.loader.entity.BatchingEntityLoader.load(BatchingEntityLoader.java:111)
	at
org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3887)
	at
org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
	at
org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
	at
org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
	at
org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
	at
org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
	at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1078)
	at org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:175)
	at
org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2424)
	at org.hibernate.internal.SessionImpl.get(SessionImpl.java:974)
	at
org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:807)
	at
org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:781)
	at
org.apache.openejb.persistence.JtaEntityManager.find(JtaEntityManager.java:157)
	at
com.orprovision.spectrum.storage.bean.ocr.ApiOcrFontFactoryImpl.deleteOcrFont(ApiOcrFontFactoryImpl.java:478)

Andy.



--
View this message in context: http://openejb.979440.n4.nabble.com/Recent-ManagedConnection-changes-have-possibly-broken-something-tp4660257.html
Sent from the OpenEJB Dev mailing list archive at Nabble.com.

Re: Recent ManagedConnection changes have possibly broken something.

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi Andy,

to check it simply set DataSourceCreator = dbcp in the datasource
properties.

it doesn't use ManagedConnection.

*Romain Manni-Bucau*
*Twitter: @rmannibucau <https://twitter.com/rmannibucau>*
*Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/>
*LinkedIn: **http://fr.linkedin.com/in/rmannibucau*
*Github: https://github.com/rmannibucau*



2013/1/14 AndyG <an...@orprovision.com>

> Will try and reproduce in a test case, but posting this now to give you a
> heads up.
> Not sure if ManagedConnection is responsible, but seems to be a likely
> candidate.
>
> Basic scenario is a test with 50 threads concurrently accessing a stateless
> EJB. It initially looks like that connections in an active transaction are
> being put back into the pool?
>
> java.sql.SQLException: Cannot close a connection while a transaction is
> still active.
>         at
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown
> Source)
>         at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown
> Source)
>         at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown
> Source)
>         at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown
> Source)
>         at
> org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(Unknown
> Source)
>         at
>
> org.apache.derby.impl.jdbc.EmbedConnection.checkForTransactionInProgress(Unknown
> Source)
>         at org.apache.derby.impl.jdbc.EmbedConnection.close(Unknown Source)
>         at
>
> org.apache.commons.dbcp.DelegatingConnection.close(DelegatingConnection.java:247)
>         at
>
> org.apache.commons.dbcp.PoolableConnection.reallyClose(PoolableConnection.java:122)
>         at
>
> org.apache.commons.dbcp.managed.PoolableManagedConnection.reallyClose(PoolableManagedConnection.java:67)
>         at
>
> org.apache.commons.dbcp.PoolableConnectionFactory.destroyObject(PoolableConnectionFactory.java:628)
>         at
>
> org.apache.commons.pool.impl.GenericObjectPool.invalidateObject(GenericObjectPool.java:1286)
>         at
>
> org.apache.commons.dbcp.AbandonedObjectPool.invalidateObject(AbandonedObjectPool.java:125)
>         at
>
> org.apache.commons.dbcp.AbandonedObjectPool.removeAbandoned(AbandonedObjectPool.java:158)
>         at
>
> org.apache.commons.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:77)
>         at
>
> org.apache.commons.dbcp.managed.ManagedConnection.updateTransactionStatus(ManagedConnection.java:117)
>         at
>
> org.apache.commons.dbcp.managed.ManagedConnection.<init>(ManagedConnection.java:55)
>         at
>
> org.apache.commons.dbcp.managed.ManagedDataSource.getConnection(ManagedDataSource.java:77)
>         at
>
> org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
>         at
>
> org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70)
>         at
>
> org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292)
>         at
>
> org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
>         at
>
> org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
>         at
>
> org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.extractPhysicalConnection(ConnectionProxyHandler.java:82)
>         at
>
> org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:138)
>         at
>
> org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
>         at $Proxy96.prepareStatement(Unknown Source)
>         at
>
> org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:147)
>         at
>
> org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:166)
>         at
>
> org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:145)
>         at
> org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1854)
>         at
> org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1831)
>         at
> org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1811)
>         at org.hibernate.loader.Loader.doQuery(Loader.java:899)
>         at
>
> org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
>         at
>
> org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
>         at org.hibernate.loader.Loader.loadEntity(Loader.java:2111)
>         at
>
> org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
>         at
>
> org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
>         at
>
> org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:65)
>         at
>
> org.hibernate.loader.entity.BatchingEntityLoader.load(BatchingEntityLoader.java:111)
>         at
>
> org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3887)
>         at
>
> org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
>         at
>
> org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
>         at
>
> org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
>         at
>
> org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
>         at
>
> org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
>         at
> org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1078)
>         at
> org.hibernate.internal.SessionImpl.access$2000(SessionImpl.java:175)
>         at
>
> org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2424)
>         at org.hibernate.internal.SessionImpl.get(SessionImpl.java:974)
>         at
>
> org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:807)
>         at
>
> org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:781)
>         at
>
> org.apache.openejb.persistence.JtaEntityManager.find(JtaEntityManager.java:157)
>         at
>
> com.orprovision.spectrum.storage.bean.ocr.ApiOcrFontFactoryImpl.deleteOcrFont(ApiOcrFontFactoryImpl.java:478)
>
> Andy.
>
>
>
> --
> View this message in context:
> http://openejb.979440.n4.nabble.com/Recent-ManagedConnection-changes-have-possibly-broken-something-tp4660257.html
> Sent from the OpenEJB Dev mailing list archive at Nabble.com.
>