С сеансом без гражданства вы можете изменить факт, который вы вставляете, или зарегистрировать глобальный, который вы обновляете.
Если у вас есть сеансный то есть несколько вариантов:
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
Спасибо @Steve. Если я правильно вас понял, я не могу получить новые объекты из сеанса без гражданства, правильно? – GokcenG
Нет ... вы просто запустите метод execute(), который инкапсулирует создание сеанса с состоянием (!), Вставляя факты, а затем завершая этот сеанс. Поэтому после запуска у вас нет возможности запросить сеанс для фактов. Тем не менее, я добавлю краткую заметку о WorkMemoryEventListener, поскольку это можно было бы использовать для достижения этой цели. – Steve
Ok Steve. Мне тоже не нравится подход EventListener. Поэтому я позабочусь о том, чтобы предварительно вставить пустой объект/вывод в сеанс и получить его после. – GokcenG