Drools:为什么这个规则不正确?

时间:2013-08-10 15:51:29

标签: java drools rule-engine

我的主人是:

rule "Active Orders"
    dialect "mvel"
    //no-loop
    when
        m: Order( status == Order.ENABLED, id : id )
    then
        System.out.println( "Order Id is: " + id );
        modify ( m ) 
        { 
            status = Order.DISABLED  
        };
end

我将一个Order实例传递给drools,如下所示:

Order order = new Order();
order.setId(100);
order.setStatus( Order.ENABLED );
ksession.insert( order );

ksession.fireAllRules();

我看到规则被无限激发,并带有消息:

Order Id is: 100
Order Id is: 100
Order Id is: 100
.....

我可以理解无限循环,但关键是我在修改块中将Order Status设置为DISABLED:
status = Order.DISABLED

因此,再次触发when规则.... WHEN条件即status == Order.ENABLED,不应该满足,并且我不应该多次看到system.out.println消息。

任何想法,我做错了什么?
(请注意:我的问题不是无限循环,而是为什么在对象修改后对规则的评估不正确)

1 个答案:

答案 0 :(得分:0)

修改块中的语法是错误的(实际上我不确定为什么它甚至编译它正在做什么)。试试这个:

modify(m){
    setStatus(Order.ENABLED);
}

希望它有所帮助,