Without salience, there is no guarantee that rule 1 will fire before rule 2.
Seeing only part of the problem makes it difficult to shell out good advice.
-W
On 11/23/09, Greg Barton <greg_barton(a)yahoo.com> wrote:
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
>
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users