我的主人是:
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消息。
任何想法,我做错了什么?
(请注意:我的问题不是无限循环,而是为什么在对象修改后对规则的评估不正确)
答案 0 :(得分:0)
修改块中的语法是错误的(实际上我不确定为什么它甚至编译它正在做什么)。试试这个:
modify(m){
setStatus(Order.ENABLED);
}
希望它有所帮助,