問題タブ [drools-fusion]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
drools - 次の条件の Drools Fusion スライド時間ウィンドウ
Drools fusion を使用して、コンピューターの cpu_idle に対して何らかのアラームを実行したいと考えています。条件は次のとおりです。
監視したマシンから 10 秒ごとに記録を受け取ります。
cpu_idle<10 の場合、drools はおそらく 10mim の時間ウィンドウを開き、条件 cpu_idle<10 が発生した回数のカウントを開始する必要があります。変数は occur_times です。
- 10 分後、よだれが発生時間を確認します。
これを行う方法がわかりません。私は drools 6.1 を使用しています。以下はメイン コードです:</p>
次のようなレコード Bean があります。
drools - リストの合計が 100 より大きいかどうかを確認する
次のことをしなければならないリストによだれ関数を書く必要があります
- 合計を作成する
- 合計が 100 より大きいかどうかを確認します。
以下は私が作成したよだれルールです
$total が 100 より大きいかどうかを確認できません
ありがとう
drools - 顕著性とタイマーを一緒に使用することは可能ですか?
ルール B は A の前にトリガーされるべきであるというのは本当ですか? それは私にはうまくいかないからです。
編集:
2つの条件は同じです。したがって、両方が同じイベントでトリガーされるはずであり、明確にするために条件が省略されています。ポイントは、20 秒のタイムアウト後にルールをトリガーし、それらを序数にしたいということです。
drools - @timestamp と「over window:time」の関係は何ですか?
Drools 6.2.0.Final を使用しており、window:time を使用して一連のイベントを処理する必要があります。各イベントには日付のフィールドがあります。
そして私のdrlで:
- e1 (2015-01-01 00:00:00)
- e2 (2015-01-01 00:00:20)
- e3 (2015-01-01 00:00:40)
- e4 (2015-01-01 00:01:00)
シナリオ 1:リアルタイムの使用とセットのイベントの挿入を同時に行う。
シナリオ 2:疑似を使用して、イベントのセットを同時に挿入し、イベントのオフセットをクロックに追加します。
2 番目のシナリオは正常に実行されます。しかし、いくつか質問があります。
- @timestamp と「over window:time」の関係は何ですか?
- ソートされていないイベントを (タイムスタンプで) 作業メモリに挿入する必要がある場合はどうなりますか?
- 挿入の時間によって示されるタイムスタンプの代わりに、イベントによって示されるタイムスタンプを使用できますか?
ありがとう。
更新 1
@timestamp、@duration などは、イベントを関連付けるためにのみ使用され (たとえば、A が B の前に、A が B に出会うなど)、イベントをクロックに関連付けません。しかし、「over window:time」は Drools の時計に基づいています。ウィンドウの時間は、イベントが作業メモリに挿入された瞬間を使用して、ルールに一致します。Drools ストリーム モードを使用する必要があります。
java - 新しいイベントの場合、Drools フュージョンがルールを起動しない
私は drools fusion 6.2 final に取り組んでおり、ストリーム モードで新しいイベントが発生した場合にルールを起動したいと考えています。しかし、ルールはそれ自体で解雇されるわけではありません。
私のルールファイルの内容は次のとおりです。
コードは次のとおりです。
意図的に呼び出された場合はルールが起動されますが、ストリームで新しいイベントが発生した場合は起動できませんでした。
drools - Drools イベントのライフサイクル
イベントを撤回するには、ルールのペアを作成する必要がありました。有効期限はないようです。私はワン・アンド・ダン・イベントを望んでいました。以下に示すように、デフォルトのデュレーションであるゼロを使用しています。
したがって、たとえば、撤回ルールを除外してから、最初に RemoveConnectionEvent を挿入し、次に CreateConnectionEvent を挿入すると、RemoveConnection ルールは引き続き実行されます。(単体テストで議題リスナーを使用する)
イベントに対する私の期待は、RemoveConnectionEvent が無視されることでした。その条件がすぐに満たされない場合は何もしません。NewConnection ルールが CreateConnectionEvent に応答したときにルール条件が満たされると、それがハングアップして RemoveConnection ルールをトリガーするとは思っていませんでした。
ルールを期待どおりに動作させるために、RetractedCreation、RetractedRemoval、および RetractedUpdate を作成しました。これはハックのようです。私は自分のイベントが間違っていると宣言したと想像しています。
何か案は?
ps これはかなり良い Q&A でしたが、私は Windows を使用していません。おそらく私のハックは「明示的な有効期限ポリシー」であると推測できます。
Drools Fusion CEP でのテスト イベントの有効期限
これが私のルールです。
drools - 宣言の消失、Kie アーティファクトの KieFileSystem への追加
Drools ルールを動的に管理するために KieFileSystem を使用しています。新しいルールがある場合、KieFileSystem を使用して KieServices に追加しますが、ルールを追加するのではなく上書きしています。別のルールを挿入するとすぐに、以前のルールで作成した宣言がなくなります。
- このテストIncrementalCompilationTest.javaの後にコードをモデル化しました
- 簡単な例KieFileSystemExample.java
- Drools は4.2.2.4 を参照します。プログラムによる KieModule の定義
これらのルールを追加する方法がなければなりませんか、それとも変更する方法はありませんか? 私が探している効果は、AddRemoveRulesTest.javaで特定された手法を使用して実現できます。
IncrementalCompilationTest を正しく実行している場合、AddRemoveRuleTest の方法で、既存のルールを取得し、新しいルールを使用して新しい jar に追加する方法を見つける必要があるように思われます。既存のルールを取得するためにデータベースに戻ることは避けたいと思います。どのように?
このより扱いにくいが、maven に準拠した方法で作業を進めている場合、セッションにルールを動的に追加するためのより良い方法を見つける必要がありますか? 私が知る限り、バージョン管理された Kie アーティファクトの追加を Maven プラクティスとして使用しており、AddRemoveRulesTest メソッドはそのプラクティスを使用していません。drools-6-add-rules-to-a-running-kiesession を参照してください