2017-10-10 6 views
0

最初のルールがマッチした後に終了するルールエンジンを構築しています。ルールの順序付けは、入力が最初のルールと一致するとすぐに、Salience、ロックオンアクティブ(再整合を防ぐため)、およびアクティベーショングループを終了することで実行されます。Drools 7.2:ルールエンジンの構築(モニタモードと高性能)

ビジネスはモニタモードではないルールへの入力をエンジンが引き続き一致させなければならないモニタモードの新しい要件を持つようになりました。ここ

Object(attr1 = 1, attr2 = 2) 

monitor  Rule 1: if (attr1 = 1) 
non-monitor Rule 2: if(attr = 1 and attr2= 2) 
non-monitor Rule 3: .. 

、それが一致する必要があり、ルール1およびルール2が、なければならないので、すぐにそれが非監視モードでなので、ルール2が一致するように、出口(より高い性能のため)の両方:例えば

。モニターモードのルールは評価されたかどうかを確認するためだけに使用され、ビジネス目的でバックエンドでイベントを発生させます。

私は現在、データベースからルールを動的に読み込むためにPackageDescBuilder、RuleDescrBuilderなどを使用しています。単純なStatelessKieSessionを使用して、RHSの一部として述語内の結果を評価して格納します。

KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId()); 
    StatelessKieSession kieSession = kContainer.newStatelessKieSession(); 
    kieSession.execute(predicate); 

Q:新しいルールを作成するには、どうすればよいでしょうか。

私はここで、このドキュメントを参照しています: https://docs.jboss.org/drools/release/7.2.0.Final/drools-docs/html_single/#_rule_attributes

感謝を!

+0

、それがお役に立てば幸いです。 – laune

答えて

1

最初の「非監視」ルールの後でルールの起動を停止する前に、「監視」ルールをいくつでも実行する必要がある場合、最も簡単な方法はに電話し、最初の「非監視」ルールの後にhalt() -monitor "が発砲しました。

halt()を各 "非モニタ"ルールの最後に置くか、リスナーを使用します。

+0

これは動作するはずです。私はこれをチェックします。しかし、私はステートレスからステートフルセッションに切り替える必要があります。 – Shashank

+0

もう一度ありがとうございます。 Q:ここで並列性を達成できますか? kContainer.newKieSession()は複数のリクエストを処理する唯一の方法ですか、または同じセッションをkContainer.newStatelessKieSession(kieConfiguration)で1つのkieSessionを作成することで再利用できます。 – Shashank

1

私が問題を正しく理解していれば、もう1つの解決策は、2つの異なるアジェンダグループでモニタルールと非モニタルールを分けることです。監視されるルールにはactivation-groupという属性はなく、監視されていないルールはすべて同じactivation-groupを共有します(今日のように)。

次に、規則を実行するときに、正しい順序をagenda-groupに設定して、監視されているルールが監視されないルールの前に起動するようにします。

この方法では、Laueが言及したfireUntilHalt()halt()アプローチを使用することもできます。私はそのアプローチを参照の問題は、次のとおりです。

  • あなたがagenda-groupを使用しない場合は、すべての監視対象のルールが非監視対象のものよりも高い顕著性を持っていることを保証する必要があります。
  • 監視されていないルールに一致するものがない場合は、可能性の最も低いルールをhalt()に追加する必要があります。

は、(1) `解雇された最初のルールの後に停止するように` fireAllRulesを呼び出すために、より簡単です

+0

モニタルールと非モニタルールの順序付けは混在することがあり、異なるアジェンダグループに入ることはできません。しかし、あなたは最後のデフォルトルールが何であっても停止する必要があることに言及しています。ありがとう! – Shashank

関連する問題