2016-12-06 9 views
2

Я использую StatefulKnowledgeSession для запуска всех правил моего предупреждения.Как сбросить StatefulKnowledgeSession?

В подготовительной части я не получаю как сбросить сеанс. Следовательно, это снова создало бы переопределение правил?

ответ

1

Вы можете сбросить StatefulKnowledgeSession, вызвав метод dispose(), присутствующий в сеансе.

Нравится: ksession.dispose();

Полезная ссылка: https://docs.jboss.org/jbpm/v5.1/javadocs/org/drools/runtime/StatefulKnowledgeSession.html

+0

Благодаря Mahabaleshwar, за то, что ответ на мой вопрос, я буду попробовать этот подход. –

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(); 
}