]
Mario Fusco resolved DROOLS-4898.
---------------------------------
Resolution: Done
Fixed by
The same fix for DROOLS-4896 also solved this problem. Consider however that when you
modify an object in the working memory you should always notify the engine calling an
update.
Accumulates: min does not work after retracting fact.
-----------------------------------------------------
Key: DROOLS-4898
URL:
https://issues.redhat.com/browse/DROOLS-4898
Project: Drools
Issue Type: Bug
Components: core engine
Affects Versions: 7.26.0.Final, 7.31.0.Final
Reporter: Hiroko Miura
Assignee: Mario Fusco
Priority: Major
Labels: support
The following rules does not work with specific facts.
{noformat}
rule "rule1_long"
when
accumulate( Fact( $longVal: longVal), $minVal : min($longVal))
accumulate( Fact( $longVal2: longVal, $longVal2 > $minVal), $minVal2 :
min($longVal2))
$minFact: Fact( longVal == $minVal)
$minFact2: Fact( longVal == $minVal2)
then
System.out.println("Rule ["+kcontext.getRule().getName()+ "]
fires!");
Long $diff = (Long)$minVal2 - (Long)$minVal;
$minFact2.setDiff($diff);
// update($minFact2);
String errmsg = $diff == 0? " !!!!! ERROR !!!!!" : "";
System.out.println( drools.getRule().getName() + " diff:" +
$minFact2.getLongVal() + " - " + $minFact.getLongVal() + " = " +
$diff + errmsg);
System.out.println("\tretract <= "+$minFact );
retract($minFact);
end
{noformat}
There seems to be 2 kind of issues (root cause might be same though).
- 2nd accumulate return same min value with 1st one.
- rule fire count is less than expected.
This does not work with specific set of facts, but works with another set of facts.
If update is called for the fact like above commented out line, this does not happen.