Ich möchte einige Validierung tun dies mit Drools Regel:StatelessKieSession nicht zurück eingefügt Objekte
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
Ich habe zuerst eine Statefull KieSession, die wie erwartet funktioniert, das erste Mal. Wenn ich die Regel jedoch erneut ausfühle, befinden sich die Validierungsdaten immer noch im Speicher, was ich nicht möchte. Also habe ich versucht das Beispiel auf eine zustandslose KieSession einzustellen.
Mit KieSession kSession
:
kSession.insert(req);
kSession.fireAllRules();
Collection<?> validations = kSession.getObjects(new ClassObjectFilter(Validation.class));
Mit 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");
Die zustandsbehaftete Session gibt ein Validation
Objekt in der validations
Sammlung und die staatenlos KieSession gibt eine leere Sammlung. Warum???
KIE/geifert: 6.5.0.Final
Java EE 7, mit CDI auf Wildfly 10.1.0