[rules-users] Inheritance-Like Design Question

Edson Tirelli ed.tirelli at gmail.com
Fri Mar 5 16:17:34 EST 2010


   These error messages don't make much sense to me, but it is accusing
error on line 19 now... considering that I removed lines and the error
before was on line 11, isn't this another problems in rules down in the
file?

   Edson

2010/3/5 Moe Alkhafaji <moe.alkhafaji at medcpu.com>

> Thanks Edson,
>
> I tried using the rules you pasted below, and here are the errors again
> (same line)
>
>
> nds.when cannot be resolved to a
> type                                                  MPU/src/rules
> EEphratOBMain.drl    line 19
> Syntax error on token ""Definitions TermContractions 1.1"", . expected
> MPU/src/rules    EEphratOBMain.drl    line 19
> Syntax error on token "then", invalid
> AssignmentOperator                       MPU/src/rules
> EEphratOBMain.drl    line 19
> Syntax error, insert ";" to complete
> BlockStatements                             MPU/src/rules
> EEphratOBMain.drl    line 19
> The left-hand side of an assignment must be a
> variable                           MPU/src/rules    EEphratOBMain.drl
> line 19
> unknown:19:28 mismatched token: [@134,611:617='extends',<7>,19:28];
> expecting type THEN    MPU/src/rules    EEphratOBMain.drl
>
>
> I also understand about what you saying regarding additional things I have
> to do to ensure that only the child rule executes, but I want to go through
> the first step first :) Thanks!
>
>
> 2010/3/5 Edson Tirelli <ed.tirelli at gmail.com>
>
>>
>>    Hmmm, you should be receiving a duplicate variable declaration error...
>> would you please open a JIRA for us to double check what is happening and
>> fix the error message?
>>
>>    Meanwhile, try without repeating the constraints on the parent rule in
>> the child rule:
>>
>>
>> rule "Definitions TermContractions 1.1"
>>     when
>>         mpr : MPUFacade()
>>
>> eval(!mpr.isImportant(Constants.FINDING_KEYWORD_Contractions_Frequency))
>>     then
>>         mpr.print("Rule Definitions TermContractions 1.1 Executed");
>> end
>>
>> rule "TermContractions 2.8" extends "Definitions TermContractions
>> 1.1"
>>      when
>>
>>         eval(!mpr.isImportant(Constants.FINDING_KEYWORD_TEST))
>>     then
>>         mpr.print("Rule TermContractions 2.8 Executed");
>> end
>>
>>     Also, remember that unless you use some of the tricks I mentioned
>> before, both rules will fire.
>>
>>    []s
>>    Edson
>>
>>
>> 2010/3/5 Moe Alkhafaji <moe.alkhafaji at medcpu.com>
>>
>> Here are the rules that I created (sorry for breaking that in multiple
>>> emails), I hope this is all the information needed:
>>>
>>> rule "Definitions TermContractions 1.1"
>>>     when
>>>         mpr : MPUFacade()
>>>
>>> eval(!mpr.isImportant(Constants.FINDING_KEYWORD_Contractions_Frequency))
>>>     then
>>>         mpr.print("Rule Definitions TermContractions 1.1 Executed");
>>> end
>>>
>>> rule "TermContractions 2.8" extends "Definitions TermContractions
>>> 1.1"                  <=== Line 11
>>>     when
>>>         mpr : MPUFacade()
>>>
>>> eval(!mpr.isImportant(Constants.FINDING_KEYWORD_Contractions_Frequency))
>>>         eval(!mpr.isImportant(Constants.FINDING_KEYWORD_TEST))
>>>     then
>>>         mpr.print("Rule TermContractions 2.8 Executed");
>>> end
>>>
>>>
>>> On Fri, Mar 5, 2010 at 12:33 PM, Moe Alkhafaji <moe.alkhafaji at medcpu.com
>>> > wrote:
>>>
>>>> Specifically speaking, here is what I get on Eclipse when I do that:
>>>>
>>>>
>>>> nds.when cannot be resolved to a
>>>> type                                                 MPU/src/rules
>>>> EEphratOBMain.drl    line 11
>>>> Syntax error on token ":", ;
>>>> expected                                                    MPU/src/rules
>>>> EEphratOBMain.drl    line 11
>>>> Syntax error on token ""Definitions TermContractions 1.1"", .
>>>> expected    MPU/src/rules    EEphratOBMain.drl    line 11
>>>> Syntax error on token "then", invalid
>>>> AssignmentOperator                       MPU/src/rules
>>>> EEphratOBMain.drl    line 11
>>>> Syntax error, insert ";" to complete
>>>> Statement                                       MPU/src/rules
>>>> EEphratOBMain.drl    line 11
>>>> Syntax error, insert ";" to complete
>>>> Statement                                       MPU/src/rules
>>>> EEphratOBMain.drl    line 11
>>>> Syntax error, insert ";" to complete
>>>> Statement                                       MPU/src/rules
>>>> EEphratOBMain.drl    line 11
>>>>
>>>> Line 11 is:
>>>>
>>>> * rule "TermContractions 2.8" extends "Definitions TermContractions
>>>> 1.1"*
>>>>
>>>> and "Definitions TermContractions 1.1" is another rule defined in the
>>>> same drl.
>>>>
>>>>
>>>>
>>>> On Fri, Mar 5, 2010 at 12:04 PM, Moe Alkhafaji <
>>>> moe.alkhafaji at medcpu.com> wrote:
>>>>
>>>>> Thanks Edson, I will try that. However, I have one follow up question.
>>>>> I tried to use the "extends" command and it did not work (it gave me a
>>>>> syntax error). I am using the latest Drools 5.0 M1. Could it be because the
>>>>> Eclipse Drools plugin does not support this feature yet and if I ignore this
>>>>> error on Eclipse it would still work at runtime?
>>>>>
>>>>> Thanks!
>>>>>
>>>>> 2010/3/5 Edson Tirelli <ed.tirelli at gmail.com>
>>>>>
>>>>>
>>>>>>       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
>>>>>>
>>>>>> _______________________________________________
>>>>>> rules-users mailing list
>>>>>> rules-users at lists.jboss.org
>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Moe Alkhafaji
>>>>> Chief Technology Officer, MedCPU
>>>>> Phone: (630) 290-1113
>>>>> Email: cto at medcpu.com
>>>>>
>>>>> This message contains information which may be confidential. Unless you
>>>>> are the addressee, you may not use, copy or disclose to anyone the message
>>>>> or any information contained in this message. If you have received this
>>>>> email in error, please notify cto at medcpu.com and please delete the
>>>>> message immediately. In order for the contents of this message to be binding
>>>>> on behalf of MedCPU it must be confirmed in writing by an authorized
>>>>> signatory of MedCPU. Our company accepts no liability for the content of
>>>>> this email unless it is so confirmed. The views or opinions presented herein
>>>>> do not necessarily represent those of the company.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Moe Alkhafaji
>>>> Chief Technology Officer, MedCPU
>>>> Phone: (630) 290-1113
>>>> Email: cto at medcpu.com
>>>>
>>>> This message contains information which may be confidential. Unless you
>>>> are the addressee, you may not use, copy or disclose to anyone the message
>>>> or any information contained in this message. If you have received this
>>>> email in error, please notify cto at medcpu.com and please delete the
>>>> message immediately. In order for the contents of this message to be binding
>>>> on behalf of MedCPU it must be confirmed in writing by an authorized
>>>> signatory of MedCPU. Our company accepts no liability for the content of
>>>> this email unless it is so confirmed. The views or opinions presented herein
>>>> do not necessarily represent those of the company.
>>>>
>>>
>>>
>>>
>>> --
>>> Moe Alkhafaji
>>> Chief Technology Officer, MedCPU
>>> Phone: (630) 290-1113
>>> Email: cto at medcpu.com
>>>
>>> This message contains information which may be confidential. Unless you
>>> are the addressee, you may not use, copy or disclose to anyone the message
>>> or any information contained in this message. If you have received this
>>> email in error, please notify cto at medcpu.com and please delete the
>>> message immediately. In order for the contents of this message to be binding
>>> on behalf of MedCPU it must be confirmed in writing by an authorized
>>> signatory of MedCPU. Our company accepts no liability for the content of
>>> this email unless it is so confirmed. The views or opinions presented herein
>>> do not necessarily represent those of the company.
>>>
>>> _______________________________________________
>>> 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
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
> Moe Alkhafaji
> Chief Technology Officer, MedCPU
> Phone: (630) 290-1113
> Email: cto at medcpu.com
>
> This message contains information which may be confidential. Unless you are
> the addressee, you may not use, copy or disclose to anyone the message or
> any information contained in this message. If you have received this email
> in error, please notify cto at medcpu.com and please delete the message
> immediately. In order for the contents of this message to be binding on
> behalf of MedCPU it must be confirmed in writing by an authorized signatory
> of MedCPU. Our company accepts no liability for the content of this email
> unless it is so confirmed. The views or opinions presented herein do not
> necessarily represent those of the company.
>
> _______________________________________________
> 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/d496a3dd/attachment.html 


More information about the rules-users mailing list