現在、私の 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」ルールが最初に評価されることが保証されると確信していました。
なぜこれが起こっていないのかについて、誰かが洞察を提供できますか? 詳細を提供する必要がある場合は、できます。
前もって感謝します。