更新功能如何在drools中工作?它是否会导致相同的规则再次自动触发?
最佳答案
我认为您需要阅读手册:http://docs.jboss.org/drools/release/5.4.0.Final/drools-expert-docs/html_single/
使用 update
使规则引擎知道事实已被修改。因此,必须重新评估依赖于该事实的规则。这确实会导致规则可能在无限循环中触发。例如,给定以下 DRL,您将看到“无限循环”规则将持续激活:
declare AreWeThereYet
answer : boolean
end
rule "Are we there yet?"
when
not AreWeThereYet()
then
insert(new AreWeThereYet());
end
rule "Infinite loop"
no-loop
when
$question: AreWeThereYet()
then
$question.setAnswer(false);
update($question);
end
这是因为规则引擎已被
update($question)
指示。 ,那 $question
已经改变,需要重新评估。不过有一些方法可以防止这种情况。就放
no-loop
在规则名称和 when
之间的线上防止规则由于其自身的后果而重新激活。另一个可以控制它的规则属性是 lock-on-active
.
关于drools - 更新功能如何在drools中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507633/