You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by "Anton Sakalouski (Created) (JIRA)" <ji...@apache.org> on 2012/01/23 09:46:38 UTC

[jira] [Created] (CAY-1652) Deadlock within DefaultEventManager while creating a new ObjectContext

Deadlock within DefaultEventManager while creating a new ObjectContext
----------------------------------------------------------------------

                 Key: CAY-1652
                 URL: https://issues.apache.org/jira/browse/CAY-1652
             Project: Cayenne
          Issue Type: Bug
          Components: Core Library
    Affects Versions: 3.1M3
         Environment: OpenJDK Runtime Environment (build 1.6.0-b23)
OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
            Reporter: Anton Sakalouski


We have apache cxf application which creates a new ObjectContext and writes some changes to the database in one of its soap request interceptors. Approximately once in day we experience the deadlock within DefaultEventManager. Here are brief details, I am enclosing the full thread dump as well. 


Found one Java-level deadlock:
=============================
"ajp-apr-/10.100.48.1-9201-exec-962":
 waiting to lock monitor 0x000000093579d378 (object 0x00000008277ea450, a org.apache.cayenne.event.DispatchQueue),
 which is held by "cayenne-edt-665651215-1"
"cayenne-edt-665651215-1":
 waiting to lock monitor 0x00000009415bec40 (object 0x000000082ac3aa78, a org.apache.cayenne.access.ObjectStore),
 which is held by "ajp-apr-/10.100.48.1-9201-exec-956"
"ajp-apr-/10.100.48.1-9201-exec-956":
 waiting to lock monitor 0x000000093579bf20 (object 0x000000082ac36d00, a org.apache.cayenne.access.ObjectStore),
 which is held by "cayenne-edt-665651215-1"

Java stack information for the threads listed above:
===================================================
"ajp-apr-/10.100.48.1-9201-exec-962":
	at org.apache.cayenne.event.DispatchQueue.addInvocation(DispatchQueue.java:63)
	- waiting to lock <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:217)
	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:171)
	at org.apache.cayenne.util.EventUtil.listenForSubjects(EventUtil.java:90)
	at org.apache.cayenne.util.EventUtil.listenForChannelEvents(EventUtil.java:57)
	at org.apache.cayenne.access.DataContext.attachToChannel(DataContext.java:162)
	at org.apache.cayenne.access.DataContext.<init>(DataContext.java:105)
	at ish.oncourse.services.persistence.ISHObjectContext.<init>(ISHObjectContext.java:24)
	at ish.oncourse.services.persistence.ISHObjectContextFactory.createdFromDataDomain(ISHObjectContextFactory.java:58)
	at org.apache.cayenne.configuration.server.DataContextFactory.createContext(DataContextFactory.java:54)
	at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:182)
	at ish.oncourse.services.persistence.CayenneService.newContext(CayenneService.java:65)
	at ish.oncourse.services.persistence.CayenneService.newNonReplicatingContext(CayenneService.java:73)
	at $ICayenneService_135046b9a1f.newNonReplicatingContext($ICayenneService_135046b9a1f.java)
	at ish.oncourse.services.system.CollegeService.recordWSAccess(CollegeService.java:141)
	at $ICollegeService_135046b9a1d.recordWSAccess($ICollegeService_135046b9a1d.java)
	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:69)
	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:35)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
	- locked <0x000000082b19f640> (a org.apache.cxf.phase.PhaseInterceptorChain)
	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
	- locked <0x000000082b19f770> (a org.apache.tomcat.util.net.SocketWrapper)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:679)
"cayenne-edt-665651215-1":
	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:581)
	- waiting to lock <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
	at org.apache.cayenne.access.DataContextMergeHandler.graphChanged(DataContextMergeHandler.java:99)
	at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
	at org.apache.cayenne.event.DefaultEventManager$Dispatch.fire(DefaultEventManager.java:400)
	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:156)
	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:57)
	- locked <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
	at org.apache.cayenne.event.DefaultEventManager.dispatchEvent(DefaultEventManager.java:339)
	at org.apache.cayenne.event.DefaultEventManager.postEvent(DefaultEventManager.java:310)
	at org.apache.cayenne.BaseContext.fireDataChannelChanged(BaseContext.java:424)
	at org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1244)
	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:610)
	- locked <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
	at org.apache.cayenne.access.ObjectStore.snapshotsChanged(ObjectStore.java:572)
	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
	at org.apache.cayenne.event.DefaultEventManager$InvocationDispatch.fire(DefaultEventManager.java:420)
	at org.apache.cayenne.event.DefaultEventManager$DispatchThread.run(DefaultEventManager.java:469)
