すべてのアラート ルールを実行するために StatefulKnowledgeSession を使用しています。
準備部分で、セッションをリセットする方法がわかりません。したがって、ルールのオーバーライドが再び作成されますか?
すべてのアラート ルールを実行するために StatefulKnowledgeSession を使用しています。
準備部分で、セッションをリセットする方法がわかりません。したがって、ルールのオーバーライドが再び作成されますか?
セッションをリセットすることの意味をもっと明確にできますか?
長時間実行されるセッションのルールに永続的な状態がある場合は、それを開いたままにし、新しいファクトを追加し、必要に応じてすべてのルールを起動することができます。これは、ファクトを作業メモリに無期限に保持する場合、メモリ使用量に影響を与えます。これについては、例 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();
}