<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Greg, thanks for the tip.&nbsp; I wasn't aware of jconsole.&nbsp; I grew up on
'C' and am still finding my way around java and its tools.<br>
<br>
I recreated the situation and both jconsole and netbeans (running under
its debugger) report "No deadlock detected".&nbsp; Yet here I am with three
threads in the middle of api calls to drools and nothing moving.&nbsp; Sar
says 98-100% idle, so I don't think I put into a spin loop of some
sort.&nbsp; While paused, I added breakpoints to the next line after the
various calls into drools just to make sure I wasn't repeatedly calling
the same thing.&nbsp; No hits.<br>
<br>
This round I again have the same three scenarios:<br>
- fireAllRules<br>
- insert<br>
- add package<br>
<br>
cb<br>
<br>
<br>
<br>
Greg Barton wrote:
<blockquote cite="mid:35825.75558.qm@web81501.mail.mud.yahoo.com"
 type="cite">
  <pre wrap="">Did you do deadlock detection in a tool like jconsole?

--- On Thu, 8/6/09, Charles Binford <a class="moz-txt-link-rfc2396E" href="mailto:Charles.Binford@sun.com">&lt;Charles.Binford@sun.com&gt;</a> wrote:

  </pre>
  <blockquote type="cite">
    <pre wrap="">From: Charles Binford <a class="moz-txt-link-rfc2396E" href="mailto:Charles.Binford@sun.com">&lt;Charles.Binford@sun.com&gt;</a>
Subject: [rules-users] multi-threaded deadlock?
To: "Rules Users List" <a class="moz-txt-link-rfc2396E" href="mailto:rules-users@lists.jboss.org">&lt;rules-users@lists.jboss.org&gt;</a>
Date: Thursday, August 6, 2009, 4:08 PM
All,

Drools 4.0.7. 

I have a single rulebase and three threads running
stateless sessions
(each thread has it's own session).&nbsp; All appears to
work fine until I
try to dynamically update the packages in the
rulebase.&nbsp; That scenario
intermittently hangs on an apparent deadlock.&nbsp; The
documentation says,
"Packages can be added and removed at any time...", but
maybe this
wasn't assuming a multi-threaded context?

The stack trace of my three threads is below. 
- Thread 10 is in the middle if fireAllRules
- Thread 12 is trying to add facts to its session
- thread 11 is trying to add a new package to the ruleBase,
but seems to
be in some flavor of fireAllRules on the ruleBase even
though there is
no session argument in this code path.

Am I breaking some fundamental drools rule for
multi-threading?&nbsp; Do I
need to lock out other sessions from activity while
updating packages?

Thanks
Charles Binford



"Thread-10"
java.lang.Object.wait(Object.java)
java.lang.Object.wait(Object.java:485)
org.drools.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:106)
org.drools.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:195)
org.drools.common.AbstractWorkingMemory.getFactHandleByIdentity(AbstractWorkingMemory.java:604)
org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:98)
com.sun.evtl.pe.customerPolicy.adm.rules.Rule_turn_on_batch_0.consequence(Rule_turn_on_batch_0.java:8)
com.sun.evtl.pe.customerPolicy.adm.rules.Rule_turn_on_batch_0ConsequenceInvoker.evaluate(Rule_turn_on_batch_0ConsequenceInvoker.java:22)
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:518)
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:475)
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:439)
com.sun.evtl.pe.common.PolicyManager.fireRules(PolicyManager.java:353)
com.sun.evtl.pe.customerPolicy.adm.rules.ArchiveMgrThrd.fireRules(ArchiveMgrThrd.java:132)
com.sun.evtl.pe.customerPolicy.adm.rules.ArchiveMgrThrd.runEngine(ArchiveMgrThrd.java:51)
com.sun.evtl.pe.customerPolicy.adm.msg.PolicyListenerThrd.run(PolicyListenerThrd.java:57)
java.lang.Thread.run(Thread.java:619)



"Thread-11"
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:439)
org.drools.base.FireAllRulesRuleBaseUpdateListener.beforeRuleBaseUnlocked(FireAllRulesRuleBaseUpdateListener.java:29)
org.drools.event.RuleBaseEventSupport.fireBeforeRuleBaseUnlocked(RuleBaseEventSupport.java:168)
org.drools.common.AbstractRuleBase.unlock(AbstractRuleBase.java:361)
org.drools.common.AbstractRuleBase.addPackage(AbstractRuleBase.java:456)
com.sun.evtl.pe.common.PolicyManager.addPackage(PolicyManager.java:237)
com.sun.evtl.pe.customerPolicy.adm.rules.ArchiveMgr.loadNewUserRules(ArchiveMgr.java:170)
com.sun.evtl.pe.customerPolicy.adm.msg.PolicyListenerThrd.run(PolicyListenerThrd.java:78)
java.lang.Thread.run(Thread.java:619)



"Thread-12"
java.lang.Object.wait(Object.java)
java.lang.Object.wait(Object.java:485)
org.drools.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:106)
org.drools.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:195)
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:743)
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:704)
com.sun.evtl.pe.common.PolicyManager.insertSensor(PolicyManager.java:316)
com.sun.evtl.pe.customerPolicy.adm.rules.ArchiveMgrThrd.assertFacts(ArchiveMgrThrd.java:79)
com.sun.evtl.pe.customerPolicy.adm.rules.ArchiveMgrThrd.runEngine(ArchiveMgrThrd.java:50)
com.sun.evtl.pe.customerPolicy.adm.msg.PolicyListenerThrd.run(PolicyListenerThrd.java:57)
java.lang.Thread.run(Thread.java:619)

_______________________________________________
rules-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a>

    </pre>
  </blockquote>
  <pre wrap=""><!---->

      

_______________________________________________
rules-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a>
  </pre>
</blockquote>
</body>
</html>