Search code examples
jbossdroolsrule-engineruledrools-planner

Drools rule not true, how to use 'and'?


I'm trying to have the following working:

rule "userCount"
    when
        $user : User()
        $minutes : Integer()
            from accumulate(
                            MinutesPerUser( user == $user, $time : time) 
                            and Time(this == $time),
                            sum(1)
                           )
    then
        System.out.println( $minutes );
end

but it seems the and Time(this == $user) part is never true. If I remove that part I get some println output.

What's wrong with the above code?


Solution

  • Not knowing the relation of the Java classes, it's a little difficult to state definite facts. But from

     $user : User()
     //...
     and Time(this == $user),
    

    it is quite evident that Time must be a superclass of User or vice versa: otherwise there's no way this constraint can be fulfilled.

    I don't know what you should write instead, as there's no specification of what should be done.

    BTW, sum(1) looks rather fishy, because that would be better expressed by count(1), producing the same result.