首页 文章

如何在Drools中删除默认焦点到MAIN议程?

提问于
浏览
1

我正在使用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 回答

  • 0

    如果您确实需要以这种方式控制规则执行,则应该完全避免使用默认组,并将所有规则放在“one”,“two”,“three”之一中 .

    请注意,规则... end之外的规则属性对所有后续规则有效,直到取消或更改为止,因此无需为每个规则设置规则组 .

    (奇怪的是,在MAIN和LAST耗尽之后仍有MAIN规则被解雇 . 我不喜欢这种情况 . )

    编辑:另一个选项是在LAST中添加一个具有最低优先级的规则,以将焦点更改为FIRST . 您可能需要另一个在最后一个“倒带”最后一条规则,以便在下一轮结束时再次触发 .

相关问题