2011-01-14 6 views
6

私は、少なくとも最後の発射から15分が経過するまで、発射を遅らせるルールを書こうとしています。ただし、Drools Fusionの時間演算子は、現在の時刻との関連で、1つのイベントではなく、お互いに関連した2つのイベントについてのみ推論することができます。Drools Fusionには「今」という概念がありますか?

私はこのような何か希望:私は毎秒を発射し、私は他のルールで使用できるハートビート・イベントを(も前のハートビートを後退)、挿入ルールを書くに頼ってきた

rule "some rule" 
when 
    not LastFiredEvent(this before[0m, 15m] NOW) 
    … 

を現在の時間として役立ちます。

私はこれがむしろ控えめであると感じます。私は何かを逃しているのですか、あるいはDrools Fusionはこれに本当に何かを持っていませんか?

NB。私はではない 15分の倍数でしか発射できないルールまたはルールの遅延発射を探しています。過去17分間に何も起こらなかった場合、ルールは新しいイベントに応じてただちにを発火させる必要があります。

答えて

8

"NOW"という概念は最初は単純に思えるかもしれませんが、あいまいであり、実行環境に基づいて異なるセマンティクスに依存するので、そうではありません。 DROols Fusionには、STREAMモードで実行すると、「NOW」という概念がありますが、上記の内容とは異なります。説明はここでやるには少し時間がかかるので、問題に集中できます。

最初に、「私は発射を遅らせるルールを書こうとしています...」と言って、あなたは言う:「私はルールの発射が遅れているのを見ていない...」と混乱しているあなたが必要なもの。

あなたはタイマー属性を使用することができ、ルールを遅らせたい場合:

rule X 
    timer(int: 15m) 
... 

あなたがイベントの場合には、ルールを起動したい場合は、やったか、スライディングウィンドウを使用することができ、間隔内で実現しませんでした。例:

rule "Event did not happen in the last 15m" 
when 
    not(SomeEvent() over time:window(15m)) 
... 

そして、あなたの質問をDroolsのメーリングリストに投稿してみてください。あなたの答えが分かりやすくなります。私は友人がそれについて私にpingしたのであなたのポストを見ただけです。

乾杯、 エドソン

+0

「今」は問題な概念であることをコメントが興味深いです。あなたは精緻化できますか? –

関連する問題