Wolfgang, hi again. I've tried your suggestion of the computation separation. But I tried to use global variable instead of additional fact-accumulator:
/ @Test public void test1_FireAllRules() throws RuleGeneratorException { ksession.setGlobal("globalAccum", new ArrayList(Arrays.asList(0))); ksession.insert(new ServicePerformanceEvent("MyService", 100)); ksession.fireAllRules(); }/ .................................................................... /global java.util.ArrayList *globalAccum*; rule "HELPER rule to calculate value and put into global variable" dialect "mvel" *salience 10* when Number( $avg: doubleValue ) from accumulate( $e: ServicePerformanceEvent( $name: serviceName, $thisDuration: duration), init( double sum = 0; double count = 0;) action( if("MyService".equals($name)){sum += $thisDuration; count++;}) result( count != 0 ? sum/count : 0 ) ); then globalAccum.set(0, *$avg + 100*); System.out.println("--------------------- HELPER RULE salience 10--------------------------------" ); System.out.println("RHS: HELPER RULE: globalAccum = " + globalAccum.get(0)); end rule "MAIN rule" dialect "mvel" when $event : ServicePerformanceEvent(*duration > globalAccum.get(0)*); then System.out.println("---------------------- MAIN RULE--------------------------------" ); System.out.println("RHS: MAIN RULE: $event.duration = " + $event.duration); System.out.println("RHS: MAIN RULE: globalAccum = " + globalAccum.get(0)); end/ The output of invocation was unexpected for me: --------------------- HELPER RULE salience 10-------------------------------- RHS: HELPER RULE: globalAccum = *200.0* ---------------------- MAIN RULE-------------------------------- RHS: MAIN RULE: $event.duration = *100* RHS: MAIN RULE: globalAccum = *200.0* I've found that the order of invocation is: 1 - HELPER rule LHS (calculating avg) 2 - MAIN rule LHS (comparison duration(100) > globalAccum(0))! 3 - HELPER rule RHS (assigning globalAccum with value 200)! 4 - MAIN rule RHS It was surprise for me, I've expected invocation of Main rule LHS after Helper rule RHS. So, as I understand, the only way to achieve desired behavior is insert helper Fact (insert(new Average($avg))) in the HELPER rule RHS and then matching this fact into MAIN rule LHS, use avg from it and further retract it. -- View this message in context: http://drools.46999.n3.nabble.com/CEP-accumulate-unclear-behavior-tp4027069p4027173.html Sent from the Drools: User forum mailing list archive at Nabble.com. _______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users