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 .

关于drools - 更新功能如何在drools中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14507633/

相关文章:

java - 为什么将 Drools 6 KIE JAR 加载到代码中会失败?

jboss - 为什么 'from'关键字会向后迭代?

java - Drools:调用 addPackageFromDrl(source) 时出现 NullPointerException

state - Drools是映射业务规则/逻辑的最有效方法吗?

流口水错误 : Unable to find @positional field

java - Drools规则语言: strange behaviour with class fields

drools - 如何在Eclipse Indigo IDE中安装Drools插件

java - Drools Planner 构造启发式 java.lang.ClassCastException

java - Drools 在网页中渲染输出

java - Eclipse drools 插件无法编辑约束