Skip to main content

[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



Back to the top