1

現在、私の drools プロジェクトでは、アジェンダ グループごとに分割された個別の DRL ファイルに 2 つのグループのルールがあります。アジェンダ グループ「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

他のアジェンダ グループ「defaultRules」の場合、ルールにはオート フォーカス属性が設定されていません。例:

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

残りの API を介してルールを呼び出すときに、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」アジェンダ グループのルールが最初に評価されるようです。理由がわかりません。私は Drools に比較的慣れていないので、アジェンダ グループの概念を正しく理解していない可能性は十分にありますが、この設計により、「preCheck」ルールが最初に評価されることが保証されると確信していました。

なぜこれが起こっていないのかについて、誰かが洞察を提供できますか? 詳細を提供する必要がある場合は、できます。

前もって感謝します。

4

2 に答える 2