The ideas is that objects in working memory are those that meant to be tracked: their changes are made visible to the rules via the insert/update/retract methods. A global is not in working memory, so it's changes cannot be tracked. You can change the contents of a global all day long and the rules would never be notified.
It's a similar concept to threads and synchronization. You can have unsynchronized access to member variables in a class when in a multithreaded environment, but the results are unpredictable. Likewise, you can use globals in conditions, and change the value of the global as you go, but the results are unpredictable. --- On Wed, 6/10/09, Malenfant, Andre <[email protected]> wrote: > From: Malenfant, Andre <[email protected]> > Subject: RE: [rules-users] Constaint evaluation > To: "Kris Verlaenen" <[email protected]> > Cc: "Rules Users List" <[email protected]> > Date: Wednesday, June 10, 2009, 2:20 PM > Thanks Kris, > > I will try with code constraints. > > But on the globals subject, I read in the documentation > that one should not use a global in a rule. I have trouble > understanding why. I don't think drools clones the global > object (might not be possible anyway). If my rule > consequences change the state of a global (this usage is > considered valid as per the documentation as well) then what > is the harm of using it in a condition? I could understand > with immutable objects like String but... > > I can change my code to insert that global in the working > memory but I would like to understand why I should do so... > And if I do and the state of that object is changed by a > consequence of my rules, I have to call update? For the same > reason? I guess I am trying to understand the underlying > mechanism. > > Thanks > > > -----Original Message----- > From: Kris Verlaenen [mailto:[email protected]] > > Sent: Wednesday, June 10, 2009 11:38 AM > To: Rules Users List; Malenfant, Andre > Cc: Rules Users List > Subject: Re: [rules-users] Constaint evaluation > > It depends on what type of constraint you are using. > > If you are using a rule constraint, that constraint will be > evaluated > just the same as normal rules. This means that the > constraints are > evaluated when data is inserted / updated / removed. > Note that, if you > want to make sure the engine is using up-to-date > information, you must > notify the engine (using update) when you change the data > in the working > memory. Also note that globals are considered > immutable. You should > never write rules that depend on the state of a global and > where the > global can be changed. > > If you are using code constraints, the constraint is > evaluated at the > point the code constraint is reached. > > Kris > > Quoting "Malenfant, Andre" <[email protected]>: > > > I have some trouble understanding how conditions and > constraints are > > evaluated: > > > > I have a rule flow split node with constraints on a > global object. > > The split node always takes the same path like if the > constraints are > > evaluated at the beginning of the execution of the > process and not > > when the process flow reaches that split node. What I > would expect is > > that the split node constraints takes into account the > state of the > > global object as modified by previous rules in the > flow. > > > > Am I right to think that rules conditions and split > nodes constraints > > are evaluated only when inserting/updating objects in > the working > > memory? The documentation is not really useful (unless > I haven't > > found the appropriate one). > > > > Thanks > > > > André > > > > -----Original Message----- > > From: [email protected] > > [mailto:[email protected]] > On Behalf Of Malenfant, > > Andre > > Sent: Wednesday, June 10, 2009 11:07 AM > > To: Kris Verlaenen > > Cc: Rules Users List > > Subject: RE: [rules-users] Globals in ruleflow > > > > Thanks for trying this for me... > > > > As it turns out, while I was creating a test sample > for you I > > realized > > that my ruleflow was not loading properly and I forgot > to check for > > errors on the builder. Now it works. > > > > Still, the behavior is strange. If my rule doesn't > load and even > > though > > my DRL loaded, my globals were not available. Since > the DRL declared > > the > > same globals it should not have given me that error. > > > > Thanks > > > > -----Original Message----- > > From: Kris Verlaenen [mailto:[email protected]] > > > Sent: Tuesday, June 09, 2009 5:51 PM > > To: Rules Users List; Malenfant, Andre > > Cc: Rules Users List > > Subject: Re: [rules-users] Globals in ruleflow > > > > Andre, > > > > There should be no problem in using the same global in > both your > > rules > > and processes. > > > > I have tried a simple example as you described but > have not been able > > to > > reproduce the problem. Could you send me a > self-contained example > > that > > shows the issue? > > > > Kris > > > > Quoting "Malenfant, Andre" <[email protected]>: > > > > > I am experimenting with rule flows and I get the > following error: > > > > > > Unexpected global [myglobal] > > > > > > When calling setGlobal on the session. > > > > > > This code works without the workflow (globals > declared in the drl) > > > but > > > fails when I include the rule flow. I declared > the same globals in > > > the > > > rule flow in the header section. > > > > > > _______________________________________________ > > > rules-users mailing list > > > [email protected] > > > https://lists.jboss.org/mailman/listinfo/rules-users > > > > > > > > > > > > > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm > > > > _______________________________________________ > > rules-users mailing list > > [email protected] > > https://lists.jboss.org/mailman/listinfo/rules-users > > > > _______________________________________________ > > rules-users mailing list > > [email protected] > > https://lists.jboss.org/mailman/listinfo/rules-users > > > > > > > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