"ajp-apr-/10.100.48.1-9201-exec-956":
	at org.apache.cayenne.access.ObjectStore.registerDiff(ObjectStore.java:183)
	- waiting to lock <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
	at org.apache.cayenne.access.ObjectStore.arcDeleted(ObjectStore.java:1000)
	at org.apache.cayenne.util.ObjectContextGraphAction.handleArcPropertyChange(ObjectContextGraphAction.java:81)
	at org.apache.cayenne.util.ObjectContextGraphAction.handlePropertyChange(ObjectContextGraphAction.java:65)
	at org.apache.cayenne.BaseContext.propertyChanged(BaseContext.java:335)
	at org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:278)
	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.setTarget(DataObjectToOneProperty.java:74)
	at org.apache.cayenne.graph.ChildDiffLoader$3.visitToOne(ChildDiffLoader.java:254)
	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.visit(DataObjectToOneProperty.java:87)
	at org.apache.cayenne.graph.ChildDiffLoader.arcDeleted(ChildDiffLoader.java:217)
	at org.apache.cayenne.access.ObjectDiff$ArcOperation.apply(ObjectDiff.java:440)
	at org.apache.cayenne.graph.CompoundDiff.apply(CompoundDiff.java:91)
	at org.apache.cayenne.access.ObjectStoreGraphDiff.apply(ObjectStoreGraphDiff.java:134)
	at org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:769)
	at org.apache.cayenne.BaseContext.onSync(BaseContext.java:373)
	at ish.oncourse.services.persistence.ISHObjectContext.onSync(ISHObjectContext.java:72)
	at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:816)
	- locked <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
	at org.apache.cayenne.access.DataContext.commitChangesToParent(DataContext.java:746)
	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.deleteObject(TransactionGroupProcessorImpl.java:248)
	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processStub(TransactionGroupProcessorImpl.java:185)
	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processGroup(TransactionGroupProcessorImpl.java:98)
	at $ITransactionGroupProcessor_135046b9aa3.processGroup($ITransactionGroupProcessor_135046b9aa3.java)
	at $ITransactionGroupProcessor_135046b9a4d.processGroup($ITransactionGroupProcessor_135046b9a4d.java)
	at ish.oncourse.webservices.replication.services.ReplicationServiceImpl.sendRecords(ReplicationServiceImpl.java:79)
	at $IReplicationService_135046b9a4a.sendRecords($IReplicationService_135046b9a4a.java)
	at $IReplicationService_135046b9a1e.sendRecords($IReplicationService_135046b9a1e.java)
	at ish.oncourse.webservices.soap.v4.ReplicationPortTypeImpl.sendRecords(ReplicationPortTypeImpl.java:342)
	at sun.reflect.GeneratedMethodAccessor114.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
	at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
	- locked <0x000000082ac3abe8> (a org.apache.cxf.interceptor.ServiceInvokerInterceptor$2)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
	- locked <0x000000082ac65410> (a org.apache.cxf.phase.PhaseInterceptorChain)
	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
	- locked <0x000000082aeb47e8> (a org.apache.tomcat.util.net.SocketWrapper)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:679)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Commented] (CAY-1652) Deadlock within DefaultEventManager while creating a new ObjectContext

Posted by "Andrus Adamchik (Commented) (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CAY-1652?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13191466#comment-13191466 ] 

Andrus Adamchik commented on CAY-1652:
--------------------------------------

Anton,

Just removed one cause of the deadlock per CAY-1653. This may actually resolve your case (addListener). However there is a very simple unit test at CAY-957 that shows that there's another deadlock situation remains with multiple nested contexts... I will work on that next, but appreciate if you could try the CAY-1653 fix, which is committed to trunk.  If you only care about this change, and don't want the rest of the M4 stuff, you can locally build Cayenne  with r1234971 and r1234984 applied.
                
