<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 <<a href="mailto:iamsinboy@gmail.com">iamsinboy@gmail.com</a>> 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> </div>
<div><font style="BACKGROUND-COLOR: #ffff99">package org.sample;<br> <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> </font></div>
<div><font style="BACKGROUND-COLOR: #ffff99">public class SalesTest {</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99"> public static final void main(String[] args) {<br> try {<br> // load up the knowledge base<br> KnowledgeBase kbase = readKnowledgeBase();<br> StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();<br>
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test");<br> // go !<br> Sales message = new Sales();<br> message.setName("sinboy");<br> message.setSales(600);<br>
ksession.insert(message);<br> ksession.fireAllRules(); <br> //ksession.dispose();<br> <br> System.out.println("updated:"+message.getName()+","+message.getSales());<br> logger.close();<br>
} catch (Throwable t) {<br> t.printStackTrace();<br> }<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffff99"> private static KnowledgeBase readKnowledgeBase() throws Exception {<br> KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();<br> //kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL);<br>
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>
KnowledgeBuilderErrors errors = kbuilder.getErrors();<br> if (errors.size() > 0) {<br> for (KnowledgeBuilderError error: errors) {<br> System.err.println(error);<br> }<br> throw new IllegalArgumentException("Could not parse knowledge.");<br>
}<br> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();<br> kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());<br> return kbase;<br> }</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> </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> private String name;<br> private long sales;<br> private Date dateOfSale;<br> private boolean chocolateOnlyCustomer;</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public String getName() {<br> return name;<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public void setName(String name) {<br> <a href="http://this.name"><a href="http://this.name">this.name</a></a> = name;<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public long getSales() {<br> return sales;<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public void setSales(long sales) {<br> this.sales = sales;<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public Date getDateOfSale() {<br> return dateOfSale;<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public void setDateOfSale(Date dateOfSale) {<br> this.dateOfSale = dateOfSale;<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public boolean isChocolateOnlyCustomer() {<br> return chocolateOnlyCustomer;<br> }</font></div>
<div><font style="BACKGROUND-COLOR: #ffcc99"> public void setChocolateOnlyCustomer(boolean choclateOnlyCustomer) {<br> this.chocolateOnlyCustomer = chocolateOnlyCustomer;<br> }<br>}</font></div>
<div> </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" <br> salience 9<br>when<br> $fact0:Sales(s:sales>100)<br>then<br> #Sales fact0=new Sales();<br> #fact0.setSales(s.getSales()-10);<br>
#fact0.setName("discount");<br> #insert(fact0); <br> <br> modify($fact0){setName("discount")} <br> modify($fact0){setSales(s-20)} <br> System.out.println("fired0:"+$fact0.getName()+<br>
","+$fact0.getSales());<br>end</font></div>
<div><font style="BACKGROUND-COLOR: #ff9966">rule "DiscountRule2" <br> salience 18<br>when<br> $fact1:Sales(s1:sales>500)<br>then <br> modify($fact1){setName("discount")}<br> modify($fact1){setSales(s1-50)}<br>
System.out.println("fired1:"+$fact1.getName()+<br> ","+$fact1.getSales());<br>end</font></div>
<div><font style="BACKGROUND-COLOR: #ff9966"></font> </div>
<div><font style="BACKGROUND-COLOR: #ffffff"><strong></strong></font> </div>
<div> </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>