0
我想這樣做使用此一些驗證Drools的規則:StatelessKieSession不返回插入的對象
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
我首先創建一個有狀態KieSession,預期該工作,還是第一次。但是,當我重新運行規則時,驗證事實仍在Memory中,這不是我想要的。所以,我試圖將這個例子調整爲無狀態的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");
的有狀態會話validations
集合中返回一個Validation
對象和無狀態KieSession返回一個空的集合。爲什麼???
KIE/Drools的:6.5.0.Final
的Java EE 7,上WildFly 10.1.0