0

我有这样一个简单的规则:

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

我想要的是从 Java 类中获取创建的 MyOut 对象。有没有办法做到这一点,或者我必须传递一个全局变量并在规则内更新它?

4

1 回答 1

0

使用无状态会话,您可以修改您插入的事实,或注册您更新的全局。

如果您有一个有状态的会话,那么还有更多选项:

从流口水的有状态会话中获取事实

如果您正在寻找一种通用方法来检查无状态会话期间工作记忆中存在的内容,

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

于 2013-11-14T23:39:22.513 回答