如何重置StatefulKnowledgeSession?

时间:2016-12-06 11:29:27

标签: drools drools-guvnor drools-planner drools-fusion

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

在准备部分,我没有得到如何重置会话。因此,它会再次制定规则的重写吗?

2 个答案:

答案 0 :(得分:1)

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

像这样:ksession.dispose();

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

答案 1 :(得分: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();
}