[rules-users] Constaint evaluation

Greg Barton greg_barton at yahoo.com
Wed Jun 10 16:25:39 EDT 2009


Correct.  When there are no more instantiations (a rule plus a set of objects that match the rule's conditions) on the agenda, then rule firing ceases.  With version 5 of drools they added the ability to keep the session ready and available to react even when there are no instantiations on the agenda, but you must make a separate method call to do that. (StatefulSession.fireUntilHalt() instead of fireAllRules())

--- On Wed, 6/10/09, Malenfant, Andre <andre.malenfant at cgi.com> wrote:

> From: Malenfant, Andre <andre.malenfant at cgi.com>
> Subject: RE: [rules-users] Constaint evaluation
> To: "Rules Users List" <rules-users at lists.jboss.org>
> Date: Wednesday, June 10, 2009, 2:55 PM
> Ok, so now I understand that the
> "immutable" is really a concept but not necessarily
> "enforced". So, the rule conditions get evaluated each time
> the working memory is updated (and not globals) and rules
> for which the conditions are true at each evaluation will
> fire. The execution of the rules will end when there is no
> more rules for which the conditions are true. Am I correct?
> 
> Thanks
> 
> -----Original Message-----
> From: rules-users-bounces at lists.jboss.org
> [mailto:rules-users-bounces at lists.jboss.org]
> On Behalf Of Greg Barton
> Sent: Wednesday, June 10, 2009 3:49 PM
> To: Rules Users List
> Subject: RE: [rules-users] Constaint evaluation
> 
> 
> 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 <andre.malenfant at cgi.com>
> wrote:
> 
> > From: Malenfant, Andre <andre.malenfant at cgi.com>
> > Subject: RE: [rules-users] Constaint evaluation
> > To: "Kris Verlaenen" <Kris.Verlaenen at cs.kuleuven.be>
> > Cc: "Rules Users List" <rules-users at lists.jboss.org>
> > 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:Kris.Verlaenen at cs.kuleuven.be]
> > 
> > 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" <andre.malenfant at cgi.com>:
> > 
> > > 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: rules-users-bounces at lists.jboss.org
> > > [mailto:rules-users-bounces at lists.jboss.org]
> > 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:Kris.Verlaenen at cs.kuleuven.be]
> > 
> > > 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" <andre.malenfant at cgi.com>:
> > > 
> > > > 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
> > > > rules-users at lists.jboss.org
> > > > https://lists.jboss.org/mailman/listinfo/rules-users
> > > > 
> > > 
> > > 
> > > 
> > > 
> > > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
> > > 
> > > _______________________________________________
> > > 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
> > > 
> > 
> > 
> > 
> > 
> > Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
> > 
> > _______________________________________________
> > 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
> 
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
> 


      




More information about the rules-users mailing list