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 : Fri Dec 08 2006 - 11:15:35 EST