Skip to main content

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

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


Back to the top