*i expect the result is 530,and define the "no-loop=true" in the rules ,but result is 460,why?* * -------------------------------------------------------------------------------------------------------------------------------------------------- * my java test code:
package org.sample; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderError; import org.drools.builder.KnowledgeBuilderErrors; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.builder.ResourceType; import org.drools.io.ResourceFactory; import org.drools.logger.KnowledgeRuntimeLogger; import org.drools.logger.KnowledgeRuntimeLoggerFactory; import org.drools.runtime.StatefulKnowledgeSession; public class SalesTest { public static final void main(String[] args) { try { // load up the knowledge base KnowledgeBase kbase = readKnowledgeBase(); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "test"); // go ! Sales message = new Sales(); message.setName("sinboy"); message.setSales(600); ksession.insert(message); ksession.fireAllRules(); //ksession.dispose(); System.out.println("updated:"+message.getName()+","+message.getSales()); logger.close(); } catch (Throwable t) { t.printStackTrace(); } } private static KnowledgeBase readKnowledgeBase() throws Exception { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); //kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL); kbuilder.add(ResourceFactory.newUrlResource(" http://127.0.0.1:8080/drools-guvnor/org.drools.guvnor.Guvnor/package/org.sample/LATEST"), ResourceType.PKG); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error: errors) { System.err.println(error); } throw new IllegalArgumentException("Could not parse knowledge."); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; } } *the print info is:* fired1:discount,550 fired0:discount,530 fired1:discount,480 fired0:discount,460 updated:discount,460 --------------------------------------------------------------------- my java model is : package org.sample; import java.util.Date; public class Sales { private String name; private long sales; private Date dateOfSale; private boolean chocolateOnlyCustomer; public String getName() { return name; } public void setName(String name) { this.name = name; } public long getSales() { return sales; } public void setSales(long sales) { this.sales = sales; } public Date getDateOfSale() { return dateOfSale; } public void setDateOfSale(Date dateOfSale) { this.dateOfSale = dateOfSale; } public boolean isChocolateOnlyCustomer() { return chocolateOnlyCustomer; } public void setChocolateOnlyCustomer(boolean choclateOnlyCustomer) { this.chocolateOnlyCustomer = chocolateOnlyCustomer; } } rules: dialect "mvel" *no-loop true* rule "DiscountRule" salience 9 when $fact0:Sales(s:sales>100) then #Sales fact0=new Sales(); #fact0.setSales(s.getSales()-10); #fact0.setName("discount"); #insert(fact0); modify($fact0){setName("discount")} modify($fact0){setSales(s-20)} System.out.println("fired0:"+$fact0.getName()+ ","+$fact0.getSales()); end rule "DiscountRule2" salience 18 when $fact1:Sales(s1:sales>500) then modify($fact1){setName("discount")} modify($fact1){setSales(s1-50)} System.out.println("fired1:"+$fact1.getName()+ ","+$fact1.getSales()); end **
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users