使用自动对焦时的规则激活顺序

时间:2016-11-17 05:23:06

标签: drools

如果给出属性auto-focus,我对激活规则的顺序有疑问。

例如,如果我有以下规则文件:

rule "Rule1" salience 2
agenda-group "group1"
auto-focus
    when
        ...
    then
        ...
end

rule "Rule2" salience 1
agenda-group "group2"
auto-focus
    when
        ...
    then
        ...
end

我传递了一个激活这两个规则的事实,我观察到议程组按顺序堆叠:

group2
group1

表示首先执行Rule2

现在,如果我颠倒规则的顺序:

rule "Rule2" salience 1
agenda-group "group2"
auto-focus
    when
        ...
    then
        ...
end

rule "Rule1" salience 2
agenda-group "group1"
auto-focus
    when
        ...
    then
        ...
end

我发现Rule1现在先被解雇了。

这是否意味着突出显示不会影响auto-focus情况下的激活顺序,而是取决于规则文件中规则的写入顺序?

关于这个话题,我经历了this discussion,但没有找到满意的答案。

如果我描述的行为是正确的,是否记录在任何地方?

我正在使用Drools 6.2.0。

1 个答案:

答案 0 :(得分:1)

许多规则属性都是ad-hoc扩展,它们是为了让规则作者减少规则逻辑而发明的。当SW功能宣布“auto(matic)”时,您应该非常小心。

如果激活(与执行相同)设置了一个议程组,那么突出显示只会决定该组中的 。另一方面,突显并不影响评估顺序。

如果您需要按规则处理两个或更多议程组之间的决策,请删除自动对焦和议程组。打电话,例如

drools.setFocus( "group1" );

在规则的右侧进行选择。