如何在Drools中删除主议程的默认焦点?

如何在Drools中删除主议程的默认焦点?,drools,kie,Drools,Kie,我正在使用Drools 6.2.0 我想将我的规则分为3组(第一组、主要组、最后一组), 并按以下顺序执行: 首先 主要 最后 为了做到这一点,我在必要的规则中使用了议程组“FIRST”和议程组“LAST”。默认情况下,其他规则属于主议程 我正在使用此代码指定顺序: private void configureAgendas() { Agenda agenda = session.getAgenda(); agenda.getAgendaGroup("LAST").setF

我正在使用Drools 6.2.0

我想将我的规则分为3组(第一组、主要组、最后一组), 并按以下顺序执行:

  • 首先
  • 主要
  • 最后
为了做到这一点,我在必要的规则中使用了议程组“FIRST”议程组“LAST”。默认情况下,其他规则属于主议程

我正在使用此代码指定顺序:

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

    agenda.getAgendaGroup("LAST").setFocus();
    agenda.getAgendaGroup("MAIN").setFocus();
    agenda.getAgendaGroup("FIRST").setFocus();
}
我的问题是,主要议程总是在最后执行。 所以,我要执行两次主要议程:

  • 首先
  • 主要
  • 最后
  • MAIN(再次执行。我想跳过最后一次执行)
我怎样才能做到这一点

如果我无法禁用主议程的自动执行, 如何创建将成为最后执行的规则


注意:我已经尝试使用了显著性整数.MIN_值,但在此之后仍将执行主议程的规则。

如果确实需要以这种方式控制规则执行,则应完全避免默认组,并将所有规则放在“一”、“二”、“三”中的一个中

请注意,规则外部的规则属性。。。在取消或更改之前,end对以下所有规则都有效,因此无需为每个规则设置规则组

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


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

如果您确实需要以这种方式控制规则执行,您应该完全避免默认组,并将所有规则放在“一”、“二”、“三”中的一个

请注意,规则外部的规则属性。。。在取消或更改之前,end对以下所有规则都有效,因此无需为每个规则设置规则组

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


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

谢谢@laune,我没想到这种行为也会发生。我的问题是最糟糕的,因为我无法更改其他100条规则,因为它们仍然是在生产数据库中创建的,等等。因此,我需要使用主议程+我的议程中的规则…谢谢@laune,我也没想到会出现这种行为。我的问题是最糟糕的,因为我无法更改其他100条规则,因为它们仍然是在生产数据库中创建的,等等。所以,我需要在主议程+我的议程中使用规则。。。