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.alkhafaji@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