4

更新機能は drools でどのように機能しますか? 同じルールが自動的に再起動されますか?

4

1 に答える 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 に答える