Although I noticed the other day that this is not documented yet, Drools 5.0.x does support rule inheritance. In your case, it would be written as:
rule r1 when A() then // do something end rule r2 extends r1 when B() then // do something else end When using inheritance, the subrule will inherit the whole LHS of the parent rule. Integration test here: http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/extend_rule_test.drl http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_RuleExtend.drl In your case, you have an extra requirement that if a child rule fires, you don't want the parent rule to fire. My suggestion is either doing this with a logical condition, or adding drools.halt() on the consequence of rules that should stop subsequent firings, or using activation-groups + salience. Example, in the above case, you could have: rule r1 activation-group "example rules" salience 10 when A() then // do something end rule r2 extends r1 activation-group "example rules" salience 20 when B() then // do something else end Since rule 2 has a higher salience, if it activates it will fire first, and due to the activation-group, it will cancel the activation of r1 preventing it to fire. Hope it helps. Edson 2010/3/5 malkhafaji <moe.alkhaf...@medcpu.com> > > Hello, > > I know, from searching this forum and posting before, that the concept of > inheritance does not exist today in Drools. However, I have a need for it. > Here is my specific situation: > > I have certain rules that have some generic conditions to be fired: > > Rule 1 > If A Then X end > > Rule 2 > If A, B Then Y end > > What I would like to do is, if Rule 2 is true, then I don't want Rule 1 to > execute. I have many and many of those rules, so combining all the > conditions in less number of rules violates our design having rules being > mutually exclusive. That is why I wanted to include this behavior as a > natural inheritance behavior rather than forcing the flow with logic inside > the rule itself (you will make rules aware of others this way). > > So, since there is not built-in feature that allows you to do that, do > people suggest anything that I can do without having to mix Rule 1 and Rule > 2 into one rule with complex conditional statements? Any ideas? > > The only thing I can think of is taking this logic processing outside of > drools, which is something that I am not too excited about. > > Thanks. > > -- > View this message in context: > http://n3.nabble.com/Inheritance-Like-Design-Question-tp430848p430848.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 > -- Edson Tirelli JBoss Drools Core Development JBoss by Red Hat @ www.jboss.com
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users