Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] blocked threads, oracle11g and tomcat

'any chance of trying a newer version of EclipseLink. We have fixed quite a number of concurrency issues since 1.1.4. A quick search yielded this as a candidate:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=333902

On 03/06/2013 4:17 PM, Huub Sepers wrote:
Hi,

Setup of our application:

eclipselink 1.1.4

tomcat-7.0.29 (using tomcat jdbc pool or dbcp pool)

Oracle 11G. We use latest oracle thin 11G jdbc driver.

All our connections are obtained through JNDI from an external connection pool
(tomcat-jdbc or dbcp)

We are experiencing blocked threads while running our application.

The scenario is roughly as follows:

Thread-A has send a batch of insert statements to the database and is in a wait
state. It holds a lock

on a T4CConnection object.

Thread-B also tries to do a batch of inserts. However it tries to obtain a lock
on the same T4CConnection object

as Thread-A.

Thread-B's stack includes a call to DatabaseAccessor.reconnect() which calls
DatabaseAccessor.clearStatementCache()

which tries to close a statement in the DatabaseAccessor statement cache.

So it seems that Thread-B has a stament in the cache which has a connection that
had already been closed and

returned to the pool and that connection is now used by Thread-A (!?).

Note: when running our application on oc4j in combination with it's connection
pool and Oracle 10G we never experienced these locks.

Question:

- How is the DatabaseAccessor statement cache supposed to work with a connection
pool. Trying to close

statements in the cache will lead to accessing connections that have been closed?

"http-bio-8280-exec-8" - Thread t@106

    java.lang.Thread.State: RUNNABLE

             at java.net.SocketInputStream.socketRead0(Native Method)

             at java.net.SocketInputStream.read(SocketInputStream.java:129)

             at oracle.net.ns.Packet.receive(Packet.java:300)

             at oracle.net.ns.DataPacket.receive(DataPacket.java:106)

             at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315)

             at oracle.net.ns.NetInputStream.read(NetInputStream.java:260)

             at oracle.net.ns.NetInputStream.read(NetInputStream.java:185)

             at oracle.net.ns.NetInputStream.read(NetInputStream.java:102)

             at
oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)

             at
oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)

             at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)

             at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:290)

             at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)

             at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)

             at
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)

             at
oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)

             at
oracle.jdbc.driver.OraclePreparedStatement.executeForRowsWithTimeout(OraclePreparedStatement.java:10143)

             at
oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10249)

             - locked <19740c7> (a oracle.jdbc.driver.T4CConnection)

             at
oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)

             at
org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)

             at
org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297)

             at
org.eclipse.persistence.platform.database.oracle.Oracle10Platform.executeBatch(Oracle10Platform.java:53)

             at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeJDK12BatchStatement(DatabaseAccessor.java:801)

             at
org.eclipse.persistence.internal.databaseaccess.ParameterizedSQLBatchWritingMechanism.executeBatchedStatements(ParameterizedSQLBatchWritingMechanism.java:138)

             at
org.eclipse.persistence.internal.databaseaccess.ParameterizedSQLBatchWritingMechanism.appendCall(ParameterizedSQLBatchWritingMechanism.java:82)

             at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:546)

             at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:512)

             at
org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:872)

             at
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205)

             at
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191)

             at
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:234)

             at
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:214)

             at
org.eclipse.persistence.internal.queries.StatementQueryMechanism.executeNoSelect(StatementQueryMechanism.java:115)

             at
org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:85)

             at
org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:664)

             at
org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:583)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2750)

             at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181)

             at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1165)

             at
org.eclipse.persistence.mappings.ManyToManyMapping.insertIntoRelationTable(ManyToManyMapping.java:852)

             at
org.eclipse.persistence.mappings.ManyToManyMapping.performDataModificationEvent(ManyToManyMapping.java:1010)

             at
org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjectsWithChangeSet(CommitManager.java:130)

             at
org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObjectsWithChangeSet(AbstractSession.java:3176)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1299)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1399)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitRootUnitOfWork(UnitOfWorkImpl.java:1230)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commit(UnitOfWorkImpl.java:1008)

             at
nl.portinfolink.platform.domain.handler.PilDataObjectHandlerImpl.commitUnitOfWork(PilDataObjectHandlerImpl.java:329)

             at
nl.portinfolink.platform.domain.handler.PilDataObjectHandlerImpl.commitChanges(PilDataObjectHandlerImpl.java:174)

             at
nl.portinfolink.platform.util.ToplinkUtils.commitChanges(ToplinkUtils.java:414)

             at
nl.portinfolink.platform.facade.BaseWebFacade.commitWebTransaction(BaseWebFacade.java:66)

             at
nl.portinfolink.platform.facade.BaseWebFacade.handleWebTransaction(BaseWebFacade.java:92)

             at
nl.portbase.road.facade.RoadPlanningWebFacade.save(RoadPlanningWebFacade.java:153)

             at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

             at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

             at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

             at java.lang.reflect.Method.invoke(Method.java:597)

             at
nl.portinfolink.portal.actions.ServiceProcessWebFacadeCaller.invokeWebFacadeMethod(ServiceProcessWebFacadeCaller.java:314)

             at
nl.portinfolink.portal.actions.ServiceProcessWebFacadeCaller.execute(ServiceProcessWebFacadeCaller.java:268)

"http-bio-8280-exec-53" - Thread t@166

    java.lang.Thread.State: BLOCKED

             at oracle.jdbc.driver.OracleStatement.close(OracleStatement.java:1559)

             - waiting to lock <19740c7> (a oracle.jdbc.driver.T4CConnection)
owned by "http-bio-8280-exec-8" t@106

             at
oracle.jdbc.driver.OracleStatementWrapper.close(OracleStatementWrapper.java:94)

             at
oracle.jdbc.driver.OraclePreparedStatementWrapper.close(OraclePreparedStatementWrapper.java:80)

             at
org.apache.tomcat.dbcp.dbcp.DelegatingStatement.close(DelegatingStatement.java:168)

             at
org.apache.tomcat.dbcp.dbcp.DelegatingStatement.close(DelegatingStatement.java:168)

             at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.clearStatementCache(DatabaseAccessor.java:308)

             at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconnect(DatabaseAccessor.java:1399)

             at
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incrementCallCount(DatasourceAccessor.java:300)

             - locked <5f3edd> (a
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor)

             at
org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.beginTransaction(DatasourceAccessor.java:233)

             at
org.eclipse.persistence.internal.sessions.AbstractSession.basicBeginTransaction(AbstractSession.java:398)

             at
org.eclipse.persistence.internal.sessions.AbstractSession.basicBeginTransaction(AbstractSession.java:387)

             at
org.eclipse.persistence.sessions.server.ClientSession.basicBeginTransaction(ClientSession.java:127)

             at
org.eclipse.persistence.internal.sessions.AbstractSession.beginTransaction(AbstractSession.java:552)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.beginTransaction(UnitOfWorkImpl.java:509)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabase(UnitOfWorkImpl.java:1263)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1399)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitRootUnitOfWork(UnitOfWorkImpl.java:1230)

             at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commit(UnitOfWorkImpl.java:1008)

             at
nl.portinfolink.platform.domain.handler.PilDataObjectHandlerImpl.commitUnitOfWork(PilDataObjectHandlerImpl.java:329)

             ...

Greetings,

Huub



_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users



Back to the top