3

すべてのアラート ルールを実行するために StatefulKnowledgeSession を使用しています。

準備部分で、セッションをリセットする方法がわかりません。したがって、ルールのオーバーライドが再び作成されますか?

4

2 に答える 2

0

セッションをリセットすることの意味をもっと明確にできますか?

長時間実行されるセッションのルールに永続的な状態がある場合は、それを開いたままにし、新しいファクトを追加し、必要に応じてすべてのルールを起動することができます。これは、ファクトを作業メモリに無期限に保持する場合、メモリ使用量に影響を与えます。これについては、例 1 を参照してください。

ルールを呼び出すたびにそれを呼び出して作業メモリーを空にしたい場合は、処理が完了した後に session.dispose() を呼び出し、ルール実行ごとに新しい KieSession を作成します。例 2 を参照してください。

例 1

public class MyClass(){
    ... // initialize KieServices/KieContainers
    private KieSession myLongRunningSession = kContainer.newKieSession( "long-running-session" );

    public void executeMyRules( Object myFact ) {
        myLongRunningSession.insert( myFact );
        myLongRunningSession.fireAllRules();
        // do whatever else you need to do
    }
}

例 2

public void executeMyRules( Object myFact, Object myOtherFact ) {
    KieSession session = kContainer.newKieSession( "my-session" );
    session.insert( myfact );
    session.insert( myOtherFact );
    session.fireAllRules();
    ... // do whatever you need to
    session.dispose();
}
于 2016-12-06T18:49:59.247 に答える