// This rule prints all objects in WM.<br>rule findObject<br>when<br> $o: Object()<br>then<br> System.out.println( "Object: " + $o );<br>end<br><br>Happily I get<br> Object: 42<br> Object: a String object<br>
Object: org.drools.reteoo.InitialFactImpl@4dde85f0<br><br>Now the query way:<br> query object( Object o )<br> o := Object()<br> end<br> rule findObjectByQuery<br> when<br> object( $a ; )<br> then<br>
System.out.println( "Object by query: " + $a );<br> end<br><br>Surprisingly, I get just one:<br> Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0<br><br>A marvellous effect can be observed when the condition in rule<br>
findObjectByQuery is modified to<br> when<br> Object()<br>
object( $a ; )<br>
then<br>
I'd have guessed that the above result would appear repeatedly, once for each Object in WM,<br>but that's not so. For N-1 facts the rule fires N*(N+1)/2 times, showing the "initial object"<br>N times, the first inserted object N-1 times, the second one N-2 times and, finally, the last one<br>
once.<br>Object by query: 42<br>Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0<br>Object by query: a String object<br>Object by query: 100<br>Object by query: 42<br>Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0<br>
Object by query: a String object<br>Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0<br>Object by query: a String object<br>Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0<br><br>-W<br>