[rules-users] Re: About for and inheritance

Edson Tirelli tirelli at post.com
Fri Sep 28 09:06:59 EDT 2007


    You have a valid point. I was thinking in a more general situation where
the class returned by the method may be completely unrelated to the class
declared in the rule. Raising a compile time error would help preventing the
user writing rules that will never match.
    Maybe we can mix both approaches by doing a compile time hierarchy
analysis + runtime type matching, or, if we really want to keep it dynamic,
analytics module could raise a warning at compile time, but no error would
be raised by the compiler and we could do only the runtime type matching.
   I'm not aware of similar semantics in other products, so, suggestions
above are things that just occurred me and may not be the best ever way to
handle the situation.

   Mark, what do you think?

   []s
   Edson


2007/9/28, Chris Woodrow <woodrow.chris at gmail.com>:
>
> I am a bit surprised by your answer...
>
> Let's consider :
> rule "likes french cheese1"
>     when
>         FrenchCheese( smell == "good" )
>     then
>         System.out.println("likes french cheese1");
> end
>
> rule "likes french cheese2"
>     when
>         $person : Person ()
>         FrenchCheese( smell == "good" )  from $person.getLikes()
>     then
>         System.out.println("likes french cheese2");
> end
>
> These 2 rules do not behave the same way :
> - First one simply does not match (with a Cheese instance inserted in WM)
> - Second one throws an error (see third test in my original mail)
>
> Chris
>
>
> 2007/9/27, Edson Tirelli <tirelli at post.com>:
> >
> >
> >    Ideal IMO would be a compile time error, since getLikes() returns a
> > Cheese instance, but as we use MVEL to resolve the expression, I'm not 100%
> > sure we are able to cover all possible scenarios at compile time. I guess we
> > can, but need to double check that.
> >
> >    []s
> >    Edson
> >
> > 2007/9/27, Chris Woodrow < woodrow.chris at gmail.com>:
> > >
> > > Thanks.
> > > I was supposing so...
> > > Do you think test 3 should throw a ClassCastException or just not
> > > match?
> > > Chris
> > >
> > > 2007/9/27, Edson Tirelli < tirelli at post.com >:
> > > >
> > > >
> > > >    Yes, drools is deferring the type verification until it is needed
> > > > (in your example, to check the constraint). May I ask you please to open a
> > > > JIRA... I will fix that.
> > > >
> > > >   []s
> > > >   Edson
> > > >
> > > > 2007/9/27, Chris Woodrow <woodrow.chris at gmail.com>:
> > > >
> > > > >  I am sorry I didn't mean 'for' but 'from'.
> > > > > :D
> > > > >
> > > > > 2007/9/27, Chris Woodrow < woodrow.chris at gmail.com>:
> > > > > >
> > > > > > Hi,
> > > > > > I recently find out a few issues using for, and I wanted to
> > > > > > share it with you. I made a simple exemple to illustrate my purpose.
> > > > > >
> > > > > > My classes are (I did not represent accessors & constructors):
> > > > > >
> > > > > > public class Cheese {
> > > > > >     protected String name;
> > > > > > }
> > > > > >
> > > > > > public class FrenchCheese extends Cheese{
> > > > > >     private String smell;
> > > > > > }
> > > > > >
> > > > > > public class Person {
> > > > > >     private Cheese likes;
> > > > > > }
> > > > > >
> > > > > > Here is my rule set :
> > > > > >
> > > > > > package rules
> > > > > >
> > > > > > rule "likes cheese"
> > > > > >     when
> > > > > >         $person : Person ()
> > > > > >         Cheese(  ) from $person.getLikes()
> > > > > >     then
> > > > > >         System.out.println ("likes cheese");
> > > > > > end
> > > > > >
> > > > > >
> > > > > > rule "likes french cheese"
> > > > > >     when
> > > > > >         $person : Person ()
> > > > > >         FrenchCheese(  ) from $person.getLikes()
> > > > > >     then
> > > > > >         System.out.println ("likes french cheese");
> > > > > > end
> > > > > >
> > > > > > First test :
> > > > > >         Cheese cheese = new FrenchCheese("good", "camembert");
> > > > > >         Person person = new Person();
> > > > > >         person.setLikes(cheese);
> > > > > >
> > > > > > Output :
> > > > > > likes french cheese
> > > > > > likes cheese
> > > > > >
> > > > > > Wich is expected...
> > > > > >
> > > > > > Second test :
> > > > > >         Cheese cheese = new Cheese();
> > > > > >         Person person = new Person();
> > > > > >         person.setLikes(cheese);
> > > > > >
> > > > > > Output :
> > > > > > likes french cheese
> > > > > > likes cheese
> > > > > >
> > > > > > That's the first strange thing. As far as I am concerned, rule
> > > > > > "likes french cheese" should not match (since a Cheese is not a
> > > > > > FrenchCheese).
> > > > > >
> > > > > > I made a change to the second rule :
> > > > > > rule "likes french cheese"
> > > > > >     when
> > > > > >         $person : Person ()
> > > > > >         FrenchCheese( smell == "good" ) from $person.getLikes()
> > > > > >     then
> > > > > >         System.out.println("likes french cheese");
> > > > > > end
> > > > > >
> > > > > > Third test :
> > > > > >         Cheese cheese = new Cheese();
> > > > > >         Person person = new Person();
> > > > > >         person.setLikes(cheese);
> > > > > >
> > > > > > output :
> > > > > > It throwed an exception : Exception in thread "main"
> > > > > > java.lang.ClassCastException: rules.Cheese
> > > > > > I am not saying the ClassCastException is not to expect in such
> > > > > > a case but I think I would simply expect it not to match (as far as a Cheese
> > > > > > is not a FrenchCheese).
> > > > > >
> > > > > > Chris
> > > > > >
> > > > >
> > > > >
> > > > > _______________________________________________
> > > > > rules-users mailing list
> > > > > rules-users at lists.jboss.org
> > > > > https://lists.jboss.org/mailman/listinfo/rules-users
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > >   Edson Tirelli
> > > >   Software Engineer - JBoss Rules Core Developer
> > > >   Office: +55 11 3529-6000
> > > >   Mobile: +55 11 9287-5646
> > > >   JBoss, a division of Red Hat @ www.jboss.com
> > > > _______________________________________________
> > > > rules-users mailing list
> > > > rules-users at lists.jboss.org
> > > > https://lists.jboss.org/mailman/listinfo/rules-users
> > > >
> > > >
> > >
> > > _______________________________________________
> > > rules-users mailing list
> > > rules-users at lists.jboss.org
> > > https://lists.jboss.org/mailman/listinfo/rules-users
> > >
> > >
> >
> >
> > --
> >   Edson Tirelli
> >   Software Engineer - JBoss Rules Core Developer
> >   Office: +55 11 3529-6000
> >   Mobile: +55 11 9287-5646
> >   JBoss, a division of Red Hat @ www.jboss.com
> >
> > _______________________________________________
> > rules-users mailing list
> > rules-users at lists.jboss.org
> > https://lists.jboss.org/mailman/listinfo/rules-users
> >
> >
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070928/9732c10d/attachment.html 


More information about the rules-users mailing list