搜索

83.2. 规则的日程组

download PDF

日程安排小组是通过相同的日程安排规则属性,共同 开展的一系列 规则。安排按决策引擎日程表分组分组规则。在任何时候,只有一个组 专注于 执行某个规则,然后再在其他 schedule groups 中的规则之前。您可以利用 setFocus() 邀请您获取此表格小组的关注。您还可以使用 auto-focus 属性定义规则,以便下一次激活规则时,会自动将重点分配给分配给该规则的整个日程表组。

每次在 Java 应用程序中执行 setFocus() 调用时,决策引擎会将指定的日程表组添加到规则堆栈的顶部。默认日程小组 "MAIN" 包含不属于指定日程表组的所有规则,并且首先在堆栈中执行,除非另一个组有关注。

例如,以下 DRL 规则属于指定的索引组,它们按以下所示的顺序列在决策引擎堆栈中:

银行应用程序的 DRL 规则示例

rule "Increase balance for credits"
  agenda-group "calculation"
when
  ap : AccountPeriod()
  acc : Account( $accountNo : accountNo )
  CashFlow( type == CREDIT,
            accountNo == $accountNo,
            date >= ap.start && <= ap.end,
            $amount : amount )
then
  acc.balance  += $amount;
end

rule "Print balance for AccountPeriod"
  agenda-group "report"
when
  ap : AccountPeriod()
  acc : Account()
then
  System.out.println( acc.accountNo +
                      " : " + acc.balance );
end

在本例中,必须首先执行 "报告" 日程中的规则,并且 "计算" 日程表组中的规则必须始终执行第二个。然后可以执行其他日程组中的任何剩余规则。因此,在执行其他规则之前, "报告 "和"计算" 组必须接收执行该顺序的焦点:

设定日程组执行顺序的关注

Agenda agenda = ksession.getAgenda();
agenda.getAgendaGroup( "report" ).setFocus();
agenda.getAgendaGroup( "calculation" ).setFocus();
ksession.fireAllRules();

您还可以使用 clear() 方法,在每一机会执行前取消属于给定日程表组生成的所有激活:

取消所有其他规则激活

ksession.getAgenda().getAgendaGroup( "Group A" ).clear();

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.