[rules-users] infinite loops with "no-loop true"
Nord, James
JNord at nds.com
Wed Sep 23 12:14:10 EDT 2009
Hi all,
It seems to me that the no-loop only prevents a rule from triggering
itself - and doesn't make the rule only fire once (which is what I'm
after)
e.g. consider the following two contrived simple rules:
rule "addPriorityPrefix"
dialect "java"
no-loop true
when
$work : Work (priority >= 200)
then
modify($work) {
setTitle("!!! " + getTitle());
};
end
rule "re-assign low priority tasks"
dialect "java"
no-loop true
when
$work : Work (priority < -200)
then
modify($work) {
setOwner("nobody");
};
end
What I end up with is an infinte loop.
Whilst for the simple case I can re-write them like
$work : Work (priority >= 200, !title.startWith("!!!"))
however with the more complex rules this makes the rules get very
complex quickly and less easy to write. Is there a way to prevent these
loops - have I misunderstood or do you really need to check everything
in the rule that you may set?
How would you do the banking interest example?
rule "interest calculation"
no-loop
when
$account : Account( )
then
modify($account) {
setBalance((long)($account.getBalance() * 1.01) )
};
end
if there was another rule that if you where a gold customer and payed in
> $500 the previous month then you get $4 bonus?
rule "gold bonus"
no-loop
when
$account : Account(type="gold", previousMonthDeposit > 500 )
then
modify($account) {
setBalance((long)($account.getBalance() + 4) )
};
end
Regards,
/James
**************************************************************************************
This message is confidential and intended only for the addressee. If you have received this message in error, please immediately notify the postmaster at nds.com and delete it from your system as well as any copies. The content of e-mails as well as traffic data may be monitored by NDS for employment and security purposes. To protect the environment please do not print this e-mail unless necessary.
NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, United Kingdom. A company registered in England and Wales. Registered no. 3080780. VAT no. GB 603 8808 40-00
**************************************************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090923/e6fe2ec1/attachment.html
More information about the rules-users
mailing list