[rules-users] Inheritance-Like Design Question
Edson Tirelli
ed.tirelli at gmail.com
Fri Mar 5 12:45:29 EST 2010
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 at 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
--
Edson Tirelli
JBoss Drools Core Development
JBoss by Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100305/762a9b9b/attachment.html
More information about the rules-users
mailing list