Yes, it does answer my question. Thanks!
-----Original Message-----
From: Kris Verlaenen [mailto:Kris.Verlaenen@cs.kuleuven.be]
Sent: Wednesday, June 10, 2009 3:54 PM
To: Malenfant, Andre
Cc: Rules Users List
Subject: RE: [rules-users] Constaint evaluation
Globals are mostly used to register a reference to some element so that
it can easily be references from inside rules. For example, you could
register an element where you add results to in rule consequence, you
can add a reference to an external data service where data can be
retrieved, etc.
Globals are however considered immutable (for performance reasons, so we
do not need to re-evaluate rules that use a global constantly). If you
have data that your rule conditions reason on and that cannot be
considered immutable, you should insert it as a fact in the session, as
that is just how the algorithm works, it expects data that it needs to
reason on and that is mutable to be in the working memory.
Hope this kinda answers your question.
Kris
Quoting "Malenfant, Andre" <andre.malenfant(a)cgi.com>:
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@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(a)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(a)lists.jboss.org
> [mailto:rules-users-bounces@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@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(a)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(a)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(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)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(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users