<br>&nbsp;&nbsp;&nbsp; Allen, <br><br>&nbsp;&nbsp;&nbsp; The problem is that you are making your methods &quot;final&quot;. When you make your methods final, the shadow proxy can&#39;t intercept them to ensure working memory consistency. In your example, just removing the final modifier from your methods make them work as expected.<br>
<br>&nbsp;&nbsp;&nbsp; If it is of any help, you can completely disable shadow facts by following the instructions in the manual or in this post:<br><br><a href="http://blog.athico.com/2008/02/shadow-facts-what-you-always-wanted-to.html">http://blog.athico.com/2008/02/shadow-facts-what-you-always-wanted-to.html</a><br>
<br>&nbsp;&nbsp;&nbsp; Also, the algorithm used in drools 5 will not require shadow facts anymore.<br><br>&nbsp;&nbsp;&nbsp; The reason eval works in your example is that it bypass shadow facts.<br><br>&nbsp;&nbsp;&nbsp; []s<br>&nbsp;&nbsp;&nbsp; Edson<br><br><br><div class="gmail_quote">
2008/4/25 Bagwell, Allen F &lt;<a href="mailto:afbagwe@sandia.gov">afbagwe@sandia.gov</a>&gt;:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">




<div>
<div dir="ltr" align="left"><font color="#0000ff" face="Arial" size="2"></font>&nbsp;</div>
<div dir="ltr" align="left"><font color="#0000ff" face="Arial" size="2"><span>I forgot to mention...</span></font></div>
<div dir="ltr" align="left"><font color="#0000ff" face="Arial" size="2"><span></span></font>&nbsp;</div>
<div dir="ltr" align="left"><font color="#0000ff" face="Arial" size="2"><span>Drools 4.0.4 (the pre-compiled jars downloaded from the 
Drools web site)</span></font></div>
<div dir="ltr" align="left"><font color="#0000ff" face="Arial" size="2"><span></span></font>&nbsp;</div>
<div dir="ltr" align="left"><font color="#0000ff" face="Arial" size="2"><span>Running on HP ProLiant/RedHat Enterprise 
4.</span></font></div><div class="Ih2E3d">
<div dir="ltr" align="left"><font color="#0000ff" face="Arial" size="2"></font>&nbsp;</div>
<div dir="ltr" align="left"><span><font color="#0000ff" face="Arial" size="2">-A</font></span></div><br>
<div dir="ltr" align="left" lang="en-us">
<hr>
<font face="Tahoma" size="2"><b>From:</b> <a href="mailto:rules-users-bounces@lists.jboss.org" target="_blank">rules-users-bounces@lists.jboss.org</a> 
[mailto:<a href="mailto:rules-users-bounces@lists.jboss.org" target="_blank">rules-users-bounces@lists.jboss.org</a>] <b>On Behalf Of </b>Edson 
Tirelli<br><b>Sent:</b> Thursday, April 24, 2008 3:54 PM<br><b>To:</b> Rules 
Users List<br><b>Subject:</b> Re: [rules-users] When is eval 
unavoidable?<br></font><br></div>
<div></div><br></div><div><div></div><div class="Wj3C7c">&nbsp;&nbsp; Allen,<br><br>&nbsp;&nbsp; Both your examples must 
work just fine:<br><br>$b : Y(running == true)<br><br>// attempting to find all 
applicants named Bob<br>$p : Person(firstName == &quot;Bob&quot;)<br>$ap : 
Applicant(person == $p)<br><br>&nbsp;&nbsp;&nbsp; I can&#39;t think about a reason 
for them to not work. If they aren&#39;t, can you please provide a self contained 
test case for us to evaluate?<br><br>&nbsp;&nbsp;&nbsp; Answering your question, 
in Drools 4, assuming your facts are beans, there should be almost no reason for 
you to fall back into an eval. The usage of eval is usually related to the need 
for calculation inside a constraint or the call of 
functions.<br><br>&nbsp;&nbsp; []s<br>&nbsp;&nbsp; Edson<br><br>&nbsp;&nbsp; 
<br><br><br>
<div class="gmail_quote">2008/4/24 Bagwell, Allen F &lt;<a href="mailto:afbagwe@sandia.gov" target="_blank">afbagwe@sandia.gov</a>&gt;:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I&#39;m 
  learning how to use Drools, but eval presents a problem to me when I am 
  composing rules. I&#39;ve read the manual and have a basic understanding of what 
  it is for (very useful in certain situations!), but is there a better 
  explanation of when it cannot be avoided?<br><br>For example when writing the 
  LHS portion of a rule, I&#39;ve run into a problem where literal restrictions 
  alone are fine for one object but inadequate for another. &nbsp;Like 
  so:<br><br>$a : X(temp &lt; 100)<br><br>$b : Y(running == true)<br><br>In both 
  cases class X and class Y have standard Java bean set up for these fields with 
  appropriate getters and setters, and the corresponding inserted facts see 
  these fields being updated from time to time. But whereas the first fact 
  causes rule activation when the temp field meets the rule critiera, the second 
  will never work unless it is re-written as:<br><br>$b : Y()<br>eval 
  ($b.isRunning() == true)<br><br><br>I&#39;ve encountered a similar problem with 
  in-line evals where Drools will accept an LHS like this:<br><br>// attempting 
  to find all applicants named Bob<br>$p : Person(firstName == &quot;Bob&quot;)<br>$ap : 
  Applicant(person == $p)<br><br>but it will never cause activation unless you 
  re-write it like this:<br><br>$p : Person(firstName == &quot;Bob&quot;)<br>$ap : 
  Applicant( eval(person == $p) )<br><br>despite the fact that the Applicant 
  object&#39;s person field once set never changes.<br><br>So is there a more 
  definitive explanation as to why one is forced to use eval when you would 
  think that simple literal restrictions would be enough? &nbsp;I&#39;ve read in 
  other posts that &quot;eval is evil&quot; and to best avoid it unless necessary, but 
  this is perplexing me because I haven&#39;t yet discovered the way to think about 
  rule composition that prevents eval use from appearing to be arbitrary. Mostly 
  it&#39;s been write what I think *should* work and if it does then great, it if 
  doesn&#39;t then keep adding evals until it does. For the record, I&#39;m using the 
  java dialect if that makes a 
  difference.<br><br>Thanks!<br><br>-Allen<br><br><br><br><br><br>_______________________________________________<br>rules-users 
  mailing list<br><a href="mailto:rules-users@lists.jboss.org" target="_blank">rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>Edson Tirelli<br>JBoss Drools Core Development<br>Office: 
+55 11 3529-6000<br>Mobile: +55 11 9287-5646<br>JBoss, a division of Red Hat @ 
<a href="http://www.jboss.com" target="_blank">www.jboss.com</a> </div></div></div>
<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" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br> Edson Tirelli<br> JBoss Drools Core Development<br> Office: +55 11 3529-6000<br> Mobile: +55 11 9287-5646<br> JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a>