2013-11-14 1 views
0

У меня есть простое правило, как это:Вставка нового объекта StatelessKnowledgeSession

rule "First Rule" //You do not talk about Fight Club 
when 
    MyInp(id=="1") 
then 
    insert(new MyOut(true)); 
end 

То, что я хочу, получить созданный объект MyOut из класса Java. Есть ли способ сделать это или мне нужно передать глобальную переменную и обновить ее внутри правила?

ответ

0

С сеансом без гражданства вы можете изменить факт, который вы вставляете, или зарегистрировать глобальный, который вы обновляете.

Если у вас есть сеансный то есть несколько вариантов:

Fetching fact from stateful session of drools

Если вы ищете общие средства изучения того, что существует в оперативной памяти во время сессионного,

StatelessKnowledgeSession ksession = 
     kbase.newStatelessKnowledgeSession(); 
TrackingWorkingMemoryEventListener listener = 
     new TrackingWorkingMemoryEventListener(); 
ksession.addEventListener(listener); 

List<Object> facts = new ArrayList<Object>(); 
facts.add(myRequestFact); 

ksession.execute(facts); 

List<ObjectInsertedEvent> insertions = listener.getInsertions(); 

Это удобно для целей отладки и аудита, но я бы не рекомендовал его как средство получения фактических результатов из запроса. Пример кода (мной) для отслеживания WorkingMemoryEventListener можно найти здесь:

https://github.com/gratiartis/sctrcd-payment-validation-web/blob/master/src/main/java/com/sctrcd/drools/util/TrackingWorkingMemoryEventListener.java

+0

Спасибо @Steve. Если я правильно вас понял, я не могу получить новые объекты из сеанса без гражданства, правильно? – GokcenG

+0

Нет ... вы просто запустите метод execute(), который инкапсулирует создание сеанса с состоянием (!), Вставляя факты, а затем завершая этот сеанс. Поэтому после запуска у вас нет возможности запросить сеанс для фактов. Тем не менее, я добавлю краткую заметку о WorkMemoryEventListener, поскольку это можно было бы использовать для достижения этой цели. – Steve

+0

Ok Steve. Мне тоже не нравится подход EventListener. Поэтому я позабочусь о том, чтобы предварительно вставить пустой объект/вывод в сеанс и получить его после. – GokcenG

 Смежные вопросы

  • Нет связанных вопросов^_^