> Deadlock within DefaultEventManager while creating a new ObjectContext
> ----------------------------------------------------------------------
>
>                 Key: CAY-1652
>                 URL: https://issues.apache.org/jira/browse/CAY-1652
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.1M3
>         Environment: OpenJDK Runtime Environment (build 1.6.0-b23)
> OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
>            Reporter: Anton Sakalouski
>            Assignee: Andrus Adamchik
>         Attachments: ThreadDump.txt
>
>
> We have apache cxf application which creates a new ObjectContext and writes some changes to the database in one of its soap request interceptors. Approximately once in day we experience the deadlock within DefaultEventManager. Here are brief details, I am enclosing the full thread dump as well. 
> Found one Java-level deadlock:
> =============================
> "ajp-apr-/10.100.48.1-9201-exec-962":
>  waiting to lock monitor 0x000000093579d378 (object 0x00000008277ea450, a org.apache.cayenne.event.DispatchQueue),
>  which is held by "cayenne-edt-665651215-1"
> "cayenne-edt-665651215-1":
>  waiting to lock monitor 0x00000009415bec40 (object 0x000000082ac3aa78, a org.apache.cayenne.access.ObjectStore),
>  which is held by "ajp-apr-/10.100.48.1-9201-exec-956"
> "ajp-apr-/10.100.48.1-9201-exec-956":
>  waiting to lock monitor 0x000000093579bf20 (object 0x000000082ac36d00, a org.apache.cayenne.access.ObjectStore),
>  which is held by "cayenne-edt-665651215-1"
> Java stack information for the threads listed above:
> ===================================================
> "ajp-apr-/10.100.48.1-9201-exec-962":
> 	at org.apache.cayenne.event.DispatchQueue.addInvocation(DispatchQueue.java:63)
> 	- waiting to lock <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:217)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:171)
> 	at org.apache.cayenne.util.EventUtil.listenForSubjects(EventUtil.java:90)
> 	at org.apache.cayenne.util.EventUtil.listenForChannelEvents(EventUtil.java:57)
> 	at org.apache.cayenne.access.DataContext.attachToChannel(DataContext.java:162)
> 	at org.apache.cayenne.access.DataContext.<init>(DataContext.java:105)
> 	at ish.oncourse.services.persistence.ISHObjectContext.<init>(ISHObjectContext.java:24)
> 	at ish.oncourse.services.persistence.ISHObjectContextFactory.createdFromDataDomain(ISHObjectContextFactory.java:58)
> 	at org.apache.cayenne.configuration.server.DataContextFactory.createContext(DataContextFactory.java:54)
> 	at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:182)
> 	at ish.oncourse.services.persistence.CayenneService.newContext(CayenneService.java:65)
> 	at ish.oncourse.services.persistence.CayenneService.newNonReplicatingContext(CayenneService.java:73)
> 	at $ICayenneService_135046b9a1f.newNonReplicatingContext($ICayenneService_135046b9a1f.java)
> 	at ish.oncourse.services.system.CollegeService.recordWSAccess(CollegeService.java:141)
> 	at $ICollegeService_135046b9a1d.recordWSAccess($ICollegeService_135046b9a1d.java)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:69)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:35)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082b19f640> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082b19f770> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)
> "cayenne-edt-665651215-1":
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:581)
> 	- waiting to lock <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContextMergeHandler.graphChanged(DataContextMergeHandler.java:99)
> 	at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$Dispatch.fire(DefaultEventManager.java:400)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:156)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:57)
> 	- locked <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.dispatchEvent(DefaultEventManager.java:339)
> 	at org.apache.cayenne.event.DefaultEventManager.postEvent(DefaultEventManager.java:310)
> 	at org.apache.cayenne.BaseContext.fireDataChannelChanged(BaseContext.java:424)
> 	at org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1244)
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:610)
> 	- locked <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.snapshotsChanged(ObjectStore.java:572)
> 	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$InvocationDispatch.fire(DefaultEventManager.java:420)
> 	at org.apache.cayenne.event.DefaultEventManager$DispatchThread.run(DefaultEventManager.java:469)
> "ajp-apr-/10.100.48.1-9201-exec-956":
> 	at org.apache.cayenne.access.ObjectStore.registerDiff(ObjectStore.java:183)
> 	- waiting to lock <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.arcDeleted(ObjectStore.java:1000)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handleArcPropertyChange(ObjectContextGraphAction.java:81)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handlePropertyChange(ObjectContextGraphAction.java:65)
> 	at org.apache.cayenne.BaseContext.propertyChanged(BaseContext.java:335)
> 	at org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:278)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.setTarget(DataObjectToOneProperty.java:74)
> 	at org.apache.cayenne.graph.ChildDiffLoader$3.visitToOne(ChildDiffLoader.java:254)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.visit(DataObjectToOneProperty.java:87)
> 	at org.apache.cayenne.graph.ChildDiffLoader.arcDeleted(ChildDiffLoader.java:217)
> 	at org.apache.cayenne.access.ObjectDiff$ArcOperation.apply(ObjectDiff.java:440)
> 	at org.apache.cayenne.graph.CompoundDiff.apply(CompoundDiff.java:91)
> 	at org.apache.cayenne.access.ObjectStoreGraphDiff.apply(ObjectStoreGraphDiff.java:134)
> 	at org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:769)
> 	at org.apache.cayenne.BaseContext.onSync(BaseContext.java:373)
> 	at ish.oncourse.services.persistence.ISHObjectContext.onSync(ISHObjectContext.java:72)
> 	at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:816)
> 	- locked <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContext.commitChangesToParent(DataContext.java:746)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.deleteObject(TransactionGroupProcessorImpl.java:248)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processStub(TransactionGroupProcessorImpl.java:185)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processGroup(TransactionGroupProcessorImpl.java:98)
> 	at $ITransactionGroupProcessor_135046b9aa3.processGroup($ITransactionGroupProcessor_135046b9aa3.java)
> 	at $ITransactionGroupProcessor_135046b9a4d.processGroup($ITransactionGroupProcessor_135046b9a4d.java)
> 	at ish.oncourse.webservices.replication.services.ReplicationServiceImpl.sendRecords(ReplicationServiceImpl.java:79)
> 	at $IReplicationService_135046b9a4a.sendRecords($IReplicationService_135046b9a4a.java)
> 	at $IReplicationService_135046b9a1e.sendRecords($IReplicationService_135046b9a1e.java)
> 	at ish.oncourse.webservices.soap.v4.ReplicationPortTypeImpl.sendRecords(ReplicationPortTypeImpl.java:342)
> 	at sun.reflect.GeneratedMethodAccessor114.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
> 	at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> 	at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
> 	- locked <0x000000082ac3abe8> (a org.apache.cxf.interceptor.ServiceInvokerInterceptor$2)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082ac65410> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082aeb47e8> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Assigned] (CAY-1652) Deadlock within DefaultEventManager while creating a new ObjectContext

