【发布时间】:2013-01-24 17:54:08
【问题描述】:
更新功能在drools中是如何工作的?它是否会导致相同的规则再次自动触发?
【问题讨论】:
标签: drools
更新功能在drools中是如何工作的?它是否会导致相同的规则再次自动触发?
【问题讨论】:
标签: 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。
【讨论】: