When we use binding variables for properties of the data object in constraints, it looks like the rule is evaluated not in property reactive but in class reactive. Therefore, for pattern A in the following example rule, rule-1 is unexpectedly evaluated repeatedly. For pattern B or pattern C, the rule is evaluated only once (in property reactive) as expected.
rule "rule-1" when /* pattern A -> NG */ $fact: Fact( $property: a, $property == 50 ) /* pattern B -> OK */ // $fact: Fact( a == 50, $property: a ) /* pattern C -> OK */ // $fact: Fact( a == 50 ) then System.out.println("***** Action of rule-1"); modify($fact) { setResult("OK") } end