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

Hi Patric and James,

Thanks for your information.
Unfortunately, I cannot upgrade to EclipseLink and I'm still investigating this issue.

I disabled the shared cache by specifying the below property in persistence.xml. 
  <property name="toplink.cache.shared.default" value="false"/>
Is this a correct way to disable the shared cache as you describe?

I'd also like to know the relationship between this deadlock and shared cache. 
What is the reason you advised me to disable the shared cache about this deadlock?

Masumi

-----Original Message-----
James wrote:
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) 


Back to the top