Drools can deadlock when facts are inserted/retracted/modified in multiple
entry
points in the same session. Since each such action will acquire the lock
associated with the entry point, it's possible for the order of calls to cause
deadlock when the locks for two entry points are acquired by two different
threads, then the change in working memory activates and executes rules which
also insert/retract/modify and thus require acquiring the lock for the other
entry point.
As far as I can tell, there is no way to prevent this kind of deadlock other
than using only one entry point. Can anyone think of others?
In my case, I'm using Drools Fusion with two different entry points for
events.
Whenever events expire, the engine automatically retracts them, so there are
lots of opportunities for the locks from each entry point to be acquired after
already holding the other entry point's lock. I used two different entry
points
to separate different types of events for code clarity, so it's a simple
workaround in my application to consolidate all my events to use a single entry
point.
I can't think of a compelling reason for employing different entry points, so
maybe this isn't a big issue. But it would be good to know if there is another
way of preventing deadlock with multiple entry points.
Thanks,
Norman
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users