[rules-users] Could anyone suggest alternate approach

Greg Barton greg_barton at yahoo.com
Mon Nov 23 13:21:15 EST 2009


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 at gmail.com> wrote:

> From: Lindy hagan <lindyhagan at gmail.com>
> Subject: [rules-users] Could anyone suggest alternate approach
> To: "Rules Users List" <rules-users at 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
> 


      




More information about the rules-users mailing list