// This rule prints all objects in WM.<br>rule findObject<br>when<br>    $o: Object()<br>then<br>    System.out.println( &quot;Object: &quot; + $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( &quot;Object by query: &quot; + $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&#39;d have guessed that the above result would appear repeatedly, once for each Object in WM,<br>but that&#39;s not so. For N-1 facts the rule fires N*(N+1)/2 times, showing the &quot;initial object&quot;<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>