【问题标题】:How does update function works in drools?更新功能如何在流口水中工作?
【发布时间】:2013-01-24 17:54:08
【问题描述】:

更新功能在drools中是如何工作的?它是否会导致相同的规则再次自动触发?

【问题讨论】:

    标签: drools


    【解决方案1】:

    我认为你需要阅读手册: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

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 2017-01-10
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多