3

我正在使用 StatefulKnowledgeSession 来触发我所有的警报规则。

在准备部分我没有得到如何重置会话。因此,它会再次创建覆盖规则吗?

4

2 回答 2

2

您可以通过调用会话中的 dispose() 方法来重置 StatefulKnowledgeSession。

像这样:ksession.dispose();

有用的链接: https ://docs.jboss.org/jbpm/v5.1/javadocs/org/drools/runtime/StatefulKnowledgeSession.html

于 2016-12-06T11:32:09.010 回答
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 回答