[rules-users] Object activiates same rule many times

Vincent LEGENDRE vincent.legendre at eurodecision.com
Fri May 18 08:48:32 EDT 2012


I've taken the rule on nabble (for strange reasons, it does not display correctly on mails ...). 
Wolfgang was right : 

rule "C020 - Gate charge (Out M)-B" 
salience 45 
no-loop true 
when 
ChargeDetailEntity( opsDate_currentLeg >= "20110101 000000" ) and 
$charge : ChargeDetailEntity ( $tariffType : tariffType, $tariffCode : tariffCode, $chargeEtd : etd, billToCompany == "C020", chargeType == "YH", cntrStatus1 == "XM" ) and 
not( 
exists( 
$seq : ChargeDetailRefSeqEntity( $seqEtd : etd, (invSepCriteriaName == "C020 - Gate charge (Out M)") && ((adjType == $charge.adjType) && ((bargeJobId == $charge.bargeJobId) && ((billToCompany == $charge.billToCompany) && ((chargeType == $charge.chargeType) && ((consortiumCode == $charge.consortiumCode) && ((serviceCode == $charge.serviceCode) && ((vesselCode == $charge.vesselCode) && ((voyageCode == $charge.voyageCode) && (etd == $chargeEtd))))))))) ) ) ) 
then 
insert(createChargeDetailRefSeqEntity("C020 - Gate charge (Out M)", $charge, newSeqList)); 
retract($charge); 
end 


the first ChargeDetailEntity( opsDate_currentLeg >= "20110101 000000" ) is the problem. 
Don't know why there is 2 ChargeDetailEntity patterns, but I would put the contraint in the other ChargeDetailEntity pattern. 
This way, adding one ChargeDetailEntity object will only lead one rule activation. With the rule as this, the number of activiation you show in your log is normal ... 

PS : using a exists inside a not is redundant. not means "not exists" by itself. not( exists (X) ) is the same as not( X ) . 

----- Mail original -----

De: "Wolfgang Laun" <wolfgang.laun at gmail.com> 
À: "Rules Users List" <rules-users at lists.jboss.org> 
Envoyé: Vendredi 18 Mai 2012 13:02:09 
Objet: Re: [rules-users] Object activiates same rule many times 

Please show the rule. 

Exponentially growing activations can be caused by rules where the 
same fact type is used more than once. You'll have to use constraints 
inhibiting useless duplications, e.g., 

when 
$a1: A() 
$a2: A(this != $a1 ) 
then 

-W 



On 18/05/2012, Christina Lau <lau.christina at hit.com.hk> wrote: 


Hi all, 

I find an odd pattern in the audit log. When an Object is inserted to the 
working memory, activation is created many times on same rule. The more 
objects are inserted, the duplicated activations are growing exponentially 
which degrade the performance a lot. 

Here attached part of the audit log: 

http://drools.46999.n3.nabble.com/file/n4000630/rule-DOCSEP-1337325521971.log 
rule-DOCSEP-1337325521971.log 

In the log, 
- when object (130) is inserted, rule "C020 - Gate charge (Out M)-B" is 
activiated 129 times. 
- when object (131) is inserted, rule "C020 - Gate charge (Out M)-B" is 
activiated 130 times. 

Here is the rule of "C020 - Gate charge (Out M)-B", 



The "insert" in RHS only add ChargeDetailRefSeqEntity to working memory 
that 
I don't think it causes the recursive activation. 

And I'd already set no-loop to true. Does anyone offer some help here? 


Thank you very much, 
Christina 


-- 
View this message in context: 
http://drools.46999.n3.nabble.com/Object-activiates-same-rule-many-times-tp4000630.html 
Sent from the Drools: User forum mailing list archive at Nabble.com. 
_______________________________________________ 
rules-users mailing list 
rules-users at lists.jboss.org 
https://lists.jboss.org/mailman/listinfo/rules-users 

_______________________________________________ 


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/20120518/7d92070e/attachment.html 


More information about the rules-users mailing list