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

I can't see how you can be encountering the issue if you have the shared
cache disabled.  How are you disabling the shared cache?

Ensuring lazy is always used, and playing with the cache isolation setting
can sometimes also resolve cache deadlocks.  Upgrading to EclipseLink is
your best option.



patric-7 wrote:
> 
> 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) 
>> 
>> 
> 
> 


-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland 
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink 
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink , 
http://wiki.oracle.com/page/TopLink TopLink 
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink , 
http://www.nabble.com/EclipseLink-f26430.html EclipseLink 
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence 
Blog:  http://java-persistence-performance.blogspot.com/ Java Persistence
Performance 
-- 
View this message in context: http://old.nabble.com/Deadlock-issue-of-JPA-1.0-tp31235467p31277574.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.



Back to the top