StatelessKieSession 没有 return 插入对象

StatelessKieSession does not return inserted objects

我想使用此 Drools 规则进行一些验证:

rule "Test"
    when
        MyRequest(paymentTerm == PaymentTerm.MONTH);
    then
        Validation val = new Validation();
        val.setIsValid(true);
        val.setDescription("It's a monthly term!");
        insert(val);
end

我第一次创建了一个 Statefull KieSession,它按预期工作。然而,当我重新运行规则时,验证事实仍在内存中,这不是我想要的。因此,我尝试将示例调整为无状态 KieSession。

使用KieSession kSession:

    kSession.insert(req);
    kSession.fireAllRules();
    Collection<?> validations = kSession.getObjects(new ClassObjectFilter(Validation.class));

使用StatelessKieSession kSession

    List<Command> cmds = new ArrayList<>();
    cmds.add(CommandFactory.newInsert(req, "request"));
    cmds.add(CommandFactory.newGetObjects(new ClassObjectFilter(Validation.class), "validations"));
    ExecutionResults results = kSession.execute(CommandFactory.newBatchExecution(cmds));
    Collection<?> validations = (Collection<?>) results.getValue("validations");

有状态会话 returns validations 集合中的 Validation 对象和无状态 KieSession returns 空集合。为什么???

KIE/流口水:6.5.0.Final

Java EE 7,在 WildFly 10.1.0 上使用 CDI

找到了。当 fireAllRules 命令为 运行 时,我需要明确指定顺序。这有效:

    List<Command> cmds = new ArrayList<>();
    cmds.add(CommandFactory.newInsert(req, "request"));
    cmds.add(CommandFactory.newFireAllRules());
    cmds.add(CommandFactory.newGetObjects(new ClassObjectFilter(Validation.class), "validations"));
    ExecutionResults results = kSession.execute(CommandFactory.newBatchExecution(cmds));
    Collection<?> validations = (Collection<?>) results.getValue("validations");