[rules-users] Could anyone suggest alternate approach

Wolfgang Laun wolfgang.laun at gmail.com
Mon Nov 23 13:34:41 EST 2009


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 at 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 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
>>
>
>
>
>
> _______________________________________________
> 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