我想实现一个规则引擎,其中如果仅执行一个条件,那么它将不检查其他指定条件。
rule "Print out lower-case tokens"
when
Token ( coveredText == coveredText.toLowerCase )
then
System.out.println("Found a lower case token with text");
end
rule "Print out long tokens with more than 5 characters"
when
Token ( tokenText : coveredText, end - begin > 5 )
then
System.out.println("Found a long token with more than 5 characters \"" + tokenText + "\"");
end
在上面的示例中,如果CoveredText和它的小写字母相等,那么我不想检查其他规则。
我该如何实现这种性质Drools Rule Engine
?
这可以通过在Drools中使用议程组来实现。
引用:
议程组是一种将议程划分为组并控制可以执行的组的方法。默认情况下,所有规则都在议程组“ MAIN”中。通过“议程组”属性,您可以为规则指定其他议程组。最初,工作记忆将重点放在议程组“ MAIN”上。只有当小组获得焦点时,小组的规则才会触发。
例如,当规则“打印出小写字母”触发时,您可以将焦点设置到另一个组(而不是您提到的两个规则的组)。当然,您要首先触发第一个规则。这可以通过更高的显着性值来完成:
每个规则都有一个整数显着性属性,默认为零,可以为负也可以为正。显着性是一种优先级形式,在激活队列中对具有较高显着性值的规则进行排序时,将赋予它们较高的优先级。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句