Hi All,

Just wanted to share with you an easy mistake. This is done running Drools 5.5.0.Final.

Imagine a fact

Cheese (
    creationTick : double
    preservationTicks : double
)

Then the following does not do what you expect:

rule "dump old cheese"
    when
        $c : Cheese( $sbd : creationTick + preservationTicks )
        CurrentTime( tick >= $sbd )
    then
        System.out.println("we have to dump "+$c);
end

You would expect that $c is dumped when current time has passed creationTick + preservationTicks. But no. The variable $sbd is bound to creationTick before the preservationTicks are added!! I must say that I do not quite understand how ($sbd : creationTick) + preservationTicks resolves to "true" to make the premise succeed... Maybe because it is != 0?

I found that it should be:

rule "dump old cheese"
    when
        $c : Cheese( $sbd : (creationTick + preservationTicks) )
        CurrentTime( tick >= $sbd )
    then
        System.out.println("we have to dump "+$c);
end

This makes sense. Now $sbd is bound to the result of the addition. But it is an easy trap!!

Regards,
Willem