[rules-users] Problem using 'not contains'

Edson Tirelli tirelli at post.com
Mon Apr 20 19:16:59 EDT 2009


   Allen,

   I am not sure what is happening, because the correct way is to call a
modify/update on $sm:

when
    $sat : Satellite(isOverhead == true)
    $sm : SatManager($ls : listOfOverheadSats not contains $sat)
then
    $ls.add($sat);
    update( $sm );
end

   This should not loop because of the condition itself, since now the "not
contains" condition will be false and will prevent the loop.

   Can you double check there isn't another rule that is causing the loop?
Otherwise, please open a JIRA.

   Regarding the question, drools manages collections as attributes in the
same way it manages any other kind of "Object" attribute. Although, in
drools 4, shadow facts do a shallow copy on collection attributes that
sometimes require some care when working with evals(). But this is not your
case.

    []s
    Edson



2009/4/20 Bagwell, Allen F <afbagwe at sandia.gov>

>
> This is in Drools 4.0.7
>
> I have a class called SatManager with a field:
>
> ArrayList<Satellite> listOfOverheadSats
>
> That has an appropriate getter method.
>
> I have a relatively simple rule that goes something like this:
>
> when
>     $sat : Satellite(isOverhead == true)
>     $sm : SatManager($ls : listOfOverheadSats not contains $sat)
> then
>     $ls.add($sat);
>
> My problem is that Drools doesn't understand that the ArrayList has been
> modified, therefore this rule always fires on the same satellite if the sat
> object changes in any other way.
>
> I've tried adding:
>
> update($sm);
>
> To the consequence, but that only caused the rule to re-fire infinitely --
> even with the no-loop keyword applied.
>
> So my question is how does Drools manage its knowledge of changes to
> Collections embedded in fact objects? The documention for the 'contains/not
> contains' keyword did not explain this.
>
> I'm really stumped here.
>
> Allen F. Bagwell
> e-mail:  afbagwe at sandia.gov
> phone:  505/284-4517
> fax:  505/ 844-7886
>
> Ask your doctor if medical advice from a TV commercial is right for you.
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
 Edson Tirelli
 JBoss Drools Core Development
 JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090420/6292b7d7/attachment.html 


More information about the rules-users mailing list