2016-11-22 3 views
0

を返しません:StatelessKieSessionは、私は、このルールを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 

私は最初の予想通り、初めての作品ステートフルKieSessionを、作成しました。しかし、ルールを再実行すると、検証の事実はまだメモリに残っています。これは私が望むものではありません。そこで、この例をステートレスKieSessionに調整しようとしました。 KieSession kSessionを使用

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

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の:WildFly 10.1.0

答えて

0

にCDIを使用して6.5.0.Final

のJava EE 7は、それを発見しました。 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"); 
関連する問題