ループ内で多くのブール式を実行する必要があるプロジェクトで使用するためのdroolsを学習しようとしています。私の現在のコードは以下の通りです。これは概念をテストし学習するためのものです。文kSession.fireAllRules();
は、forループの中にあるので、rulesファイルを何度も実行する必要がありますが、一度だけ実行されます。私はここで間違って何をしていますか?なぜループ内に与えられても、droolsルールエンジンは一度だけ実行されますか?
Javaコード
List outList = new ArrayList<Boolean>();
kSession.setGlobal("outList", outList);
List rulesList = new ArrayList<Boolean>();
kSession.setGlobal("rulesList", rulesList);
for (int i = 0; i < 10; i++) {
rule1=!rule1;
rule2 =!rule2;
rule3 =!rule3;
rulesList.clear();
rulesList.add(rule1);
rulesList.add(rule2);
rulesList.add(rule3);
kSession.insert(droolsIntroduction);
kSession.fireAllRules();
boolean result1 = (boolean) outList.get(0);
boolean result2 = (boolean) outList.get(1);
boolean result3 = (boolean) outList.get(2);
}
ルールファイル:
global String topicLevel
global java.util.List rulesList
global java.util.List outList
rule "Drools Introduction"
when
$droolsIntro : DroolsIntroduction(measurename == "measure1")
then
boolean result1= (boolean)rulesList.get(0) && (boolean)rulesList.get(1) && (boolean)rulesList.get(2)
boolean result2= result1 && (boolean)rulesList.get(2);
boolean result3= result1 && (boolean)rulesList.get(2);
//outList.clear();
outList.add(result1);
outList.add(result2);
outList.add(result3);
end
function String getDefaultIfNull(String topicLevel) {
return topicLevel == null ? "Moderate" : topicLevel;
}
ループ内に 'kSession.delete(droolsHandle)'はありますか?私はそれを試して、それは働いているのです。 'droolHandle'は' kSession.insert(droolsIntroduction);の戻りオブジェクトです。 – Vishnu
あなたの提案は何ですか? – Vishnu
はい、古いファクトを削除して新しいファクトを挿入すると、一致するルールが再び発生します。 – laune