[rules-users] How to activate/deactivate a rule.

Michael Anstis michael.anstis at gmail.com
Fri Sep 17 03:12:41 EDT 2010


Have you tried running what you have?

I'd expect it to give the result you expect already (other than throwing an
error because $lfna_SEI and $r_SE are not bound in the last rule and
assuming chkRuleExpre is constant over time). Rules do not normally execute
in any sequential order (unless you explicitly make them so). As the facts
are inserted into WM they are matched against your rules and activations
scheduled. When all facts are inserted into WM and you call fireAllRules the
activations are played out and "truth maintenance" ensures the "result" of
their firing is consistent with the facts in WM (either inserted by rules or
the programmer). This is in essence "how inference engines" work.

After you've called fireAllRules (and assuming you have a stateful session)
you insert more ABC's then you'd have to expect the last rule to be
re-evaluated - following another call to fireAllRules. So in part when rule
3 ultimately gives the "correct" answer depends upon when you stop inserting
ABC's.

On 17 September 2010 07:35, Ritesh <ritesh.khot at sungard.com> wrote:

>
> Hi,
>
> I have 3 rules in my drl file and want the last one should get fired only
> after all the facts in rule1 and rule2 gets inserted in working memory.
> Please see below code for more understanding. Please suggest.
>
> Thanks
>
> declare DistinctAT
>     d_auditT : String
> end
>
> declare ActualSum
>     auditT : String
>     sumOfThree : BigDecimal
> end
>
> rule "insert combined sum"
>        dialect 'java'
> when
>    ABC( $a:A, $b:B, $c:C )
>
> then
>        BigDecimal actSum = $c.multiply(0.13);
>        ActualSum $as = new ActualSum();
>        $as.setAuditT($a);
>        $as.setSumOfThree(actSum);
>        insert($as);
>        System.out.println("AT :" + $movAuditT);
> end
>
> rule "insert distinct AT"
>
>        dialect 'java'
> when
>    $a : ActualSum( $AT : auditT )
>        not DistinctAT( d_auditT == $AT )
> then
>        DistinctAT $disAT = new DistinctAT();
>        $disAT.setD_auditT($AT);
>        insert($disAT);
>        System.out.println("Done!");
> end
>
> rule "Get Sum Group by AT"
>
>        dialect 'java'
> when
>
> DistinctAT( $dAT: d_auditT )
>
> $total : Double()
> from accumulate( ActualSum( auditT == $dAT, $actSum_Main : sumOfThree ),
> sum( $actSum_Main ) )
>
> eval(
>        chkRuleExpre( $total,$lfna_SEI,$r_SEI )
> )
>
> then
>        System.out.println("Done Main Rule, total :" + $total);
> end
>
> --
> View this message in context:
> http://drools-java-rules-engine.46999.n3.nabble.com/How-to-activate-deactivate-a-rule-tp1516088p1516088.html
> Sent from the Drools - User mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100917/09c921a1/attachment.html 


More information about the rules-users mailing list