[rules-users] Possible problem in PathMemory

raojinghai at gmail.com raojinghai at gmail.com
Fri Jun 13 19:00:54 EDT 2014


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140613/9c848e7b/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DynamicSalienceAndStreamMode.zip
Type: application/zip
Size: 7257 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20140613/9c848e7b/attachment.zip 


More information about the rules-users mailing list