[rules-users] Adding eval on rule cause it to run in infinite loop

Davide Sottara dsotty at gmail.com
Wed Jun 11 13:48:53 EDT 2014


I think I know what is happening here.
I assume your supportFT class is @propertyReactive.
(btw, you should follow bean conventions and capitalize class names)
Looking at Rule 1, you don't set the value directly, but you do it through
a modify. Your rule 2, which checks for the value, uses the function
"containsAny"
rather than the field direclty as in "value IN (..)".
At the moment, the engine has no way to realize that the function
involves the field "value" - I'm not even sure it is possible in general -
Property reactivity will ignore the update since, from its perspective, none
of the fields relevant to the rule has been affected, hence rule 2 will
not hit.
If you use eval in the constraint, property reactivity is disabled, so
the rule
WILL fire the first time, but now you are vulnerable to infinite loops,
as if
you did not have propertyreactive.
You may have to use the @watch() annotation explicitly to control which
modifies will cause reevaluations and which ones won't (see the manual
for this)
Adding "eval" everywhere is not a good idea.
Best,
Davide
 




On 06/11/2014 01:53 PM, brachi wrote:
> example of rule that doesn't work without eval:
>
> /*    rule "1"
>     salience -1
>     agenda-group "agenda1"
>     when
>         $conclusion: supportFT()
>     then
> 		if($conclusion.getValue()==null){
> 			modify($conclusion) { setValue(new ArrayList())};
> 		}
> 		$conclusion.getValue().add("supportedValue");
>                 modify($conclusion) { setValue($conclusion.getValue()) };
>      end
>
>
>     rule "2"
>     salience -2
>     agenda-group "agenda2"
>     when
>         supportFT(Operators.containsAny(value,new
> String[]{"supportedValue","otherValue"}))  
> 		$conclusion: ConclusionFt()
>     then
> 		modify($conclusion){setValue("success")};
>     end*/
>
> rule "2" doesn't hit, works only with eval in rule "2".
> in this example I can add eval, because the Fact Types model is different,
> so the rule doesn't reevaluated.
> because I had this case, I decided to add eval for all constraints, but
> unfortunately I had an infinite loop. 
>
>
>
>
> --
> View this message in context: http://drools.46999.n3.nabble.com/Adding-eval-on-rule-cause-it-to-run-in-infinite-loop-tp4029966p4029984.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



More information about the rules-users mailing list