0

我的博士是:

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 实例传递给口水,如下所示:

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.DISABLED

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

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

4

1 回答 1

0

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

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

希望能帮助到你,

于 2013-08-11T02:47:38.247 回答