Posted by "Andrus Adamchik (Assigned) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CAY-1652?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrus Adamchik reassigned CAY-1652:
------------------------------------

    Assignee: Andrus Adamchik
    
> Deadlock within DefaultEventManager while creating a new ObjectContext
> ----------------------------------------------------------------------
>
>                 Key: CAY-1652
>                 URL: https://issues.apache.org/jira/browse/CAY-1652
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.1M3
>         Environment: OpenJDK Runtime Environment (build 1.6.0-b23)
> OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
>            Reporter: Anton Sakalouski
>            Assignee: Andrus Adamchik
>         Attachments: ThreadDump.txt
>
>
> We have apache cxf application which creates a new ObjectContext and writes some changes to the database in one of its soap request interceptors. Approximately once in day we experience the deadlock within DefaultEventManager. Here are brief details, I am enclosing the full thread dump as well. 
> Found one Java-level deadlock:
> =============================
> "ajp-apr-/10.100.48.1-9201-exec-962":
>  waiting to lock monitor 0x000000093579d378 (object 0x00000008277ea450, a org.apache.cayenne.event.DispatchQueue),
>  which is held by "cayenne-edt-665651215-1"
> "cayenne-edt-665651215-1":
>  waiting to lock monitor 0x00000009415bec40 (object 0x000000082ac3aa78, a org.apache.cayenne.access.ObjectStore),
>  which is held by "ajp-apr-/10.100.48.1-9201-exec-956"
> "ajp-apr-/10.100.48.1-9201-exec-956":
>  waiting to lock monitor 0x000000093579bf20 (object 0x000000082ac36d00, a org.apache.cayenne.access.ObjectStore),
>  which is held by "cayenne-edt-665651215-1"
> Java stack information for the threads listed above:
> ===================================================
> "ajp-apr-/10.100.48.1-9201-exec-962":
> 	at org.apache.cayenne.event.DispatchQueue.addInvocation(DispatchQueue.java:63)
> 	- waiting to lock <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:217)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:171)
> 	at org.apache.cayenne.util.EventUtil.listenForSubjects(EventUtil.java:90)
> 	at org.apache.cayenne.util.EventUtil.listenForChannelEvents(EventUtil.java:57)
> 	at org.apache.cayenne.access.DataContext.attachToChannel(DataContext.java:162)
> 	at org.apache.cayenne.access.DataContext.<init>(DataContext.java:105)
> 	at ish.oncourse.services.persistence.ISHObjectContext.<init>(ISHObjectContext.java:24)
> 	at ish.oncourse.services.persistence.ISHObjectContextFactory.createdFromDataDomain(ISHObjectContextFactory.java:58)
> 	at org.apache.cayenne.configuration.server.DataContextFactory.createContext(DataContextFactory.java:54)
> 	at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:182)
> 	at ish.oncourse.services.persistence.CayenneService.newContext(CayenneService.java:65)
> 	at ish.oncourse.services.persistence.CayenneService.newNonReplicatingContext(CayenneService.java:73)
> 	at $ICayenneService_135046b9a1f.newNonReplicatingContext($ICayenneService_135046b9a1f.java)
> 	at ish.oncourse.services.system.CollegeService.recordWSAccess(CollegeService.java:141)
> 	at $ICollegeService_135046b9a1d.recordWSAccess($ICollegeService_135046b9a1d.java)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:69)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:35)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082b19f640> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082b19f770> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)
> "cayenne-edt-665651215-1":
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:581)
> 	- waiting to lock <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContextMergeHandler.graphChanged(DataContextMergeHandler.java:99)
> 	at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$Dispatch.fire(DefaultEventManager.java:400)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:156)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:57)
> 	- locked <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.dispatchEvent(DefaultEventManager.java:339)
> 	at org.apache.cayenne.event.DefaultEventManager.postEvent(DefaultEventManager.java:310)
> 	at org.apache.cayenne.BaseContext.fireDataChannelChanged(BaseContext.java:424)
> 	at org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1244)
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:610)
> 	- locked <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.snapshotsChanged(ObjectStore.java:572)
> 	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$InvocationDispatch.fire(DefaultEventManager.java:420)
> 	at org.apache.cayenne.event.DefaultEventManager$DispatchThread.run(DefaultEventManager.java:469)
> "ajp-apr-/10.100.48.1-9201-exec-956":
> 	at org.apache.cayenne.access.ObjectStore.registerDiff(ObjectStore.java:183)
> 	- waiting to lock <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.arcDeleted(ObjectStore.java:1000)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handleArcPropertyChange(ObjectContextGraphAction.java:81)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handlePropertyChange(ObjectContextGraphAction.java:65)
> 	at org.apache.cayenne.BaseContext.propertyChanged(BaseContext.java:335)
> 	at org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:278)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.setTarget(DataObjectToOneProperty.java:74)
> 	at org.apache.cayenne.graph.ChildDiffLoader$3.visitToOne(ChildDiffLoader.java:254)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.visit(DataObjectToOneProperty.java:87)
> 	at org.apache.cayenne.graph.ChildDiffLoader.arcDeleted(ChildDiffLoader.java:217)
> 	at org.apache.cayenne.access.ObjectDiff$ArcOperation.apply(ObjectDiff.java:440)
> 	at org.apache.cayenne.graph.CompoundDiff.apply(CompoundDiff.java:91)
> 	at org.apache.cayenne.access.ObjectStoreGraphDiff.apply(ObjectStoreGraphDiff.java:134)
> 	at org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:769)
> 	at org.apache.cayenne.BaseContext.onSync(BaseContext.java:373)
> 	at ish.oncourse.services.persistence.ISHObjectContext.onSync(ISHObjectContext.java:72)
> 	at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:816)
> 	- locked <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContext.commitChangesToParent(DataContext.java:746)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.deleteObject(TransactionGroupProcessorImpl.java:248)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processStub(TransactionGroupProcessorImpl.java:185)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processGroup(TransactionGroupProcessorImpl.java:98)
> 	at $ITransactionGroupProcessor_135046b9aa3.processGroup($ITransactionGroupProcessor_135046b9aa3.java)
> 	at $ITransactionGroupProcessor_135046b9a4d.processGroup($ITransactionGroupProcessor_135046b9a4d.java)
> 	at ish.oncourse.webservices.replication.services.ReplicationServiceImpl.sendRecords(ReplicationServiceImpl.java:79)
> 	at $IReplicationService_135046b9a4a.sendRecords($IReplicationService_135046b9a4a.java)
> 	at $IReplicationService_135046b9a1e.sendRecords($IReplicationService_135046b9a1e.java)
> 	at ish.oncourse.webservices.soap.v4.ReplicationPortTypeImpl.sendRecords(ReplicationPortTypeImpl.java:342)
> 	at sun.reflect.GeneratedMethodAccessor114.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
> 	at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> 	at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
> 	- locked <0x000000082ac3abe8> (a org.apache.cxf.interceptor.ServiceInvokerInterceptor$2)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082ac65410> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082aeb47e8> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] [Closed] (CAY-1652) Deadlock within DefaultEventManager while creating a new ObjectContext

