<br>&nbsp;&nbsp; Markus,<br><br>&nbsp;&nbsp; Can you plz open a JIRA for this?<br><br>&nbsp;&nbsp; Thank you,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Edson<br><br><div><span class="gmail_quote">2007/8/13, Markus Reitz &lt;<a href="mailto:marreitz@yahoo.de">marreitz@yahoo.de</a>&gt;:
</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br><br>I have a problem with a rule which uses a &quot;!=&quot; field<br>constraint. The following code illustrates the
<br>problem.<br><br>import org.drools.*;<br>import org.drools.compiler.*;<br>import org.drools.rule.Package;<br><br>import java.io.*;<br><br>public class DroolsTest {<br>&nbsp;&nbsp;private RuleBase&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rules;<br>&nbsp;&nbsp;private StatefulSession memory;
<br><br>&nbsp;&nbsp;public DroolsTest(File file) throws Exception {<br>&nbsp;&nbsp;&nbsp;&nbsp;rules =RuleBaseFactory.newRuleBase();<br>&nbsp;&nbsp;&nbsp;&nbsp;memory=rules.newStatefulSession();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;rules.addPackage(loadPackage(file));<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;protected Package loadPackage(File file) throws
<br>IOException {<br>&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream stream=null;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream=new FileInputStream(file);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(loadPackage(stream));<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;finally {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (stream!=null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stream.close
();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;protected Package loadPackage(InputStream stream)<br>throws IOException {<br>&nbsp;&nbsp;&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PackageBuilder builder=new PackageBuilder();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;builder.addPackageFromDrl(new<br>InputStreamReader(stream));
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(builder.getPackage());<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;catch(Exception ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new IOException();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;public StatefulSession getSession() {<br>&nbsp;&nbsp;&nbsp;&nbsp;return(memory);<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;public static void main(String ... args) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DroolsTest test=new DroolsTest(new<br>File(args[0]));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpecialString first42 =new SpecialString(&quot;42&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpecialString second42=new SpecialString(&quot;42&quot;);<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.getSession().insert(new<br>SpecialString(&quot;World&quot;));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.getSession().insert(first42);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.getSession().insert(second42);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Fact handle:<br>&quot;+test.getSession().getFactHandle(first42));
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Fact handle:<br>&quot;+test.getSession().getFactHandle(second42));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(&quot;Firing rules ...&quot;);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.getSession().fireAllRules();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>
&nbsp;&nbsp;&nbsp;&nbsp;catch (Exception ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br>}<br><br>I&#39;m inserting three different objects in the working<br>memory of the Drools 4 Engine. Two of the three<br>objects have the same text - &quot;42&quot;. When I&#39;m using the
<br>following rule<br><br>&nbsp;&nbsp;package test<br><br>&nbsp;&nbsp;rule &quot;A test&quot;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x : SpecialString()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y : SpecialString(this!=x)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(x+&quot;/&quot;+y);<br>
&nbsp;&nbsp;end<br><br>I get the output<br><br>&nbsp;&nbsp;Fact handle: [fid:2:2:42[SpecialString@fde8da]]<br>&nbsp;&nbsp;Fact handle: [fid:3:3:42[SpecialString@e4d6ef]]<br>&nbsp;&nbsp;Firing rules ...<br>&nbsp;&nbsp;42[SpecialString@e4d6ef]/World[SpecialString@faa824]<br>
&nbsp;&nbsp;World[SpecialString@faa824]/42[SpecialString@e4d6ef]<br>&nbsp;&nbsp;42[SpecialString@fde8da]/World[SpecialString@faa824]<br>&nbsp;&nbsp;World[SpecialString@faa824]/42[SpecialString@fde8da]<br><br>which is not what I expect. Why are combinations of x
<br>and y with the two &quot;42&quot;-instances not listed, i.e.<br><br>Why doesn&#39;t the output contain<br><br>&nbsp;&nbsp;42[SpecialString@e4d6ef]/42[SpecialString@fde8da]<br>&nbsp;&nbsp;42[SpecialString@fde8da]/42[SpecialString@e4d6ef]<br>
<br>The class SpecialString uses the standard equals(...)<br>and hashCode(...) implementation, so these should be<br>based on the object references, not the content:<br><br>public class SpecialString {<br>&nbsp;&nbsp;private String text;
<br><br>&nbsp;&nbsp;public SpecialString(String text) {<br>&nbsp;&nbsp;&nbsp;&nbsp;this.text=text;<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;public String getText() {<br>&nbsp;&nbsp;&nbsp;&nbsp;return(text);<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;@Override public String toString() {<br>&nbsp;&nbsp;&nbsp;&nbsp;return(getText()+&quot;[&quot;+super.toString()+&quot;]&quot;);
<br>&nbsp;&nbsp;}<br>}<br><br>Best regards<br><br>Markus<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wissenswertes für Bastler und Hobby Handwerker. BE A BETTER HEIMWERKER! <a href="http://www.yahoo.de/clever">www.yahoo.de/clever</a><br>_______________________________________________
<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users
</a><br></blockquote></div><br><br clear="all"><br>-- <br>&nbsp;&nbsp;Edson Tirelli<br>&nbsp;&nbsp;Software Engineer - JBoss Rules Core Developer<br>&nbsp;&nbsp;Office: +55 11 3529-6000<br>&nbsp;&nbsp;Mobile: +55 11 9287-5646<br>&nbsp;&nbsp;JBoss, a division of Red Hat @ 
<a href="http://www.jboss.com">www.jboss.com</a>