Drools收缩导致规则不发射

时间:2010-07-16 15:52:55

标签: rules drools rule-engine

我在Drools 4.0.7中遇到了一些奇怪的行为,但也许这只是因为我不明白Drools是如何工作的。假设有一个类“A”,它有一个叫做“property”的属性。

作为事实,我有以下A列表: A1,属性= 123 A2,财产= 345 A3,property = 123

我有以下两条规则:

rule "Rule 1 - Remove all A's that have property set to 123"
  salience 1000
  lock-on-active true
when
  $listOfAs : ArrayList collect(A( property == "123" ))
then
  for (Object a: $listOfAs ) {  
      retract (a)
  }
end

rule "Rule 2 - Do stuff with remaining A's"
  salience 900
  lock-on-active true
when
  $listOfAs : ArrayList collect(A())
then
...
end

我的理解是“规则1”将具有属性的A类的事实移除到123.当它到达“规则2”时,“listOfAs”不应该只剩下那个A(即一个)其中property属性设置为“345”)。我注意到的是,“规则2”根本就没有执行,即使我假设还有一个“A”对象尚未撤回。如果我注释掉“撤回”,它会执行“规则2”罚款。

我错过了一些关于这些规则的工作吗?

感谢。 贾斯汀

1 个答案:

答案 0 :(得分:1)

我怀疑这里的问题是使用'锁定活动'。鉴于第一条规则已激活,它会阻止其他规则也被激活。

根据docs lock-on-active是:

“布尔值。”true“禁止在同一规则流或议程组中设置此标志的所有规则的其他激活。”