The reason rule 2 is executed even though rule 1 has fired is because you're not
notifying the engine that the CustomerDetail has been changed. You need the statement
"update(d)" in the rule action. (And this is generally true when you modify
matched objects in a rule. Only leave it out in the rare circumstance when you do NOT
want other rules to be triggered by a change.)
Also, an alternative to your approach is using agenda-group. Check the docs.
--- On Mon, 11/23/09, Lindy hagan <lindyhagan(a)gmail.com> wrote:
From: Lindy hagan <lindyhagan(a)gmail.com>
Subject: [rules-users] Could anyone suggest alternate approach
To: "Rules Users List" <rules-users(a)lists.jboss.org>
Date: Monday, November 23, 2009, 11:56 AM
Please ignore my previous email as I
did not include subject.
I have 4 drl files in my app. Loading all the 4 during
application startup.
If any rule is satisfied in File 1,I don't want File 2
be called.Should execute File 3 and 4.
Similarly If rules in File 1 is not satisfied,want to call
File 2 then File 3 and 4.
At present I am doing this way.Please let me know if
this is ok or if there is any better solution.
Set an attribute when a rule is satisfied. (attribute is
not dummy,I need it in my app)
Attribute is checked in each and every if it is null.
Example File1.drl contains 2 rules.If first rule is
satisfied, don't want to execute second rule.So setting
rule with a valid number.
File1.drl
rule "1.Age Factor and Junior"
when
d : CustomerDetail( rule == ""
&& sale == 'Junior' && age in
("16","17"))
then
System.out.println("Junior and Age Satisfied
");
d.setRule("1");
end
rule "2.Junior only Age Factor"
when
m : CustomerDetail( rule == ""
&& age in ("16","17"))
then
System.out.println("Only junior Age
satisfied.");
m.setRule("2");
end
File2.drl
rule "3.Age Factor and Senior"
when
d : CustomerDetail( rule == ""
&& sale == 'Senior' && age in
("70","75"))
then
System.out.println("Senior and Age Satisfied
");
d.setRule("10");
end
rule "4.Senior only Age Factor "
when
m : CustomerDetail( rule == ""
&& age in ("70","75"))
then
System.out.println("Only senior Age
satisfied.");
m.setRule("11");
end
This one works but I see these disadvantages:
1)If the rule 1 is satisfied, rule2 is still
executed.Similary all the rules in File2.drl.
2)Might impact performance all the 4 rules are called all
time.
Any suggestions?
-----Inline Attachment Follows-----
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users