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.