<html><body bgcolor="#FFFFFF"><div>The no loop goes inside each rule</div><div><br>- Ing. Mauricio Salatino -</div><div><br>On Nov 29, 2009, at 6:00 AM, Sinboy Zhang &lt;<a href="mailto:iamsinboy@gmail.com">iamsinboy@gmail.com</a>&gt; wrote:<br><br></div><div></div><blockquote type="cite"><div><div><strong>i expect the result is 530,and define the "no-loop=true" in the rules ,but result is 460,why?</strong></div>
<div><strong>--------------------------------------------------------------------------------------------------------------------------------------------------</strong></div>
<div>my java test code:</div>
<div>&nbsp;</div>
<div><font style="BACKGROUND-COLOR: #ffff99">package org.sample;<br>&nbsp;<br>import org.drools.KnowledgeBase;<br>import org.drools.KnowledgeBaseFactory;<br>import org.drools.builder.KnowledgeBuilder;<br>import org.drools.builder.KnowledgeBuilderError;<br>
import org.drools.builder.KnowledgeBuilderErrors;<br>import org.drools.builder.KnowledgeBuilderFactory;<br>import org.drools.builder.ResourceType;<br>import org.drools.io.ResourceFactory;<br>import org.drools.logger.KnowledgeRuntimeLogger;<br>
import org.drools.logger.KnowledgeRuntimeLoggerFactory;<br>import org.drools.runtime.StatefulKnowledgeSession;<br>&nbsp;</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99">public class SalesTest {</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99">&nbsp;public static final void main(String[] args) {<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;// load up the knowledge base<br>&nbsp;&nbsp;&nbsp;KnowledgeBase kbase = readKnowledgeBase();<br>&nbsp;&nbsp;&nbsp;StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();<br>
&nbsp;&nbsp;&nbsp;KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");<br>&nbsp;&nbsp;&nbsp;// go !<br>&nbsp;&nbsp;&nbsp;Sales message = new Sales();<br>&nbsp;&nbsp;&nbsp;message.setName("sinboy");<br>&nbsp;&nbsp;&nbsp;message.setSales(600);<br>
&nbsp;&nbsp;&nbsp;ksession.insert(message);<br>&nbsp;&nbsp;&nbsp;ksession.fireAllRules(); <br>&nbsp;&nbsp;&nbsp;//ksession.dispose();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;System.out.println("updated:"+message.getName()+","+message.getSales());<br>&nbsp;&nbsp;&nbsp;logger.close();<br>
&nbsp;&nbsp;} catch (Throwable t) {<br>&nbsp;&nbsp;&nbsp;t.printStackTrace();<br>&nbsp;&nbsp;}<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99">&nbsp;private static KnowledgeBase readKnowledgeBase() throws Exception {<br>&nbsp;&nbsp;KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();<br>&nbsp;&nbsp;//kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);<br>
&nbsp;&nbsp;kbuilder.add(ResourceFactory.newUrlResource(" </font><a href="http://127.0.0.1:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/org.sample/LATEST"><font style="BACKGROUND-COLOR: #ffff99">http://127.0.0.1:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/org.sample/LATEST</font></a><font style="BACKGROUND-COLOR: #ffff99">"), ResourceType.PKG);<br>
&nbsp;&nbsp;KnowledgeBuilderErrors errors = kbuilder.getErrors();<br>&nbsp;&nbsp;if (errors.size() &gt; 0) {<br>&nbsp;&nbsp;&nbsp;for (KnowledgeBuilderError error: errors) {<br>&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(error);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;throw new IllegalArgumentException("Could not parse knowledge.");<br>
&nbsp;&nbsp;}<br>&nbsp;&nbsp;KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();<br>&nbsp;&nbsp;kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());<br>&nbsp;&nbsp;return kbase;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99">}</font><br></div>
<div><strong>the print info is:</strong></div>
<div>
<div>fired1:discount,550<br>fired0:discount,530<br>fired1:discount,480<br>fired0:discount,460<br>updated:discount,460</div></div>
<div>---------------------------------------------------------------------</div>
<div>my java model is :</div>
<div>&nbsp;</div>
<div><font style="BACKGROUND-COLOR: #ffcc99">package org.sample;</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">import java.util.Date;</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">public class Sales {<br>&nbsp;private String name;<br>&nbsp;private long sales;<br>&nbsp;private Date dateOfSale;<br>&nbsp;private boolean chocolateOnlyCustomer;</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public String getName() {<br>&nbsp;&nbsp;return name;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public void setName(String name) {<br>&nbsp;&nbsp;<a href="http://this.name"><a href="http://this.name">this.name</a></a> = name;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public long getSales() {<br>&nbsp;&nbsp;return sales;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public void setSales(long sales) {<br>&nbsp;&nbsp;this.sales = sales;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public Date getDateOfSale() {<br>&nbsp;&nbsp;return dateOfSale;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public void setDateOfSale(Date dateOfSale) {<br>&nbsp;&nbsp;this.dateOfSale = dateOfSale;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public boolean isChocolateOnlyCustomer() {<br>&nbsp;&nbsp;return chocolateOnlyCustomer;<br>&nbsp;}</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99">&nbsp;public void setChocolateOnlyCustomer(boolean choclateOnlyCustomer) {<br>&nbsp;&nbsp;this.chocolateOnlyCustomer = chocolateOnlyCustomer;<br>&nbsp;}<br>}</font></div>
<div>&nbsp;</div>
<div>rules:</div>
<div><font style="BACKGROUND-COLOR: #ff9966">dialect "mvel"<br><font color="#ff0000"><strong>no-loop true</strong></font></font></div>
<div><font style="BACKGROUND-COLOR: #ff9966">rule "DiscountRule"&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; salience 9<br>when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $fact0:Sales(s:sales&gt;100)<br>then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #Sales fact0=new Sales();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #fact0.setSales(s.getSales()-10);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #fact0.setName("discount");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #insert(fact0); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modify($fact0){setName("discount")} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modify($fact0){setSales(s-20)} <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("fired0:"+$fact0.getName()+<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ","+$fact0.getSales());<br>end</font></div>
<div><font style="BACKGROUND-COLOR: #ff9966">rule "DiscountRule2"&nbsp; <br>&nbsp;&nbsp; salience 18<br>when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $fact1:Sales(s1:sales&gt;500)<br>then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modify($fact1){setName("discount")}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modify($fact1){setSales(s1-50)}<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("fired1:"+$fact1.getName()+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ","+$fact1.getSales());<br>end</font></div>
<div><font style="BACKGROUND-COLOR: #ff9966"></font>&nbsp;</div>
<div><font style="BACKGROUND-COLOR: #ffffff"><strong></strong></font>&nbsp;</div>
<div>&nbsp;</div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>rules-users mailing list</span><br><span><a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a></span><br><span><a href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a></span><br></div></blockquote></body></html>