[rules-users] Can only reason over sub-objects if you use the FromConditional Element

Aaron Dixon atdixon at gmail.com
Mon Mar 17 12:19:30 EDT 2008


Hello, Mike,

The behavior is identical whether I update the sub-object or not --
the "good" rule always works as long as I update the root person
object AND the "bad" rule will not work even if I explicitly update
the sub-object as you've suggested.

This leads me to interpret the engine behavior as:

1) An update() to a root object is enough to communicate to the rules
engine that the entire object graph has (potentially) changed
2) The engine will properly reason over sub-objects only if you use
the From conditional element (but not if you use MVEL sub-property
expressions)

So if (1) is the intended behavior of the engine, then my question is
still this... is (2) a necessary constraint? Shouldn't the engine be
able to reason over MVEL sub-property expressions without requiring
the From conditional element? If so, it makes for a more direct syntax
to allow MVEL sub-property expressions in the LHS, doesn't it?

Thanks in advance for any help on this!

Aaron


On Mon, Mar 17, 2008 at 4:08 AM, Anstis, Michael (M.) <manstis1 at ford.com> wrote:
> IMO, you have not informed the engine\RETE network that details have changed
>  in your first example.
>
>  This would probably be a better example:-
>
>
>  rule "30 is the new 20"
>  when
>         person : Person( $d : details.age == 30 )
>
> then
>         person.getDetails().setAge(20);
>         System.out.println( "Now 20 : " + person );
>         update( person );
>         update( $d );
>  end
>
>  The From works because it gets external data rather than using that already
>  in the engine\RETE network.
>
>  IMO, I think the rules are working correctly; it's just a misunderstanding
>  of how the engine\RETE network function.
>
>  I hope this helps.
>
>  Thanks,
>
>  Mike
>
>
>
>  -----Original Message-----
>  From: rules-users-bounces at lists.jboss.org
>  [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Aaron Dixon
>  Sent: 14 March 2008 20:51
>  To: Rules Users List
>  Subject: [rules-users] Can only reason over sub-objects if you use the
>  FromConditional Element
>
>  It appears that you MUST use the From Condition Element to reason over
>  sub-objects.
>
>  I have a Person class. Person::getDetails() returns a Details
>  instance, which has the name and age of the person. (This is a
>  contrived example to demonstrate the issue.)
>
>  My rules are:
>
>  rule "30 is the new 20"
>  when
>         person : Person( details.age == 30 )
>  then
>         person.getDetails().setAge(20);
>         System.out.println( "Now 20 : " + person );
>         update( person );
>  end
>
>  rule "Older than 20 - Good"
>  salience -100
>  when
>         person : Person( )
>         Details( age > 20 ) from person.details
>  then
>         System.out.println( "Older than 20 (good) : " + person );
>  end
>
>  rule "Older than 20 - Bad"
>  salience -100
>  when
>         person : Person( details.age > 20 )
>  then
>         System.out.println( "Older than 20 (bad) : " + person );
>  end
>
>  I assert Abe, Bob, Cat, Don, and Eve with ages of 10, 20, 30, 40, and
>  50, respectively. The output is as follows.
>
>  Now 20 : Person(Details(Cat,20))
>  Older than 20 (good) : Person(Details(Eve,50))
>  Older than 20 (bad) : Person(Details(Eve,50))
>  Older than 20 (good) : Person(Details(Don,40))
>  Older than 20 (bad) : Person(Details(Don,40))
>  Older than 20 (bad) : Person(Details(Cat,20))
>
>
>  You can see that the "Bad" rule is more concise but it does not use
>  the From Conditional Element and therefore it doesn't work properly
>  (Cat is determined to be older than 20 when she is not.)
>
>  Why does Drools allow the "Bad" rule to be written and compiled when
>  it does not behave properly?
>
>  Thanks,
>  Aaron
>  _______________________________________________
>  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
>
>



More information about the rules-users mailing list