[rules-dev] Changing a fact's hashCode causes rules not to fire

Mark Proctor mproctor at codehaus.org
Thu Jun 23 04:50:48 EDT 2011


On 23/06/2011 09:32, Wolfgang Laun wrote:
> If I have
>    class Type {
>       int field;
>       setField( int f ){ field = f; }
>    }
>
> and do
>
>    modify( $type ){ setField( 42 ) }
>
> where is there a "nested accessor"?
$one: One()
$two: Two( $x: one == $one )

If you change a field on object "one". that field is a nested accessor 
to Two.
one.field1 = "x"
is the same as doing
two.one.field1 = "x"

so to "two" changing the field of 1 is a nested accessor.

Think about how indexing works.
left == right

when two objects are == each other indexing creates a bucket for the 
left and a bucket for the right. If you change the hashcode of the one 
on the right, how will it find the bucket on the left?

Mark

>
> -W
>
> On 23 June 2011 10:24, Mark Proctor <mproctor at codehaus.org 
> <mailto:mproctor at codehaus.org>> wrote:
>
>     On 23/06/2011 07:03, Wolfgang Laun wrote:
>>     Eeek!
>>
>>     Assume this: A is a field of B is a field of C is a field of D is
>>     a...
>>
>>     Object references remain the same, in all objects; I simply
>>     modify A, and
>>     "when you change [A] you are also changing [B], so I must notify the
>>     engine for [B]" but that's a field of C...  D... E... and so on,
>>     until
>>     'I' for infinity?!
>>
>>     _*/It's just a change in some fact object's hashCode that causes
>>     this problem./*_
>     If you don't want any indexing in your rule engine. If you want
>     indexing, you have to notify the engine. Changes to nested
>     accessors have always been invisible to the engine. If a nested
>     access changes, you must notify the engine of the root fact.
>
>     Mark
>
>>
>>     -W
>>
>>
>>
>>     On 22 June 2011 22:37, Mark Proctor <mproctor at codehaus.org
>>     <mailto:mproctor at codehaus.org>> wrote:
>>     > As One is a field of Two. When you change One you are also
>>     changing Two, so
>>     > you most notify the engine for Two too.
>>     >
>>     > MArk
>>     > On 22/06/2011 14:37, Wolfgang Laun wrote:
>>     >
>>     > To avoid misunderstandings: yes, equals() is written according
>>     to hashCode,
>>     > i.e., according to the usual Java conventions.
>>     >
>>     > If
>>     >
>>     >    - an object of class Two contains a member of class One, and
>>     >    - one object Two and one object One are facts, and
>>     >    - a rule modifies One, changing its hashCode
>>     >
>>     > then
>>     >
>>     >    another rule containing the patterns
>>     >    $one: One()
>>     >    $two: Two( $x: one == $one )
>>     >
>>     > does NOT fire (any more).
>>     >
>>     > If you use the constraint
>>     >    one == $one || != $one
>>     > the rule will fire, and you can observe that hashCode results
>>     for $one and
>>     > $x are the same and that $one.equals( $x ) returns true.
>>     >
>>     > Reproduced using 5.1.1 and 5.2.x
>>     >
>>     > -W
>>     >
>>     >
>>     >
>>     >
>>     > _______________________________________________
>>     > rules-dev mailing list
>>     > rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
>>     > https://lists.jboss.org/mailman/listinfo/rules-dev
>>     >
>>     >
>>     > _______________________________________________
>>     > rules-dev mailing list
>>     > rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
>>     > https://lists.jboss.org/mailman/listinfo/rules-dev
>>     >
>>     >
>>
>>
>>     _______________________________________________
>>     rules-dev mailing list
>>     rules-dev at lists.jboss.org  <mailto:rules-dev at lists.jboss.org>
>>     https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>     _______________________________________________
>     rules-dev mailing list
>     rules-dev at lists.jboss.org <mailto:rules-dev at lists.jboss.org>
>     https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20110623/40ce9d95/attachment-0001.html 


More information about the rules-dev mailing list