Я использую StatefulKnowledgeSession для запуска всех правил моего предупреждения.Как сбросить StatefulKnowledgeSession?
В подготовительной части я не получаю как сбросить сеанс. Следовательно, это снова создало бы переопределение правил?
Я использую StatefulKnowledgeSession для запуска всех правил моего предупреждения.Как сбросить StatefulKnowledgeSession?
В подготовительной части я не получаю как сбросить сеанс. Следовательно, это снова создало бы переопределение правил?
Вы можете сбросить StatefulKnowledgeSession, вызвав метод dispose(), присутствующий в сеансе.
Нравится: ksession.dispose();
Полезная ссылка: https://docs.jboss.org/jbpm/v5.1/javadocs/org/drools/runtime/StatefulKnowledgeSession.html
Можете ли вы быть более ясным о том, что вы имеете в виду о сбросе сеанса?
Если у вас есть постоянное состояние в правилах для продолжительного сеанса, вы можете держать его открытым, добавлять новые факты и при необходимости запускать все правила. Это имеет некоторые последствия использования памяти, если вы постоянно сохраняете факты в рабочей памяти. См. Пример 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();
}
Благодаря Mahabaleshwar, за то, что ответ на мой вопрос, я буду попробовать этот подход. –