Posted by "Andrus Adamchik (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CAY-1652?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Andrus Adamchik closed CAY-1652.
--------------------------------

    Resolution: Fixed

should be fixed per other related jiras.
                
> Deadlock within DefaultEventManager while creating a new ObjectContext
> ----------------------------------------------------------------------
>
>                 Key: CAY-1652
>                 URL: https://issues.apache.org/jira/browse/CAY-1652
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.1M3
>         Environment: OpenJDK Runtime Environment (build 1.6.0-b23)
> OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
>            Reporter: Anton Sakalouski
>            Assignee: Andrus Adamchik
>         Attachments: ThreadDump.txt
>
>
> We have apache cxf application which creates a new ObjectContext and writes some changes to the database in one of its soap request interceptors. Approximately once in day we experience the deadlock within DefaultEventManager. Here are brief details, I am enclosing the full thread dump as well. 
> Found one Java-level deadlock:
> =============================
> "ajp-apr-/10.100.48.1-9201-exec-962":
>  waiting to lock monitor 0x000000093579d378 (object 0x00000008277ea450, a org.apache.cayenne.event.DispatchQueue),
>  which is held by "cayenne-edt-665651215-1"
> "cayenne-edt-665651215-1":
>  waiting to lock monitor 0x00000009415bec40 (object 0x000000082ac3aa78, a org.apache.cayenne.access.ObjectStore),
>  which is held by "ajp-apr-/10.100.48.1-9201-exec-956"
> "ajp-apr-/10.100.48.1-9201-exec-956":
>  waiting to lock monitor 0x000000093579bf20 (object 0x000000082ac36d00, a org.apache.cayenne.access.ObjectStore),
>  which is held by "cayenne-edt-665651215-1"
> Java stack information for the threads listed above:
> ===================================================
> "ajp-apr-/10.100.48.1-9201-exec-962":
> 	at org.apache.cayenne.event.DispatchQueue.addInvocation(DispatchQueue.java:63)
> 	- waiting to lock <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:217)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:171)
> 	at org.apache.cayenne.util.EventUtil.listenForSubjects(EventUtil.java:90)
> 	at org.apache.cayenne.util.EventUtil.listenForChannelEvents(EventUtil.java:57)
> 	at org.apache.cayenne.access.DataContext.attachToChannel(DataContext.java:162)
> 	at org.apache.cayenne.access.DataContext.<init>(DataContext.java:105)
> 	at ish.oncourse.services.persistence.ISHObjectContext.<init>(ISHObjectContext.java:24)
> 	at ish.oncourse.services.persistence.ISHObjectContextFactory.createdFromDataDomain(ISHObjectContextFactory.java:58)
> 	at org.apache.cayenne.configuration.server.DataContextFactory.createContext(DataContextFactory.java:54)
> 	at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:182)
> 	at ish.oncourse.services.persistence.CayenneService.newContext(CayenneService.java:65)
> 	at ish.oncourse.services.persistence.CayenneService.newNonReplicatingContext(CayenneService.java:73)
> 	at $ICayenneService_135046b9a1f.newNonReplicatingContext($ICayenneService_135046b9a1f.java)
> 	at ish.oncourse.services.system.CollegeService.recordWSAccess(CollegeService.java:141)
> 	at $ICollegeService_135046b9a1d.recordWSAccess($ICollegeService_135046b9a1d.java)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:69)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:35)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082b19f640> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082b19f770> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)
> "cayenne-edt-665651215-1":
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:581)
> 	- waiting to lock <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContextMergeHandler.graphChanged(DataContextMergeHandler.java:99)
> 	at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$Dispatch.fire(DefaultEventManager.java:400)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:156)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:57)
> 	- locked <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.dispatchEvent(DefaultEventManager.java:339)
> 	at org.apache.cayenne.event.DefaultEventManager.postEvent(DefaultEventManager.java:310)
> 	at org.apache.cayenne.BaseContext.fireDataChannelChanged(BaseContext.java:424)
> 	at org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1244)
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:610)
> 	- locked <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.snapshotsChanged(ObjectStore.java:572)
> 	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$InvocationDispatch.fire(DefaultEventManager.java:420)
> 	at org.apache.cayenne.event.DefaultEventManager$DispatchThread.run(DefaultEventManager.java:469)
> "ajp-apr-/10.100.48.1-9201-exec-956":
> 	at org.apache.cayenne.access.ObjectStore.registerDiff(ObjectStore.java:183)
> 	- waiting to lock <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.arcDeleted(ObjectStore.java:1000)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handleArcPropertyChange(ObjectContextGraphAction.java:81)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handlePropertyChange(ObjectContextGraphAction.java:65)
> 	at org.apache.cayenne.BaseContext.propertyChanged(BaseContext.java:335)
> 	at org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:278)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.setTarget(DataObjectToOneProperty.java:74)
> 	at org.apache.cayenne.graph.ChildDiffLoader$3.visitToOne(ChildDiffLoader.java:254)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.visit(DataObjectToOneProperty.java:87)
> 	at org.apache.cayenne.graph.ChildDiffLoader.arcDeleted(ChildDiffLoader.java:217)
> 	at org.apache.cayenne.access.ObjectDiff$ArcOperation.apply(ObjectDiff.java:440)
> 	at org.apache.cayenne.graph.CompoundDiff.apply(CompoundDiff.java:91)
> 	at org.apache.cayenne.access.ObjectStoreGraphDiff.apply(ObjectStoreGraphDiff.java:134)
> 	at org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:769)
> 	at org.apache.cayenne.BaseContext.onSync(BaseContext.java:373)
> 	at ish.oncourse.services.persistence.ISHObjectContext.onSync(ISHObjectContext.java:72)
> 	at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:816)
> 	- locked <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContext.commitChangesToParent(DataContext.java:746)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.deleteObject(TransactionGroupProcessorImpl.java:248)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processStub(TransactionGroupProcessorImpl.java:185)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processGroup(TransactionGroupProcessorImpl.java:98)
> 	at $ITransactionGroupProcessor_135046b9aa3.processGroup($ITransactionGroupProcessor_135046b9aa3.java)
> 	at $ITransactionGroupProcessor_135046b9a4d.processGroup($ITransactionGroupProcessor_135046b9a4d.java)
> 	at ish.oncourse.webservices.replication.services.ReplicationServiceImpl.sendRecords(ReplicationServiceImpl.java:79)
> 	at $IReplicationService_135046b9a4a.sendRecords($IReplicationService_135046b9a4a.java)
> 	at $IReplicationService_135046b9a1e.sendRecords($IReplicationService_135046b9a1e.java)
> 	at ish.oncourse.webservices.soap.v4.ReplicationPortTypeImpl.sendRecords(ReplicationPortTypeImpl.java:342)
> 	at sun.reflect.GeneratedMethodAccessor114.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
> 	at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> 	at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
> 	- locked <0x000000082ac3abe8> (a org.apache.cxf.interceptor.ServiceInvokerInterceptor$2)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082ac65410> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082aeb47e8> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Updated] (CAY-1652) Deadlock within DefaultEventManager while creating a new ObjectContext

