ルール設定オブジェクトを使用して、ルール自体を外部設定できるルールシステムを設計しようとしています。具体的には、DRLルール定義の外部に、特定のタイプのルールに対するルールの起動間隔の最小値を設定する必要があります。?
私のアプローチは、これまで事実としてValueRuleSpecをルールの構成を挿入することです:
rule "Any value detected"
when
$r : ValueRuleSpec(mode == ValueRuleSpecMode.ANY(), $devices: devices)
$e : SensorEvent(deviceId memberOf $devices) from entry-point FMSensorEvents
not Activation(ruleSpec == $r, cause == $e)
then
insert(new Activation($r, $e));
end
$ rをValueRuleSpecオブジェクトはアクティベーションの間の秒数の最小値を含むプロパティtriggerEveryを持っています。どのように私が使用して、設定可能な時間ウィンドウでこれを行うことができ
not Activation(this before[60s, 0s] $e)
:私はこのようなものを使用して$電子の前に特定の範囲内にあるアクティベーションオブジェクトの不在のために試験により、静的に行うことができることを知っています$ r.triggerEveryプロパティは秒数ですか?
時間的演算子、すなわち、 'before'、' after'など、あります一時的な表現で参照される事象のタイムスタンプを含む特定の条件のための構文的砂糖だけである。 (演算子の定義はDroolsマニュアルにあります)。同じ関係を計算する静的メソッドのDRL関数を記述しながら、3番目の事実から来るパラメータを含めても、それほど難しいものではありません。タイムスタンプは、イベントが挿入されたときにJavaコードで設定されたイベントのフィールドとして持つ必要があります。 – laune