[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