首页 > 解决方案 > Drools:同一案例的规则触发两次

问题描述

尽管只有一个匹配案例,但此规则会触发两次。我使用 Drools 6.5.0。最终的。查看日志,在第二轮中将 $card2 作为 $card1,反之亦然。

rule "Rule1"
salience 1
when
  $card1 : (used == false)
  $card2 : (used == false, number = $card1.number)
  exists Hand(name == name1)
  exists Hand(name == name2 || name == name3)
  not Hand(name == name4)

then
    $card1.setUsed(true); $card2.setUsed(true);
    insert(new Hand(name1, $card1, $card2));

end

标签: javadroolsrule-engine

解决方案


规则的 No-Loop 属性确保在 then 语句中发生 when 条件中使用的相同对象的更新/修改时不会重新触发相同的规则。

定义无循环的方法如下:

rule "Rule1"
no-loop true

推荐阅读