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");
我想使用此 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");