我正在使用Drools 6.2.0
我想将我的规则分为3组(FIRST,MAIN,LAST),并按以下顺序执行:
-
第一
-
主要
-
最后
为此,我在必要的规则中使用 agenda-group "FIRST" 和 agenda-group "LAST" . 其他规则默认属于 MAIN 议程 .
我正在使用此代码来指定顺序:
private void configureAgendas() {
Agenda agenda = session.getAgenda();
agenda.getAgendaGroup("LAST").setFocus();
agenda.getAgendaGroup("MAIN").setFocus();
agenda.getAgendaGroup("FIRST").setFocus();
}
我的问题是MAIN议程总是在END执行 . 所以,我正在执行MAIN议程两次:
-
第一
-
主要
-
最后
-
MAIN(再次执行 . 我想跳过最后一次执行)
我怎么能得到这个?
如果我无法禁用MAIN议程的自动执行,如何创建将成为最后执行规则的规则?
注意:我已经尝试使用 salience Integer.MIN_VALUE ,但我仍然有在此之后执行MAIN议程的规则 .
1 回答
如果您确实需要以这种方式控制规则执行,则应该完全避免使用默认组,并将所有规则放在“one”,“two”,“three”之一中 .
请注意,规则... end之外的规则属性对所有后续规则有效,直到取消或更改为止,因此无需为每个规则设置规则组 .
(奇怪的是,在MAIN和LAST耗尽之后仍有MAIN规则被解雇 . 我不喜欢这种情况 . )
编辑:另一个选项是在LAST中添加一个具有最低优先级的规则,以将焦点更改为FIRST . 您可能需要另一个在最后一个“倒带”最后一条规则,以便在下一轮结束时再次触发 .