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

时间:2017-07-25 18:00:22

标签: drools kie

我正在使用Drools 6.2.0

我想将我的规则分为3组(FIRST,MAIN,LAST), 并按此顺序执行:

  • 第一
  • MAIN
  • LAST

要做到这一点,我使用议程组" FIRST" 议程组"最后" 在必要的规则。其他规则默认属于 MAIN 议程。

我使用此代码指定顺序:

private void configureAgendas() {
    Agenda agenda = session.getAgenda();

    agenda.getAgendaGroup("LAST").setFocus();
    agenda.getAgendaGroup("MAIN").setFocus();
    agenda.getAgendaGroup("FIRST").setFocus();
}

我的问题是MAIN议程总是在END执行。 所以,我已经执行了两次MAIN议程:

  • 第一
  • MAIN
  • LAST
  • MAIN(再次执行。我想跳过最后一次执行)

我怎么能做到这一点?

如果我无法禁用MAIN议程的自动执行, 如何创建一个将要执行的最后一条规则?

注意:我已经尝试使用显着性Integer.MIN_VALUE ,但我仍然有在此之后执行MAIN议程的规则。

1 个答案:

答案 0 :(得分:0)

如果您确实需要以这种方式控制规则执行,则应该完全避免使用默认组,并将所有规则放在" one"," 2",&#中34;三"

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

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

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