Posted by "Anton Sakalouski (Updated) (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CAY-1652?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Anton Sakalouski updated CAY-1652:
----------------------------------

    Attachment: ThreadDump.txt

Full thread dump from the deadlocked application.
                
> Deadlock within DefaultEventManager while creating a new ObjectContext
> ----------------------------------------------------------------------
>
>                 Key: CAY-1652
>                 URL: https://issues.apache.org/jira/browse/CAY-1652
>             Project: Cayenne
>          Issue Type: Bug
>          Components: Core Library
>    Affects Versions: 3.1M3
>         Environment: OpenJDK Runtime Environment (build 1.6.0-b23)
> OpenJDK 64-Bit Server VM (build 20.0-b11, mixed mode)
>            Reporter: Anton Sakalouski
>         Attachments: ThreadDump.txt
>
>
> We have apache cxf application which creates a new ObjectContext and writes some changes to the database in one of its soap request interceptors. Approximately once in day we experience the deadlock within DefaultEventManager. Here are brief details, I am enclosing the full thread dump as well. 
> Found one Java-level deadlock:
> =============================
> "ajp-apr-/10.100.48.1-9201-exec-962":
>  waiting to lock monitor 0x000000093579d378 (object 0x00000008277ea450, a org.apache.cayenne.event.DispatchQueue),
>  which is held by "cayenne-edt-665651215-1"
> "cayenne-edt-665651215-1":
>  waiting to lock monitor 0x00000009415bec40 (object 0x000000082ac3aa78, a org.apache.cayenne.access.ObjectStore),
>  which is held by "ajp-apr-/10.100.48.1-9201-exec-956"
> "ajp-apr-/10.100.48.1-9201-exec-956":
>  waiting to lock monitor 0x000000093579bf20 (object 0x000000082ac36d00, a org.apache.cayenne.access.ObjectStore),
>  which is held by "cayenne-edt-665651215-1"
> Java stack information for the threads listed above:
> ===================================================
> "ajp-apr-/10.100.48.1-9201-exec-962":
> 	at org.apache.cayenne.event.DispatchQueue.addInvocation(DispatchQueue.java:63)
> 	- waiting to lock <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:217)
> 	at org.apache.cayenne.event.DefaultEventManager.addListener(DefaultEventManager.java:171)
> 	at org.apache.cayenne.util.EventUtil.listenForSubjects(EventUtil.java:90)
> 	at org.apache.cayenne.util.EventUtil.listenForChannelEvents(EventUtil.java:57)
> 	at org.apache.cayenne.access.DataContext.attachToChannel(DataContext.java:162)
> 	at org.apache.cayenne.access.DataContext.<init>(DataContext.java:105)
> 	at ish.oncourse.services.persistence.ISHObjectContext.<init>(ISHObjectContext.java:24)
> 	at ish.oncourse.services.persistence.ISHObjectContextFactory.createdFromDataDomain(ISHObjectContextFactory.java:58)
> 	at org.apache.cayenne.configuration.server.DataContextFactory.createContext(DataContextFactory.java:54)
> 	at org.apache.cayenne.configuration.CayenneRuntime.getContext(CayenneRuntime.java:182)
> 	at ish.oncourse.services.persistence.CayenneService.newContext(CayenneService.java:65)
> 	at ish.oncourse.services.persistence.CayenneService.newNonReplicatingContext(CayenneService.java:73)
> 	at $ICayenneService_135046b9a1f.newNonReplicatingContext($ICayenneService_135046b9a1f.java)
> 	at ish.oncourse.services.system.CollegeService.recordWSAccess(CollegeService.java:141)
> 	at $ICollegeService_135046b9a1d.recordWSAccess($ICollegeService_135046b9a1d.java)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:69)
> 	at ish.oncourse.webservices.soap.v4.interceptors.CollegeRequestInterceptor.handleMessage(CollegeRequestInterceptor.java:35)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082b19f640> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082b19f770> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)
> "cayenne-edt-665651215-1":
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:581)
> 	- waiting to lock <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContextMergeHandler.graphChanged(DataContextMergeHandler.java:99)
> 	at sun.reflect.GeneratedMethodAccessor125.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$Dispatch.fire(DefaultEventManager.java:400)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:156)
> 	at org.apache.cayenne.event.DispatchQueue.dispatchEvent(DispatchQueue.java:57)
> 	- locked <0x00000008277ea450> (a org.apache.cayenne.event.DispatchQueue)
> 	at org.apache.cayenne.event.DefaultEventManager.dispatchEvent(DefaultEventManager.java:339)
> 	at org.apache.cayenne.event.DefaultEventManager.postEvent(DefaultEventManager.java:310)
> 	at org.apache.cayenne.BaseContext.fireDataChannelChanged(BaseContext.java:424)
> 	at org.apache.cayenne.access.DataContext.fireDataChannelChanged(DataContext.java:1244)
> 	at org.apache.cayenne.access.ObjectStore.processSnapshotEvent(ObjectStore.java:610)
> 	- locked <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.snapshotsChanged(ObjectStore.java:572)
> 	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cayenne.util.Invocation.fire(Invocation.java:202)
> 	at org.apache.cayenne.event.DefaultEventManager$InvocationDispatch.fire(DefaultEventManager.java:420)
> 	at org.apache.cayenne.event.DefaultEventManager$DispatchThread.run(DefaultEventManager.java:469)
> "ajp-apr-/10.100.48.1-9201-exec-956":
> 	at org.apache.cayenne.access.ObjectStore.registerDiff(ObjectStore.java:183)
> 	- waiting to lock <0x000000082ac36d00> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.ObjectStore.arcDeleted(ObjectStore.java:1000)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handleArcPropertyChange(ObjectContextGraphAction.java:81)
> 	at org.apache.cayenne.util.ObjectContextGraphAction.handlePropertyChange(ObjectContextGraphAction.java:65)
> 	at org.apache.cayenne.BaseContext.propertyChanged(BaseContext.java:335)
> 	at org.apache.cayenne.CayenneDataObject.setToOneTarget(CayenneDataObject.java:278)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.setTarget(DataObjectToOneProperty.java:74)
> 	at org.apache.cayenne.graph.ChildDiffLoader$3.visitToOne(ChildDiffLoader.java:254)
> 	at org.apache.cayenne.reflect.generic.DataObjectToOneProperty.visit(DataObjectToOneProperty.java:87)
> 	at org.apache.cayenne.graph.ChildDiffLoader.arcDeleted(ChildDiffLoader.java:217)
> 	at org.apache.cayenne.access.ObjectDiff$ArcOperation.apply(ObjectDiff.java:440)
> 	at org.apache.cayenne.graph.CompoundDiff.apply(CompoundDiff.java:91)
> 	at org.apache.cayenne.access.ObjectStoreGraphDiff.apply(ObjectStoreGraphDiff.java:134)
> 	at org.apache.cayenne.access.DataContext.onContextFlush(DataContext.java:769)
> 	at org.apache.cayenne.BaseContext.onSync(BaseContext.java:373)
> 	at ish.oncourse.services.persistence.ISHObjectContext.onSync(ISHObjectContext.java:72)
> 	at org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:816)
> 	- locked <0x000000082ac3aa78> (a org.apache.cayenne.access.ObjectStore)
> 	at org.apache.cayenne.access.DataContext.commitChangesToParent(DataContext.java:746)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.deleteObject(TransactionGroupProcessorImpl.java:248)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processStub(TransactionGroupProcessorImpl.java:185)
> 	at ish.oncourse.webservices.replication.services.TransactionGroupProcessorImpl.processGroup(TransactionGroupProcessorImpl.java:98)
> 	at $ITransactionGroupProcessor_135046b9aa3.processGroup($ITransactionGroupProcessor_135046b9aa3.java)
> 	at $ITransactionGroupProcessor_135046b9a4d.processGroup($ITransactionGroupProcessor_135046b9a4d.java)
> 	at ish.oncourse.webservices.replication.services.ReplicationServiceImpl.sendRecords(ReplicationServiceImpl.java:79)
> 	at $IReplicationService_135046b9a4a.sendRecords($IReplicationService_135046b9a4a.java)
> 	at $IReplicationService_135046b9a1e.sendRecords($IReplicationService_135046b9a1e.java)
> 	at ish.oncourse.webservices.soap.v4.ReplicationPortTypeImpl.sendRecords(ReplicationPortTypeImpl.java:342)
> 	at sun.reflect.GeneratedMethodAccessor114.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:616)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
> 	at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
> 	at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
> 	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
> 	at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
> 	at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
> 	- locked <0x000000082ac3abe8> (a org.apache.cxf.interceptor.ServiceInvokerInterceptor$2)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263)
> 	- locked <0x000000082ac65410> (a org.apache.cxf.phase.PhaseInterceptorChain)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:118)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:208)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:205)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:113)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:184)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:107)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:163)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:151)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:207)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:308)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:188)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773)
> 	- locked <0x000000082aeb47e8> (a org.apache.tomcat.util.net.SocketWrapper)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:679)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira