Drools 锁定活动不会触发规则

问题描述 投票:0回答:1

我有一个小例子,我希望执行两个规则,但只触发一个(规则 1)。这有什么问题吗? 流口水版本7.74.1 java 8

rule "RULE 1"
    agenda-group "some-group"
    when
    then
        insert( new Object( ) );
        System.out.println("RULE 1 RUN");
end


rule "RULE 2"
    agenda-group "some-group"
    lock-on-active
    salience -1
    when
        Object( )
    then
        System.out.println("RULE 2 RUN");
end

尝试调试谁激活了规则 2,并在堆栈跟踪中看到,haltRuleFiring 上的规则 1 根据规则 2 计算 LHS

java drools
1个回答
0
投票

工作正常。

lock-on-active
防止规则激活 如果议程组已处于活动状态。 “规则 1”和“规则 2”都位于同一议程组“某个组”中。由于您看到“规则 1”被触发,因此议程组处于活动状态;由于它处于活动状态,因此“规则 2”不会触发。

尚不完全清楚您在这些规则中使用

lock-on-active
或显着性的原因,因此无法建议如何解决它。但如果您因为规则 1 修改了工作记忆而想要触发规则 2,只需删除
lock-on-active
。 (并且也删除显着性,您不需要它,而且通常不是好的做法。)如果您希望规则 1 在议程组重新触发时不重新触发,请将
not( Object() )
添加到条件/when 子句中规则 1.

有关

lock-on-active
的更多信息请参阅这篇 博客文章。它已经很老了(2012 年),但仍然相关并且有示例。

© www.soinside.com 2019 - 2024. All rights reserved.