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

Since you are using an external connection pool, we don't have much control over the connections. Have you tried switching to use our internal pool?

On 04/06/2013 3:44 PM, Huub Sepers wrote:
Tom,

Upgrading is not an option for us. This would involve a long integration
and test traject.

The kind of issue your link points to is not the issue we are facing.
See attached threaddump.
Thread t@185 holds a lock on a physical connection. A lot of other
threads are blocked on acquiring this lock. Those threads are all trying
to close a statement which holds a reference to a connection which is
now being used by another thread namely t@185.
Basic question is: why is Eclipselink trying to access a connection
which has already been closed (and retrieved from the pool by another
thread).


Greetings,
Huub


-----Original Message-----
From: eclipselink-users-bounces@xxxxxxxxxxx
[mailto:eclipselink-users-bounces@xxxxxxxxxxx] On Behalf Of Tom Ware
Sent: Tuesday, June 04, 2013 2:29 PM
To: eclipselink-users@xxxxxxxxxxx
Subject: 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(T4CSocketI
nputStreamWrapper.java:124)

              at

oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStream
Wrapper.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.jav
a:207)

              at

oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatem
ent.java:1044)

              at

oracle.jdbc.driver.OraclePreparedStatement.executeForRowsWithTimeout(Ora
clePreparedStatement.java:10143)

              at

oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedSt
atement.java:10249)

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

              at

oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWr
apper.java:230)

              at

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

              at

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

              at

org.eclipse.persistence.platform.database.oracle.Oracle10Platform.execut
eBatch(Oracle10Platform.java:53)

              at

org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.execute
JDK12BatchStatement(DatabaseAccessor.java:801)

              at

org.eclipse.persistence.internal.databaseaccess.ParameterizedSQLBatchWri
tingMechanism.executeBatchedStatements(ParameterizedSQLBatchWritingMecha
nism.java:138)

              at

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

              at

org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicEx
ecuteCall(DatabaseAccessor.java:546)

              at

org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.execute
Call(DatabaseAccessor.java:512)

              at

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

              at

org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.ex
ecuteCall(DatasourceCallQueryMechanism.java:205)

              at

org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.ex
ecuteCall(DatasourceCallQueryMechanism.java:191)

              at

org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.ex
ecuteNoSelectCall(DatasourceCallQueryMechanism.java:234)

              at

org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.ex
ecuteNoSelect(DatasourceCallQueryMechanism.java:214)

              at

org.eclipse.persistence.internal.queries.StatementQueryMechanism.execute
NoSelect(StatementQueryMechanism.java:115)

              at

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

              at

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

              at

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

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecute
Query(UnitOfWorkImpl.java:2750)

              at

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

              at

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

              at

org.eclipse.persistence.mappings.ManyToManyMapping.insertIntoRelationTab
le(ManyToManyMapping.java:852)

              at

org.eclipse.persistence.mappings.ManyToManyMapping.performDataModificati
onEvent(ManyToManyMapping.java:1010)

              at

org.eclipse.persistence.internal.sessions.CommitManager.commitAllObjects
WithChangeSet(CommitManager.java:130)

              at

org.eclipse.persistence.internal.sessions.AbstractSession.writeAllObject
sWithChangeSet(AbstractSession.java:3176)

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabas
e(UnitOfWorkImpl.java:1299)

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabas
eWithChangeSet(UnitOfWorkImpl.java:1399)

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitRootUnitO
fWork(UnitOfWorkImpl.java:1230)

              at

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

              at

nl.portinfolink.platform.domain.handler.PilDataObjectHandlerImpl.commitU
nitOfWork(PilDataObjectHandlerImpl.java:329)

              at

nl.portinfolink.platform.domain.handler.PilDataObjectHandlerImpl.commitC
hanges(PilDataObjectHandlerImpl.java:174)

              at

nl.portinfolink.platform.util.ToplinkUtils.commitChanges(ToplinkUtils.ja
va:414)

              at

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

              at

nl.portinfolink.platform.facade.BaseWebFacade.handleWebTransaction(BaseW
ebFacade.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.jav
a:39)

              at

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)

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

              at

nl.portinfolink.portal.actions.ServiceProcessWebFacadeCaller.invokeWebFa
cadeMethod(ServiceProcessWebFacadeCaller.java:314)

              at

nl.portinfolink.portal.actions.ServiceProcessWebFacadeCaller.execute(Ser
viceProcessWebFacadeCaller.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.j
ava:94)

              at

oracle.jdbc.driver.OraclePreparedStatementWrapper.close(OraclePreparedSt
atementWrapper.java:80)

              at

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

              at

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

              at

org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.clearSt
atementCache(DatabaseAccessor.java:308)

              at

org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.reconne
ct(DatabaseAccessor.java:1399)

              at

org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.incre
mentCallCount(DatasourceAccessor.java:300)

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

              at

org.eclipse.persistence.internal.databaseaccess.DatasourceAccessor.begin
Transaction(DatasourceAccessor.java:233)

              at

org.eclipse.persistence.internal.sessions.AbstractSession.basicBeginTran
saction(AbstractSession.java:398)

              at

org.eclipse.persistence.internal.sessions.AbstractSession.basicBeginTran
saction(AbstractSession.java:387)

              at

org.eclipse.persistence.sessions.server.ClientSession.basicBeginTransact
ion(ClientSession.java:127)

              at

org.eclipse.persistence.internal.sessions.AbstractSession.beginTransacti
on(AbstractSession.java:552)

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.beginTransactio
n(UnitOfWorkImpl.java:509)

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabas
e(UnitOfWorkImpl.java:1263)

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabas
eWithChangeSet(UnitOfWorkImpl.java:1399)

              at

org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitRootUnitO
fWork(UnitOfWorkImpl.java:1230)

              at

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

              at

nl.portinfolink.platform.domain.handler.PilDataObjectHandlerImpl.commitU
nitOfWork(PilDataObjectHandlerImpl.java:329)

              ...

Greetings,

Huub



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

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



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



Back to the top