Do you have a full thread dump printed by JVM? From these two threads
I can't figure out the nature of a deadlock.
Thanks
Andrus
On Dec 8, 2006, at 2:22 PM, John Gunning wrote:
> Hi there,
>
>
> I am experiencing a deadlock issue which looks similar
> to CAY-297. I understand CAY-297 was fixed in release
> 1.1 but I am using version 1.2.1 and the deadalock
> issue arises. When I set
> "cayenne.DataRowStore.remote.notify" to false the
> issue does not arise. However, I need this set to true
> so that remote web services can be notified. I'm also
> extending the Cayenne EventBridge class. I attach the
> stack traces of the deadlocking threads as well as the
> processMessage and sendExternalEvent methods of the
> EventBridge extension. Any ideas anyone?...
>
>
> Thanks in advance,
>
> John Gunning.
>
> Send instant messages to your online friends http://
> uk.messenger.yahoo.com Deadlock found :-
> "JMS Session Delivery Thread" Id=31 in BLOCKED on
> lock=org.objectstyle.cayenne.access.ObjectStor..c7f9e
> owned by EventDispatchThread-3 Id=15
> at org.objectstyle.cayenne.access.ObjectStore.registerDiff
> (ObjectStore.java:200)
> at
> org.objectstyle.cayenne.access.ObjectStore.recordObjectCreated
> (ObjectStore.java:152)
> at org.objectstyle.cayenne.access.DataContext.registerNewObject
> (DataContext.java:922)
> at org.objectstyle.cayenne.access.ChildDiffLoader.nodeCreated
> (ChildDiffLoader.java:110)
> at org.objectstyle.cayenne.graph.NodeCreateOperation.apply
> (NodeCreateOperation.java:73)
> at org.objectstyle.cayenne.graph.CompoundDiff.apply
> (CompoundDiff.java:133)
> at org.objectstyle.cayenne.access.ObjectStoreGraphDiff.apply
> (ObjectStoreGraphDiff.java:155)
> at org.objectstyle.cayenne.access.DataContext.onContextFlush
> (DataContext.java:1215)
> at org.objectstyle.cayenne.access.DataContext.onSync
> (DataContext.java:1194)
> at org.objectstyle.cayenne.access.DataContext.flushToParent
> (DataContext.java:1261)
> at org.objectstyle.cayenne.access.DataContext.commitChanges
> (DataContext.java:1165)
> at
> com.bbcnews.mps.transcode.TranscodeProcessor.triggerTranscodes
> (TranscodeProcessor.java:265)
> at
> com.bbcnews.mps.transcode.TranscodeProcessor.processRequestMessage
> (TranscodeProcessor.java:237)
> at com.bbcnews.mps.transcode.TranscodeProcessor.processMessage
> (TranscodeProcessor.java:148)
> at com.bbcnews.jms.MessageListenerProxy.onMessage
> (MessageListenerProxy.java:134)
> at progress.message.jimpl.Session.rbB_(Unknown Source)
> at progress.message.jimpl.QueueSession.run(Unknown Source)
> at progress.message.jimpl.ep.run(Unknown Source)
>
> "EventDispatchThread-3" Id=15 in BLOCKED on
> lock=org.objectstyle.cayenne.access.ObjectStor..ce5e7a
> owned by JMS Session Delivery Thread Id=31
> at
> org.objectstyle.cayenne.access.ObjectStore.processSnapshotEvent
> (ObjectStore.java:813)
> at
> org.objectstyle.cayenne.access.DataContextMergeHandler.graphChanged
> (DataContextMergeHandler.java:131)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.objectstyle.cayenne.util.Invocation.fire(Invocation.java:
> 240)
> at org.objectstyle.cayenne.event.EventManager$Dispatch.fire
> (EventManager.java:433)
> at org.objectstyle.cayenne.event.DispatchQueue.dispatchEvent
> (DispatchQueue.java:182)
> at org.objectstyle.cayenne.event.DispatchQueue.dispatchEvent
> (DispatchQueue.java:94)
> at org.objectstyle.cayenne.event.EventManager.dispatchEvent
> (EventManager.java:372)
> at org.objectstyle.cayenne.event.EventManager.postEvent
> (EventManager.java:343)
> at
> org.objectstyle.cayenne.access.DataContext.fireDataChannelChanged
> (DataContext.java:1731)
> at
> org.objectstyle.cayenne.access.ObjectStore.processSnapshotEvent
> (ObjectStore.java:842)
> at org.objectstyle.cayenne.access.ObjectStore.snapshotsChanged
> (ObjectStore.java:804)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at org.objectstyle.cayenne.util.Invocation.fire(Invocation.java:
> 240)
> at org.objectstyle.cayenne.event.EventManager
> $InvocationDispatch.fire(EventManager.java:452)
> at org.objectstyle.cayenne.event.EventManager$DispatchThread.run
> (EventManager.java:499) public void processMessage(final
> WrappedMessage message) {
> if (!(message instanceof CayenneNotificationMessage)) {
> LOG.error("Not a valid notication message class: "
> + message.getClass().getName());
> }
>
> LOG.debug("Received a notification message");
> try {
> final String vmID = ((CayenneNotificationMessage) message)
> .getRuntimeId();
>
> LOG.debug("My VM: " + VM_ID);
> LOG.debug("Event VM: " + vmID);
> if (VM_ID.equals(vmID)) {
> LOG.debug("... from the same VM!");
> return;
> }
>
> final CayenneEvent event = (CayenneEvent)
> ((CayenneNotificationMessage) message)
> .getEvent();
> if (event != null) {
> LOG.debug("... processing the event");
> onExternalEvent(event);
> }
> } catch (Exception e) {
> LOG.error("Random notification exception: "
> + e.getLocalizedMessage());
> }
> }
>
>
> protected void sendExternalEvent(final CayenneEvent localEvent)
> throws JMSException {
> LOG.debug("Sending an event");
> final CayenneNotificationMessage message = new
> CayenneNotificationMessage();
> message.setRuntimeId(VM_ID);
> message.setEvent(localEvent);
> sendProxy.sendMessageToTopic(message, topicName);
> LOG.debug("Sent the event");
> }
This archive was generated by hypermail 2.0.0 : Mon Dec 11 2006 - 07:39:50 EST