是否可以在Drools中取消规则?

时间:2015-07-01 18:41:55

标签: java drools rule-engine

假设我有一个像这样的drools文件,

rule "Test Rule 1"
salience 10

when
    $data : Map( this["amount"] >= 1000 && this["quantity"] >=3 )
then
    System.out.println("You've met the Criteria");
end

===========================================================================================

rule "Test Rule 2"
salience 9

when
    $data : Map( this["amount"] >= 1000 )
then
    System.out.println("Quantity Criteria is not met");
end

===========================================================================================

rule "Test Rule 3"
salience 8

when
    $data : Map( this["quantity"] >= 3 )
then
    System.out.println("Amount criteria is not met");
end

所有这些都将出现在单个.drl文件中。与规则一样,规则的顺序将基于最高Salience数。我需要类似的东西,

1)如果满足Test Rule 1,我不希望执行进一步的规则。

2)如果Test Rule 1不满意,那么我不必担心,它只会按照最高显着性顺序执行其他规则。

是否有hideRule("Test Rule 2", "Test Rule 3")hideRules() - which should unexpose rules waiting to be executed

等选项

我知道我可以改变我的条件以符合我的标准,但我想知道Drools中unexpose规则是否有任何选择?

2 个答案:

答案 0 :(得分:0)

drools.halt();

的末尾添加Test Rule 1

答案 1 :(得分:0)

激活组将解决此问题:

  

激活组是由相同的“激活组”规则属性绑定在一起的一组规则。在该组中,只有一个规则可以触发,并且在该规则触发后,所有其他规则都将从议程中删除。可以随时调用clear()方法,该方法会在有机会触发之前取消所有激活。

在每个规则中添加activation-group "groupName"会产生预期的行为。