当前位置: 首页 > 知识库问答 >
问题:

议程组没有按预期在Drools工作

王成化
2023-03-14

现在,在我的drools项目中,我在单独的DRL文件中有两组规则,它们由议程组分割。对于议程组“preCheck”,我将该议程组中的每个规则的自动聚焦设置为true。例子:

rule "preCheckDuplicate"
    agenda-group "preCheck"
    auto-focus true
    no-loop true
    salience 50
    when
        $f : IngestFileMetadata(isDuplicate.equalsIgnoreCase("True"))
    then
        $f.setIsDuplicate("True");
end

对于另一个议程组-“default规则”-规则没有设置自动焦点属性。示例:

rule "duplicate file default"
    agenda-group "defaultRules"
    activation-group "isDuplicate"
    no-loop true
    salience 0
    when
        $f : IngestFileMetadata(isDuplicate.equals("True"))
    then
        insert(createResponse($f));
end

在通过RESTAPI调用规则时,我还试图通过JSON负载将焦点设置为“preCheck”议程组。例子:

{
  "lookup": "defaultStatelessKieSession",
  "set-focus": "preCheck",
  "commands": [
    {
      "insert": {
        "out-identifier": "IngestFileMetadata",
        "return-object": "true",
        "entry-point": "DEFAULT",
        "object": {
          "com.hms.ingestion.rules.IngestFileMetadata": {
              * * * * * data attributes here * * * * *
          }
        }
      }
    },
    {
      "fire-all-rules": {"out-identifier": "fired"}
    },
    {
      "query": {"name": "rulesResponses", "out-identifier": "rulesResponses"}
    }
  ]
}

然而,在执行规则时,似乎首先要评估“defaultRules”议程组中的规则。我不知道为什么。我相对来说还不太会流口水,所以完全有可能我没有正确理解议程组的概念,但我确信这种html" target="_blank">设计将确保首先评估“预检查”规则。

有人能提供一些关于为什么没有发生这种情况的见解吗?如果我需要提供更多的细节,我可以。

提前谢谢。

共有1个答案

东门奕
2023-03-14

议程组允许您将规则放置到组中,并将这些组放置到堆栈上。堆栈具有推送/弹出行为。在首先介绍如何使用议程组之前,我想说配置议程组取决于您在规则引擎中使用的Kie会话类型。对于有状态会话,您可以通过调用ksession.get议程(). getAgendaGroup("preCheck"). setFocus();来直接配置它。对于无状态会话,您必须声明一个显式规则来将会话的焦点设置为特定的议程。您可以使用以下规则在无状态会话中设置议程:

 rule "global"
 salience 100
    when
        $f : IngestFileMetadata()
    then
        drools.setFocus($f.getAgenda());
end

注意:您必须找到一些方法来获取规则文件中的议程变量。在上面的示例中,get议程()是InpresFileMetadata类中的一个方法,它返回字符串类型的议程值

 类似资料:
  • 我在使用R的group_by和SUMMARY函数时遇到了一些问题,我想知道你们是否可以帮我一些忙。我有一张类似的表格: 我试图使用dplyr的group_by和SUMMARY来找到频率列的平均值。下面是我的示例代码: 我所期望的是,一个表格被吐出来,分解按单个类别分组的平均频率,如下所示: 但是,我收到的是一个按类别分组的表,每个类别接收整个表的平均值,如下所示: 有什么线索吗?我应该说我是初学者

  • 结束 当我通过ksession.insert(Object)将一些人插入工作记忆时,只计算第一个人,忽略其他的人。我对Drools激活组的理解是,如果我有X个规则,这些规则属于同一个激活组,具有不同的显着性值,那么每个人都将被规则处理,显着性最高的将被激发,其余的将被忽略。一旦完成,下一个人将通过并重复这个过程。我所经历的是,第一个触发该激活组中任何规则的人将禁用整个激活组,不再处理其他人员。有什

  • 我目前正在使用Cucumber和Java开发一个基于Selenium的BDD测试自动化框架。我的框架使用Junit,由于Junit不支持软断言,所以我尝试在测试中使用AssertJ断言。然而,这些断言似乎不起作用。让我试着借助下面的代码来解释这一点:

  • 我已经配置了log4j2.xml文件,application.log文件将被创建,它应该每天翻转。 但是在JVM中,applicatoin.log文件在10MB之后会翻转,如果翻转三次,第一个文件会被覆盖。也就是说我随时都application.logapplication-2020-10-16.log.zip. 为什么log4j2(v2.13)即使配置为每日,也会每10MB滚动一次文件?任何在l

  • 我正试图将一个阻塞消费者集成为Reactor铝-SR1中的助焊剂订户。我想使用一个并行调度器,并发地执行阻塞操作。 我实现了一个主类来描述我意图:

  • 我重新安排了云firestore的安全规则,以防止在集合中重新创建文档。以下是我使用的规则: 我用这些文档路径和用户凭据在控制台中模拟了这些规则 如果我创建了一个id为09-07-2020的文档,并使用上述路径进行模拟,则会失败。当我删除文件09-07-2020时,上述模拟工作正常。因此,它在规则模拟器中运行良好。 但当我在应用程序中尝试时,每次尝试都会再次创建文档。因此,如果文档内容以前不同,则