2010-12-11 10 views
5

一般に、(属性値によって)等しいイベントは、連続した方法(毎秒)でいつでも発生するイベントのルールを作成しています。私はマッチした出来事のための規則を時間単位でのみ発したい。Drools - 繰り返しイベントと時間的関係

詳細: イベントが初めて挿入されたとき(まだ存在しない)、またはイベントが挿入されたときに、同じイベントが既に作業メモリに挿入されている場合にのみルールを起動したいそれらの最新のものは少なくとも1時間前に古いものです。

この種のルールを作成するにはどのような方法がありますか?イベントの所要時間は24時間になりますか?

答えて

0

あなたは、このようなグローバルキュー作成することができます。あなたはまた、Javaからあなたのグローバルキューにアクセスする必要があるので、ちょうど使用

global java.util.List eventQueue; 

を:

session.getGlobals(); 
session.setGlobal(name, value); 

このキューでイベントとの関連を保存時間。次に、このキューを毎時フォームJavaコードでチェックし、タイムスタンプに基づいてルールを実行します。これは貧弱なアプローチではありませんが、簡単です。

1
rule X 
when 
    $e : MyEvent() from entry-point "s" 
    not(MyEvent(this != $e, id == $e.id, this before[0s,1h] $e) from entry-point "s") 
then 
    // $e arrived and there is no other event with the same 
    // id that happened during the last hour 
end 

「id == $ e.id」は、2つのイベントが互いに関連していると判断するために使用する制約によって置き換えられます。

関連する問題