代码之家  ›  专栏  ›  技术社区  ›  Patrick Paul

了解与议程组一起锁定活动

  •  1
  • Patrick Paul  · 技术社区  · 7 年前

    我尝试了一个示例来了解锁定活动是如何工作的。当我在不使用议程组的情况下启动规则时,一切似乎都很好。但是,当我在下面的代码中取消对议程组的注释并将焦点设置为组“B”时,不会触发任何规则。

    规则

    rule "Additional Rs.1 tax for books above Rs.10"
    
    //agenda-group "Group B"
    lock-on-active true
    when 
        $o: Product(name=="Book",amount>10)
    then
        System.out.print($o.getAmount()+"-->");
    
        modify ($o) {
            setAmount($o.getAmount()+1); 
        }
    
        System.out.println($o.getAmount());
    end
    
    rule "Additional Rs.2 tax for books above Rs.20"
    
    //agenda-group "Group B"
    lock-on-active true
    when 
        $o: Product(name=="Book",amount>20)
    then
        System.out.print($o.getAmount()+"-->");
        modify ($o) {
            setAmount($o.getAmount()+1); 
        }
    
        System.out.println($o.getAmount());
    end
    

    用于触发规则的代码

    KieServices kieServices=KieServices.Factory.get();
    KieContainer kieContainer=kieServices.getKieClasspathContainer();
    KieSession kieSession=kieContainer.newKieSession("ksession-lockOnActive");
    
    Product product=new Product();
    product.setName("Book");
    product.setAmount(11);
    
    Product product2=new Product();
    product2.setName("Book");
    product2.setAmount(21);
    
    kieSession.getAgenda().getAgendaGroup("Group B").setFocus();
    
    kieSession.insert(product);
    kieSession.insert(product2);
    kieSession.fireAllRules();
    

    不带议程组的输出

    21-->22
    11-->12
    22-->23
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Patrick Paul    7 年前

    我使用的是Drools的旧版本(最终版本为6.2.0)。当我将其更改为7.4.1时。代码起作用了