私はルールをたくさん持っており、私はそれらのためにいくつかのユニットテストを書こうとしています。私のテストでは、私はこれを使用しています:Droolsは、アジェンダフィルタを使用して特定のルールを起動すると、他のすべてのルールを検証するのはなぜですか?
はint rulesFired = kSession.fireAllRules(new RuleNameEqualsAgendaFilter("rule name 1"));
私が気づいた事が返さ焼成ルールの量は1ですが、Droolsのは、まだ条件が満たされている他のルールに対して検証しようということです。私は時々、私のkSessionにユニットテストのために挿入しているものに基づいて条件が一致するので、私のルール名がアジェンダフィルタに定義されていない他のルールからエラーメッセージを受け取ることがあります。例えば
私が持っている:
rule "test1"
when
$var : Map(this["key"] == "gold")
then
do something
end
rule "test2"
when
$var : Map(this["key"] == "gold" && this["other"] == "silver")
then
do something
end
をし、ルール1のための私のテストで私は、「キー」とのマップを持っています。 "test1"のフィルタを使ってテストを実行すると、フィルタリングしているルールが "other"を気にしなくても、私のマップに "other"の値がないのでnullポインタを受け取ります
なぜこのようなことが起こりますか?私はどこにでもドキュメントを見つけることができません。 Droolsがフィルタリングする前に、DRLファイルのすべてのルールと構文を検証する必要があります。
ありがとうございます。私はそれを取るが、これはどこにも書かれていないが、ルール全体を評価する責任があるソースクラスで見ることができる。 – Seephor
Reteとその細分化の仕方が文書化されています。そのアジェンダのフィルタはルールの発火にのみ影響します。 – laune
@シーファーは、これを達成したいと思っています。異なる列を持つために例外をスローしているので。 – Neetika