What version of Drools are you using?
 
Pre-5 has "Shadow Facts" so you can't rely upon pass-by-reference. I believe 5 has had Shadow Facts removed.
 
Insert places a new object into WM whereas update refreshes (the shadow) of an existing one.
 
I would expect you to have to use update in your example:-
 
rule "Add person to math class"
    no-loop

        when

            person : Person(likesMath == true)

        then

            person.setClassName("Math");
 
            update(person);

    end
 
rule "And now, time for something completely different"
    no-loop

        when

            person : Person(likesMath == true)

        then
 
            PreferredClass p = new PreferredClass("Math");
            p.setPerson(person);
            insert(p);
    end
 
 
Cheers,
 
Mike


From: rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Shyam, Pallav (MSCIBARRA)
Sent: 11 September 2008 11:40
To: rules-users@lists.jboss.org
Subject: Re: [rules-users] Update vs insert

Very strange. The facts are passed into the WM by-reference. Therefore the query should work after calling the person.setClassName("Math") on the fact. And this should work without calling the insert or update.

This leaves me guessing that the query does not work on the facts directly, instead they work on shadow facts.



From: rules-users-bounces@lists.jboss.org
To: Rules Users List
Sent: Thu Sep 11 04:41:37 2008
Subject: [rules-users] Update vs insert

Hello,

   What is the difference between calling insert and update in a rule file? When I use insert my queries don’t work, but if I use update they seem to. I don't mind using update, but I would like to understand the difference between the two. Here is my rule file.

    rule "Add person to math class"
    no-loop
        when
            person : Person(likesMath == true)
        then
            person.setClassName("Math");
            insert(person);
    end

   I also have a query:

   query getPeopleForClass(String _className)
      Person(className == _className)
   end

   When I add two facts to working memory, where the likesMath attribute is true, then run my query I get zero results back. When I change the rule, "Add person to math class", to use update(person) instead of insert(person) two students are returned.

  Any help would be appreciated.

Thanks,
Dan


Daniel Quinn
Fedex - Custom Critical
Software Specialist I
234.310.4090(x2586)

-----Original Message-----
From: rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of thomaskukofka@web.de

Sent: Wednesday, September 10, 2008 2:27 PM
To: rules-users@lists.jboss.org
Subject: [rules-users] Re: looping problem

Hello,

thanks that works. I just forgot to set the focus in the init rule..

Regards
Thomas
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



NOTICE: If received in error, please destroy and notify sender. Sender does not intend to waive confidentiality or privilege. Use of this email is prohibited when received in error.