Excuse
me if you already understand but there is a difference between rule
patterns being evaluated and their consequence
running.
Rules
LHS are evaluated when objects are inserted into working memory whereas
the consequence fires when you call fireAllRules();
The
rules whose activations are executed are those in the given Agenda Group;
thereafter those not in any agenda group execute. So if all rules are in
an Agenda Group you should be OK.
Of
course they don't prevent all rule patterns from being checked as
objects are inserted into WM (which has a performance impact) but this is
what the RETE network was designed to optimise.
You
could try another configuration (but I think Agenda Groups are
probably the preference by design). This gives complete isolation - but I
haven't tried it so it might not even be possible ;-)
global WorkingMemory wm;
global RuleBase rbX;
rule "Group X"
when
Fact( attribute == "condition1"
)
then
wm =
rbX.newStatefulSession();
wm.fireAllRules();
end
rule "Group Y"
when
Fact( attribute == "condition2"
)
then
wm =
rbY.newStatefulSession();
wm.fireAllRules();
end
Good
luck.
Mike
Sent: 01 February 2008
15:07
To: Rules Users List
Subject: Re:
[rules-users] Grouping rules
Thanks for responding
Yes, I did consider
agenda groups, but I thought agenda groups only ordered execution in a
particular fashion, so if Rule "pick group X" fires then it would make
sure that rules in Agenda Group X fire first before the remaining but
the remaining would fire eventually. Is my understanding correct
?
I am looking for a solution for completely isolating a rule
set conditioned on an object attribute.
On Feb 1, 2008 12:46 AM, Anstis, Michael (M.)
<
manstis1@ford.com> wrote:
What about Agenda Groups?
Rule "pick group X"
when
Fact( attribute =
"condition1" )
then
drools.setFocus("Group
X")
end
Rule "pick group Y"
when
Fact( attribute =
"condition2" )
then
drools.setFocus("Group
Y")
end
Rule "Group X1"
Agenda Group "Group X"
when
Smurf(
)
then
// Do
something
end
Rule "Group X2"
Agenda Group "Group X"
when
Smurfette(
)
then
// Something
else
end
etc
Hi,
I am building a system where I would
need to fire different sets of rules based on some attribute in the
fact object.
Here are someways which I thought of, I
was wondering if there was something better than that.
1) I
could do this by creating different sessions based on the data
attrbute (different sessions would have different rule packages
based on the attribute)
or
2) Have all the rules fire
(all the different sets of rules) irrespective of the attribute and
have them insert fact new objects into the working memory. In the
second round of rules, collect the (newly made) fact objects
based on the attribute and take that action.
Thanks
Jai
_______________________________________________
rules-users
mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users