[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] Deadlock issue of JPA 1.0
|
This seems to be a known (and already fixed) bug in eclipselink, see:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=321473
So maybe upgrading to EclipseLink 2.2 is an option for you.
And please note that it's not a classic (synchronization) deadlock - but a "wait
forever" (lack of notify()) situation which has a similar outcome of a deadlock.
When looking at the provided patch of the bug, I don't think that there's an
easy workaround to resolve the problem.
Patric
Am 25.03.2011 07:30, schrieb Ito, Masumi:
> We have detected a deadlock when executing JPA 1.0 applications using Toplink
> Essentials in GlassFish 2.1. We don't have the application which reproduces this
> issue. Although we are investigating source codes to find the cause of this
> issue, there are some unclear points. We need to resolve this issue urgently. Is
> there anyone who can answer the following questions?
>
> ----------
>
> We have three questions.
>
> 1. Do you have any idea about the condition when the problematic steps of the
> below stack traces are executed?
>
> We thought the problem can be reproduced when all of these conditions are
> satisfied.
>
> However this deadlock issue was not reproducible when we tested it.
>
> CONDITION:
>
> 1.1. The application uses JPA 1.0.
>
> 1.2. 'JTA' is specified in transaction-type definition of persistence.xml
>
> 1.3. The application has many entities which have One-to-One or One-to-Many
> relationships.
>
> 1.4. The shared cache is disabled.
>
> 1.5. The application executes persist() of EntityManager.
>
> 1.6. After 1.4, the application executes getSingleResult() of Query.
>
> 1.7. After 1.5, the application executes commit() of UserTransaction.
>
> 1.8. The application satisfied with all conditions between 1.1 and 1.6 at the
> same time is executed on multi threads.
>
> 2. Is there anyone who knows the condition the following step is executed?
>
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:2134)
>
>
> 3. I'd like to know why ConcurrencyManager class calls the wait() after
> acquiring the lock at the following step.
>
> In Addtion, I would also like to know the condition when the lock is released.
> Can anybody help me?
>
>
> oracle.toplink.essentials.internal.helper.WriteLockManager.acquireLocksForClone(WriteLockManager.java:99)
>
>
> ----------
>
> Thanks.
>
> THE STACKTRACE:
>
> "httpWorkerThread-28090-0" daemon prio=6 tid=0x05ac2c18 nid=0x2898 in
> Object.wait() [0x6583d000..0x6583faa0]
>
> at java.lang.Object.wait(Native Method)
>
> - waiting on <0x4e480fe0> (a
> oracle.toplink.essentials.internal.helper.ConcurrencyManager)
>
> at java.lang.Object.wait(Object.java:474)
>
> at
> oracle.toplink.essentials.internal.helper.WriteLockManager.acquireLocksForClone(WriteLockManager.java:99)
>
>
> - locked <0x4e480fe0> (a
> oracle.toplink.essentials.internal.helper.ConcurrencyManager)
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.cloneAndRegisterObject(UnitOfWorkImpl.java:669)
>
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkIdentityMapAccessor.getAndCloneCacheKeyFromParent(UnitOfWorkIdentityMapAccessor.java:167)
>
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkIdentityMapAccessor.getFromIdentityMap(UnitOfWorkIdentityMapAccessor.java:105)
>
>
> at
> oracle.toplink.essentials.internal.sessions.IdentityMapAccessor.getFromIdentityMap(IdentityMapAccessor.java:310)
>
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerExistingObject(UnitOfWorkImpl.java:3091)
>
>
> - locked <0x4e423f80> (a
> oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork)
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.registerExistingObject(UnitOfWorkImpl.java:3053)
>
>
> - locked <0x4e423f80> (a
> oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork)
>
> at
> oracle.toplink.essentials.queryframework.ObjectBuildingQuery.registerIndividualResult(ObjectBuildingQuery.java:339)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally(ObjectBuilder.java:456)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:421)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:387)
>
>
> at
> oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:386)
>
>
> at
> oracle.toplink.essentials.queryframework.ObjectBuildingQuery.registerIndividualResult(ObjectBuildingQuery.java:323)
>
>
> at
> oracle.toplink.essentials.queryframework.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:511)
>
>
> at
> oracle.toplink.essentials.queryframework.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:346)
>
>
> at
> oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:724)
>
>
> at
> oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:628)
>
>
> at
> oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:692)
>
>
> at
> oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:746)
>
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2248)
>
>
> at
> oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:952)
>
>
> at
> oracle.toplink.essentials.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:101)
>
>
> at
> oracle.toplink.essentials.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:91)
>
>
> at
> oracle.toplink.essentials.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:105)
>
>
> - locked <0x4e423f60> (a
> oracle.toplink.essentials.internal.indirection.QueryBasedValueHolder)
>
> at
> oracle.toplink.essentials.indirection.IndirectList.buildDelegate(IndirectList.java:208)
>
>
> at
> oracle.toplink.essentials.indirection.IndirectList.getDelegate(IndirectList.java:332)
>
>
> - locked <0x4e423e38> (a oracle.toplink.essentials.indirection.IndirectList)
>
> at oracle.toplink.essentials.indirection.IndirectList.size(IndirectList.java:663)
>
> at
> oracle.toplink.essentials.internal.queryframework.CollectionContainerPolicy.sizeFor(CollectionContainerPolicy.java:199)
>
>
> at
> oracle.toplink.essentials.internal.indirection.TransparentIndirectionPolicy.getRealAttributeValueFromObject(TransparentIndirectionPolicy.java:267)
>
>
> at
> oracle.toplink.essentials.mappings.ForeignReferenceMapping.getRealAttributeValueFromObject(ForeignReferenceMapping.java:375)
>
>
> at
> oracle.toplink.essentials.mappings.CollectionMapping.getRealAttributeValueFromObject(CollectionMapping.java:571)
>
>
> at
> oracle.toplink.essentials.mappings.CollectionMapping.getRealCollectionAttributeValueFromObject(CollectionMapping.java:586)
>
>
> at
> oracle.toplink.essentials.mappings.CollectionMapping.mergeIntoObject(CollectionMapping.java:752)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:2152)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:2134)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChangesOfWorkingCopyIntoOriginal(MergeManager.java:518)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChanges(MergeManager.java:262)
>
>
> at
> oracle.toplink.essentials.mappings.ObjectReferenceMapping.mergeIntoObject(ObjectReferenceMapping.java:373)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:2152)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:2134)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChangesOfWorkingCopyIntoOriginal(MergeManager.java:504)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChanges(MergeManager.java:262)
>
>
> at
> oracle.toplink.essentials.mappings.CollectionMapping.mergeIntoObject(CollectionMapping.java:778)
>
>
> - locked <0x36926880> (a java.util.ArrayList)
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:2152)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeIntoObject(ObjectBuilder.java:2134)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChangesOfWorkingCopyIntoOriginal(MergeManager.java:512)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChanges(MergeManager.java:262)
>
>
> at
> oracle.toplink.essentials.mappings.ObjectReferenceMapping.mergeChangesIntoObject(ObjectReferenceMapping.java:318)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeChangesIntoObject(ObjectBuilder.java:2114)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChangesOfWorkingCopyIntoOriginal(MergeManager.java:528)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChanges(MergeManager.java:262)
>
>
> at
> oracle.toplink.essentials.mappings.ObjectReferenceMapping.mergeChangesIntoObject(ObjectReferenceMapping.java:318)
>
>
> at
> oracle.toplink.essentials.internal.descriptors.ObjectBuilder.mergeChangesIntoObject(ObjectBuilder.java:2114)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChangesOfWorkingCopyIntoOriginal(MergeManager.java:528)
>
>
> at
> oracle.toplink.essentials.internal.sessions.MergeManager.mergeChanges(MergeManager.java:262)
>
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.mergeChangesIntoParent(UnitOfWorkImpl.java:2541)
>
>
> at
> oracle.toplink.essentials.internal.ejb.cmp3.base.RepeatableWriteUnitOfWork.mergeChangesIntoParent(RepeatableWriteUnitOfWork.java:303)
>
>
> at
> oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.mergeClonesAfterCompletion(UnitOfWorkImpl.java:2656)
>
>
> at
> oracle.toplink.essentials.transaction.AbstractSynchronizationListener.afterCompletion(AbstractSynchronizationListener.java:173)
>
>
> at
> oracle.toplink.essentials.transaction.JTASynchronizationListener.afterCompletion(JTASynchronizationListener.java:102)
>
>
> at
> com.sun.enterprise.distributedtx.J2EETransaction.commit(J2EETransaction.java:502)
>
> at
> com.sun.enterprise.distributedtx.J2EETransactionManagerOpt.commit(J2EETransactionManagerOpt.java:387)
>
>
> at
> com.sun.enterprise.distributedtx.UserTransactionImpl.commit(UserTransactionImpl.java:197)
>
>
> at org.jboss.seam.transaction.UTTransaction.commit(UTTransaction.java:52)
>
> at
> org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:603)
>
> at
> org.jboss.seam.jsf.SeamPhaseListener.handleTransactionsAfterPhase(SeamPhaseListener.java:341)
>
>
> at
> org.jboss.seam.jsf.SeamPhaseListener.afterServletPhase(SeamPhaseListener.java:241)
>
> at org.jboss.seam.jsf.SeamPhaseListener.afterPhase(SeamPhaseListener.java:192)
>
> at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:175)
>
> at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:114)
>
> at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
>
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
>
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:333)
>
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
>
>
> at net.poweregg.faces.filter.MultipartFilter.doFilter(MultipartFilter.java:115)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
>
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
>
>
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
>
> at
> org.jboss.seam.web.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:42)
>
>
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>
> at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:80)
>
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>
> at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
>
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>
> at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
>
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>
> at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
>
> at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
>
> at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:60)
>
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>
> at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:58)
>
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
>
> at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
>
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
>
>
> at
> net.poweregg.faces.filter.CacheControlFilter.doFilter(CacheControlFilter.java:84)
>
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:246)
>
>
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
>
>
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:313)
>
> at
> org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
>
>
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
>
> at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
>
> at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
>
> at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
>
> at
> com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
>
>
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
>
> at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
>
> at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
>
> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
>
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
>
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
>
> at
> com.fujitsu.interstage.javaee.catalina.core.ISStandardEngineValve.invoke(ISStandardEngineValve.java:99)
>
>
> at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
>
> at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
>
> at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
>
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
>
> at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:291)
>
> at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:648)
>
>
> at
> com.sun.enterprise.web.connector.grizzly.blocking.ProcessorBlockingTask.doProcess(ProcessorBlockingTask.java:221)
>
>
> at
> com.sun.enterprise.web.connector.grizzly.blocking.ProcessorBlockingTask.process(ProcessorBlockingTask.java:186)
>
>
> at
> com.sun.enterprise.web.connector.grizzly.blocking.ProcessorBlockingTask.doTask(ProcessorBlockingTask.java:140)
>
>
> at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
>
> at
> com.sun.enterprise.web.connector.grizzly.WorkerThreadImpl.run(WorkerThreadImpl.java:116)
>
>
>
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users