I could be wrong but I thought dynamic salience used facts in working memory and hence your RHS would need to signal changes to the salience variables.
Sent on the move On 14 Jun 2014 00:01, <raojing...@gmail.com> wrote: > Hi Mario, > > I figured out this is a problem with Event and dynamic salience. Suppose > we have the following declarations and rules: > > declare Message > @role(event) > end > > rule "rule1" > salience RuleSalience.RULE1 > when > $m : Message() > then > System.out.println("====================> rule1"); > retract($m); > RuleSalience.RULE1 = RuleSalience.RULE2 - 1; > end > > rule "rule2" > salience RuleSalience.RULE2 > when > $m : Message() > then > System.out.println("=====================> rule2"); > retract($m); > RuleSalience.RULE2 = RuleSalience.RULE1 - 1; > end > > I want when a Message is inserted, either rule1 or rule2 is fired. I also > want two rules can fire alternatively. So when one rule is fired, its > salience becomes lower. > > The result is, if I don't declare Message as an Event, it works fine. > Otherwise, only rule1 is fired. > > The problem seems to be at > org.drools.core.reteoo.LeftInputAdapterNode::doInsertSegmentMemory(). > Because of stream mode, both rules are not inserted StagedLeftTuples. So > rule1 and rule2 are not compared based on salience. Because rule1 has a > smaller act#, it is always fired first. > > The attached zip is a test case. If you want mvn clean test, it will fail. > However, if you remove the following lines from Sample.drl, the test will > succeed. > > "declare Message > @role(event) > end" > > Thanks. > > Jinghai > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users