更新機能は drools でどのように機能しますか? 同じルールが自動的に再起動されますか?
質問する
14902 次
1 に答える
15
マニュアルを読む必要があると思います:http://docs.jboss.org/drools/release/5.4.0.Final/drools-expert-docs/html_single/
を使用update
すると、ルールエンジンはファクトが変更されたことを認識します。したがって、その事実に依存するルールを再評価する必要があります。これには、ルールが無限のサイクルで実行される可能性があるという効果があります。たとえば、次のDRLを指定すると、「無限ループ」ルールが継続的にアクティブになることがわかります。
declare AreWeThereYet
answer : boolean
end
rule "Are we there yet?"
when
not AreWeThereYet()
then
insert(new AreWeThereYet());
end
rule "Infinite loop"
no-loop
when
$question: AreWeThereYet()
then
$question.setAnswer(false);
update($question);
end
これは、ルールエンジンがによって指示されupdate($question)
、$question
変更され、再評価する必要があるためです。
ただし、これを防ぐ方法はいくつかあります。no-loop
ルール名と、when
ルール自体の結果の結果としてルールが再アクティブ化されるのを防ぐために、間に線を引くだけです。これを制御できるもう1つのルール属性はlock-on-active
です。
于 2013-01-25T16:11:44.610 に答える