[rules-users] why loop fire with no-loop is true?
Salaboy
salaboy at gmail.com
Sun Nov 29 05:34:25 EST 2009
The no loop goes inside each rule
- Ing. Mauricio Salatino -
On Nov 29, 2009, at 6:00 AM, Sinboy Zhang <iamsinboy at gmail.com> wrote:
> 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091129/834e6aa2/attachment.html
More information about the rules-users
mailing list