Well, you are saying that if you are using references to fact objects in combination with constraints comparing such a reference to some other object any (overridden) hashCode method <i><b>must not refer to mutable fields</b></i> of that object.<br>
<br>Certainly: this restriction should not hurt - I&#39;m inclined to regard mutable hashCode methods as &quot;suspicious&quot; anyway.<br><br>But, nevertheless, it deserves a short paragraph in the &quot;Expert&quot; manual, don&#39;t you think so?<br>
<br>Cheers<br>Wolfgang<br><br><br><br><div class="gmail_quote">On 23 June 2011 10:50, Mark Proctor <span dir="ltr">&lt;<a href="mailto:mproctor@codehaus.org">mproctor@codehaus.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<u></u>

  
    
  
  <div text="#000000" bgcolor="#ffffff"><div class="im">
    On 23/06/2011 09:32, Wolfgang Laun wrote:
    <blockquote type="cite">If I have <br>
         class Type {<br>
            int field;<br>
            setField( int f ){ field = f; }<br>
         }<br>
      <br>
      and do<br>
      <br>
         modify( $type ){ setField( 42 ) }<br>
      <br>
      where is there a &quot;nested accessor&quot;?<br>
    </blockquote></div><div class="im">
    $one: One()<br>
    $two: Two( $x: one == $one )<br>
    <br></div>
    If you change a field on object &quot;one&quot;. that field is a nested
    accessor to Two.<br>
    one.field1 = &quot;x&quot;<br>
    is the same as doing<br>
    two.one.field1 = &quot;x&quot;<br>
    <br>
    so to &quot;two&quot; changing the field of 1 is a nested accessor.<br>
    <br>
    Think about how indexing works.<br>
    left == right<br>
    <br>
    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?<br><font color="#888888">
    <br>
    Mark</font><div><div></div><div class="h5"><br>
    <br>
    <blockquote type="cite"><br>
      -W<br>
      <br>
      <div class="gmail_quote">On 23 June 2011 10:24, Mark Proctor <span dir="ltr">&lt;<a href="mailto:mproctor@codehaus.org" target="_blank">mproctor@codehaus.org</a>&gt;</span>
        wrote:<br>
        <blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
          <div text="#000000" bgcolor="#ffffff">
            <div> On 23/06/2011 07:03, Wolfgang Laun wrote:
              <blockquote type="cite">Eeek!<br>
                <br>
                Assume this: A is a field of B is a field of C is a
                field of D is a... <br>
                <br>
                Object references remain the same, in all objects; I
                simply modify A, and<br>
                &quot;when you change [A] you are also changing [B], so I
                must notify the<br>
                engine for [B]&quot; but that&#39;s a field of C...  D... E...
                and so on, until<br>
                &#39;I&#39; for infinity?!<br>
                <br>
                <u><b><i>It&#39;s just a change in some fact object&#39;s
                      hashCode that causes this problem.</i></b></u><br>
              </blockquote>
            </div>
            If you don&#39;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.<br>
            <font color="#888888"> <br>
              Mark</font>
            <div>
              <div><br>
                <blockquote type="cite"> <br>
                  -W<br>
                  <br>
                  <br>
                  <br>
                  On 22 June 2011 22:37, Mark Proctor &lt;<a href="mailto:mproctor@codehaus.org" target="_blank">mproctor@codehaus.org</a>&gt;

                  wrote:<br>
                  &gt; As One is a field of Two. When you change One you
                  are also changing Two, so<br>
                  &gt; you most notify the engine for Two too.<br>
                  &gt;<br>
                  &gt; MArk<br>
                  &gt; On 22/06/2011 14:37, Wolfgang Laun wrote:<br>
                  &gt;<br>
                  &gt; To avoid misunderstandings: yes, equals() is
                  written according to hashCode,<br>
                  &gt; i.e., according to the usual Java conventions.<br>
                  &gt;<br>
                  &gt; If<br>
                  &gt;<br>
                  &gt;    - an object of class Two contains a member of
                  class One, and<br>
                  &gt;    - one object Two and one object One are facts,
                  and<br>
                  &gt;    - a rule modifies One, changing its hashCode<br>
                  &gt;<br>
                  &gt; then<br>
                  &gt;<br>
                  &gt;    another rule containing the patterns<br>
                  &gt;    $one: One()<br>
                  &gt;    $two: Two( $x: one == $one )<br>
                  &gt;<br>
                  &gt; does NOT fire (any more).<br>
                  &gt;<br>
                  &gt; If you use the constraint<br>
                  &gt;    one == $one || != $one<br>
                  &gt; the rule will fire, and you can observe that
                  hashCode results for $one and<br>
                  &gt; $x are the same and that $one.equals( $x )
                  returns true.<br>
                  &gt;<br>
                  &gt; Reproduced using 5.1.1 and 5.2.x<br>
                  &gt;<br>
                  &gt; -W<br>
                  &gt;<br>
                  &gt;<br>
                  &gt;<br>
                  &gt;<br>
                  &gt; _______________________________________________<br>
                  &gt; rules-dev mailing list<br>
                  &gt; <a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a><br>
                  &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
                  &gt;<br>
                  &gt;<br>
                  &gt; _______________________________________________<br>
                  &gt; rules-dev mailing list<br>
                  &gt; <a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a><br>
                  &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
                  &gt;<br>
                  &gt;<br>
                  <br>
                  <pre><fieldset></fieldset>
_______________________________________________
rules-dev mailing list
<a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
</pre>
                </blockquote>
                <br>
              </div>
            </div>
          </div>
          <br>
          _______________________________________________<br>
          rules-dev mailing list<br>
          <a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a><br>
          <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
          <br>
        </blockquote>
      </div>
      <br>
      <pre><fieldset></fieldset>
_______________________________________________
rules-dev mailing list
<a href="mailto:rules-dev@lists.jboss.org" target="_blank">rules-dev@lists.jboss.org</a>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
</pre>
    </blockquote>
    <br>
  </div></div></div>

<br>_______________________________________________<br>
rules-dev mailing list<br>
<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
<br></blockquote></div><br>