Re: [rules-users] Run a set of rules in a group B from a rule in agroup A
Hello, But I see that even if I put the focus to a group, he will inevitably execute rules that doesn't have a group, it's normal? Thanks :-) -- View this message in context: http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-group-A-tp21580767p21583764.html Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Run a set of rules in a group B from a rule in agroup A
Ha ok, thanks :-) Edson Tirelli-3 wrote: > > Michael is right. It is just harder to explain than to do it. Just > take > a look at agenda-groups or ruleflow-groups. Chose which one you prefer to > use it, place your rules in two separate groups: A and B. > > If using agenda-groups, set initial focus to A, fireAllRules and make > sure that on the consequence of one of the rules from group A you set > focus > to B. So if that rule never fires, B will never have the focus and will > never fire. Just remeber that agenda-groups work like a stack, so if you > want ALL rules from A to execute before B, add the setFocus on the rule > with > the lowest salience in A. > > Using ruleflow-groups is similar, but you draw your "flow" > graphically, > and it does not work like a stack. Sometimes easier for your use case. > > []s > Edson > > 2009/1/21 Anstis, Michael (M.) > >> Hi, >> >> See below. >> >> "executing a rule" is really two parts: LHS pattern matching (which >> can't be stopped for a given RuleBase) and execution of the RHS (which >> can be controlled by the agenda and truth maintenance). >> >> I hope my time away hasn't led to me giving wrong advice. >> >> Mike >> >> -Original Message- >> From: rules-users-boun...@lists.jboss.org >> [mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Thierry B >> Sent: 21 January 2009 12:53 >> To: rules-users@lists.jboss.org >> Subject: RE: [rules-users] Run a set of rules in a group B from a rule >> in agroup A >> >> >> Hello, >> >> So if I've well understand : >> >> - before calling fireAllRules(), Drools know for all rules (from any >> group) >> definied in DRL files, those which all patterns in the LHS of a rule are >> matched, and those rules are placed on a agenda. >> >> At which moment exactly, Drools verified from a rule that all of its >> pattern >> in the LHS are matched, if it's before callling fireAllRules() ? >> >> >>> Yes, LHS is evaluated on workingMemory.insert(o). A call to >> fireAllRules() executes the activations on the agenda (i.e. RHS queued >> as a consequence of LHS being matched on workingMemory.insert(o)). >> >> - And fireAllRules() permit to execute all rules that are placed on >> agenda >> >> >>> Yes >> >> - When using setFocus() from a java class or a rule, we can control the >> order of rules to specify to execute rules from group B, and group C... >> >> >> I believe so. >> >> - So it's not possible to tell Drools that we don't want to execute a >> group >> of rules if a rule A is not matched : in that group of rules : those >> which >> all paterns match LHS will be inevitably executed. >> >> >>> Wrong. The rules won't be executed (read as activations - RHS - >> won't be run) but you can't stop the LHS being evaluated. >> >> All these points that I said, are exact? >> >> Thanks :-) >> >> >> Anstis, Michael (M.) wrote: >> > >> > Please accept that my knowledge is based on 4.x and there might be >> other >> > alternatives in 5. >> > >> > Rules are not "ran" but their patterns (LHS) evaluated as facts >> > (objects) are inserted into Working Memory. When all patterns in the >> LHS >> > of a rule are matched activations are placed on the agenda for >> execution >> > of the consequence (RHS) when fireAllRules() is called (or other >> > mechanisms to run what is on the agenda are invoked; such as >> RuleFlow). >> > So you could have rules in Group A cause Group B to receive the focus >> > but it is the RHS's execution order you control and not the pattern >> > matching - which will happen for Group A and Group B when facts are >> > inserted into WM. >> > >> > Look at Agenda Groups and RuleFlow. This should help. >> > >> > With kind regards, >> > >> > Mike >> > >> > >> >> -- >> View this message in context: >> http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-g >> roup-A-tp21580767p21582595.html<http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-group-A-tp21580767p21582595.html> >> Sent from the drools - user mailing list archive at Nabble.com. >> >> ___ >> rules-users mailing list >> rules-use
RE: [rules-users] Run a set of rules in a group B from a rule in agroup A
Hello, When you said "Wrong. The rules won't be executed (read as activations - RHS - won't be run) but you can't stop the LHS being evaluated.", I don't understand : if we use fireAllRules(), those rules will be executed inevitably no? I don't understand how we can decide that those rules (from a certain group) won't be executed. Thanks :-) Anstis, Michael (M.) wrote: > > Hi, > > See below. > > "executing a rule" is really two parts: LHS pattern matching (which > can't be stopped for a given RuleBase) and execution of the RHS (which > can be controlled by the agenda and truth maintenance). > > I hope my time away hasn't led to me giving wrong advice. > > Mike > > -Original Message- > From: rules-users-boun...@lists.jboss.org > [mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Thierry B > Sent: 21 January 2009 12:53 > To: rules-users@lists.jboss.org > Subject: RE: [rules-users] Run a set of rules in a group B from a rule > in agroup A > > > Hello, > > So if I've well understand : > > - before calling fireAllRules(), Drools know for all rules (from any > group) > definied in DRL files, those which all patterns in the LHS of a rule are > matched, and those rules are placed on a agenda. > > At which moment exactly, Drools verified from a rule that all of its > pattern > in the LHS are matched, if it's before callling fireAllRules() ? > >>>> Yes, LHS is evaluated on workingMemory.insert(o). A call to > fireAllRules() executes the activations on the agenda (i.e. RHS queued > as a consequence of LHS being matched on workingMemory.insert(o)). > > - And fireAllRules() permit to execute all rules that are placed on > agenda > >>>> Yes > > - When using setFocus() from a java class or a rule, we can control the > order of rules to specify to execute rules from group B, and group C... > >>> I believe so. > > - So it's not possible to tell Drools that we don't want to execute a > group > of rules if a rule A is not matched : in that group of rules : those > which > all paterns match LHS will be inevitably executed. > >>>> Wrong. The rules won't be executed (read as activations - RHS - > won't be run) but you can't stop the LHS being evaluated. > > All these points that I said, are exact? > > Thanks :-) > > > Anstis, Michael (M.) wrote: >> >> Please accept that my knowledge is based on 4.x and there might be > other >> alternatives in 5. >> >> Rules are not "ran" but their patterns (LHS) evaluated as facts >> (objects) are inserted into Working Memory. When all patterns in the > LHS >> of a rule are matched activations are placed on the agenda for > execution >> of the consequence (RHS) when fireAllRules() is called (or other >> mechanisms to run what is on the agenda are invoked; such as > RuleFlow). >> So you could have rules in Group A cause Group B to receive the focus >> but it is the RHS's execution order you control and not the pattern >> matching - which will happen for Group A and Group B when facts are >> inserted into WM. >> >> Look at Agenda Groups and RuleFlow. This should help. >> >> With kind regards, >> >> Mike >> >> > > -- > View this message in context: > http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-g > roup-A-tp21580767p21582595.html > Sent from the drools - user mailing list archive at Nabble.com. > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > -- View this message in context: http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-group-A-tp21580767p21583108.html Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Run a set of rules in a group B from a rule in agroup A
Michael is right. It is just harder to explain than to do it. Just take a look at agenda-groups or ruleflow-groups. Chose which one you prefer to use it, place your rules in two separate groups: A and B. If using agenda-groups, set initial focus to A, fireAllRules and make sure that on the consequence of one of the rules from group A you set focus to B. So if that rule never fires, B will never have the focus and will never fire. Just remeber that agenda-groups work like a stack, so if you want ALL rules from A to execute before B, add the setFocus on the rule with the lowest salience in A. Using ruleflow-groups is similar, but you draw your "flow" graphically, and it does not work like a stack. Sometimes easier for your use case. []s Edson 2009/1/21 Anstis, Michael (M.) > Hi, > > See below. > > "executing a rule" is really two parts: LHS pattern matching (which > can't be stopped for a given RuleBase) and execution of the RHS (which > can be controlled by the agenda and truth maintenance). > > I hope my time away hasn't led to me giving wrong advice. > > Mike > > -Original Message- > From: rules-users-boun...@lists.jboss.org > [mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Thierry B > Sent: 21 January 2009 12:53 > To: rules-users@lists.jboss.org > Subject: RE: [rules-users] Run a set of rules in a group B from a rule > in agroup A > > > Hello, > > So if I've well understand : > > - before calling fireAllRules(), Drools know for all rules (from any > group) > definied in DRL files, those which all patterns in the LHS of a rule are > matched, and those rules are placed on a agenda. > > At which moment exactly, Drools verified from a rule that all of its > pattern > in the LHS are matched, if it's before callling fireAllRules() ? > > >>> Yes, LHS is evaluated on workingMemory.insert(o). A call to > fireAllRules() executes the activations on the agenda (i.e. RHS queued > as a consequence of LHS being matched on workingMemory.insert(o)). > > - And fireAllRules() permit to execute all rules that are placed on > agenda > > >>> Yes > > - When using setFocus() from a java class or a rule, we can control the > order of rules to specify to execute rules from group B, and group C... > > >> I believe so. > > - So it's not possible to tell Drools that we don't want to execute a > group > of rules if a rule A is not matched : in that group of rules : those > which > all paterns match LHS will be inevitably executed. > > >>> Wrong. The rules won't be executed (read as activations - RHS - > won't be run) but you can't stop the LHS being evaluated. > > All these points that I said, are exact? > > Thanks :-) > > > Anstis, Michael (M.) wrote: > > > > Please accept that my knowledge is based on 4.x and there might be > other > > alternatives in 5. > > > > Rules are not "ran" but their patterns (LHS) evaluated as facts > > (objects) are inserted into Working Memory. When all patterns in the > LHS > > of a rule are matched activations are placed on the agenda for > execution > > of the consequence (RHS) when fireAllRules() is called (or other > > mechanisms to run what is on the agenda are invoked; such as > RuleFlow). > > So you could have rules in Group A cause Group B to receive the focus > > but it is the RHS's execution order you control and not the pattern > > matching - which will happen for Group A and Group B when facts are > > inserted into WM. > > > > Look at Agenda Groups and RuleFlow. This should help. > > > > With kind regards, > > > > Mike > > > > > > -- > View this message in context: > http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-g > roup-A-tp21580767p21582595.html<http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-group-A-tp21580767p21582595.html> > Sent from the drools - user mailing list archive at Nabble.com. > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > -- Edson Tirelli JBoss Drools Core Development JBoss, a division of Red Hat @ www.jboss.com ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
RE: [rules-users] Run a set of rules in a group B from a rule in agroup A
Hi, See below. "executing a rule" is really two parts: LHS pattern matching (which can't be stopped for a given RuleBase) and execution of the RHS (which can be controlled by the agenda and truth maintenance). I hope my time away hasn't led to me giving wrong advice. Mike -Original Message- From: rules-users-boun...@lists.jboss.org [mailto:rules-users-boun...@lists.jboss.org] On Behalf Of Thierry B Sent: 21 January 2009 12:53 To: rules-users@lists.jboss.org Subject: RE: [rules-users] Run a set of rules in a group B from a rule in agroup A Hello, So if I've well understand : - before calling fireAllRules(), Drools know for all rules (from any group) definied in DRL files, those which all patterns in the LHS of a rule are matched, and those rules are placed on a agenda. At which moment exactly, Drools verified from a rule that all of its pattern in the LHS are matched, if it's before callling fireAllRules() ? >>> Yes, LHS is evaluated on workingMemory.insert(o). A call to fireAllRules() executes the activations on the agenda (i.e. RHS queued as a consequence of LHS being matched on workingMemory.insert(o)). - And fireAllRules() permit to execute all rules that are placed on agenda >>> Yes - When using setFocus() from a java class or a rule, we can control the order of rules to specify to execute rules from group B, and group C... >> I believe so. - So it's not possible to tell Drools that we don't want to execute a group of rules if a rule A is not matched : in that group of rules : those which all paterns match LHS will be inevitably executed. >>> Wrong. The rules won't be executed (read as activations - RHS - won't be run) but you can't stop the LHS being evaluated. All these points that I said, are exact? Thanks :-) Anstis, Michael (M.) wrote: > > Please accept that my knowledge is based on 4.x and there might be other > alternatives in 5. > > Rules are not "ran" but their patterns (LHS) evaluated as facts > (objects) are inserted into Working Memory. When all patterns in the LHS > of a rule are matched activations are placed on the agenda for execution > of the consequence (RHS) when fireAllRules() is called (or other > mechanisms to run what is on the agenda are invoked; such as RuleFlow). > So you could have rules in Group A cause Group B to receive the focus > but it is the RHS's execution order you control and not the pattern > matching - which will happen for Group A and Group B when facts are > inserted into WM. > > Look at Agenda Groups and RuleFlow. This should help. > > With kind regards, > > Mike > > -- View this message in context: http://www.nabble.com/Run-a-set-of-rules-in-a-group-B-from-a-rule-in-a-g roup-A-tp21580767p21582595.html Sent from the drools - user mailing list archive at Nabble.com. ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users