<font color='black' size='2' face='arial'><font color="black" face="arial" size="2">

<div> <font color="black" face="arial" size="2">
<div><font face="Arial, Helvetica, sans-serif">Hi All,<br>
<br>
We have an issue in rule when migrating drools from 3.0 to 5.1 with "eval". To demo this error, I use the following code:<br>

<br>

public class Info {<br>

&nbsp;&nbsp;&nbsp;&nbsp; public String getItem(int i) {<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "item is " + i;<br>

&nbsp;&nbsp;&nbsp;&nbsp; }<br>

}<br>

</font>
</div>





<div> <br>

In Drools 3.0, the following rule is fine:<br>

rule "test eval"<br>

&nbsp;&nbsp;&nbsp; salience 1 &nbsp; <br>

&nbsp;&nbsp;&nbsp; when&nbsp;&nbsp;&nbsp; <br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info : Info()<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval(into.getItem(0) != null)<br>

&nbsp;&nbsp; then<br>

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("test eval");<br>

&nbsp;&nbsp; end<br>

<br>

But when using drools 5.1, it shows error "info can not be resolved".&nbsp; I
 found a way to resolve this issue but don't know this is the best 
practice.<br>

<br>

declare Item<br>

&nbsp;&nbsp;&nbsp;&nbsp; name : String<br>

end<br>

<br>

<font><font color="black" face="arial" size="2">rule "insert item before eval"<br>


&nbsp;&nbsp;&nbsp; salience 0 &nbsp; <br>


&nbsp;&nbsp;&nbsp; when&nbsp;&nbsp;&nbsp; <br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; info : Info()<br>


&nbsp;&nbsp; then<br>


&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; Item item = new Item();<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.setName(info.getItem(0));<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert( item );<br>


&nbsp;&nbsp; end</font></font><br>

<br>

<font><font color="black" face="arial" size="2">rule "test eval"<br>


&nbsp;&nbsp;&nbsp; salience 1 &nbsp; <br>


&nbsp;&nbsp;&nbsp; when&nbsp;&nbsp;&nbsp; <br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item : Item(n : name)<br>


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eval( n != null)<br>


&nbsp;&nbsp; then<br>


&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println("test eval");<br>


&nbsp;&nbsp; end</font></font><br>

<br>
BTW, using "declare" in rule may cause memory leaking? We are seeing heap size growing after migrated to 5.1.<br>
<br>

Thanks,<br>

<br>

Liqun</div>
</font>
</div>



<div> <br>

</div>



<div style="clear: both;"></div>

</font></font>