zoukankan      html  css  js  c++  java
  • drools7 (二、agenda-group 的使用)

    几个关键点:

    1. 如果没有指定agenda-group 则默认把所有未指定agenda-group的 rules 都执行一遍

    2. 如果指定了agenda-group 使用的时候必须指定该name才能被使用,默认是不能使用的

    3. agenda-group name可以重复

    4. agenda-group 用于区分rule

    最简单的使用方法(部分代码参考第一节)

    package cn.xiaojf.drools7.base;
    
    import org.apache.commons.lang3.StringUtils;
    import org.kie.api.KieServices;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.KieSession;
    
    public class Base {
        public KieSession getSession() {
            KieServices kieServices = KieServices.Factory.get();
            KieContainer kieContainer = kieServices.getKieClasspathContainer();
            //kmodule.xml 中定义的 ksession name
            KieSession kieSession = kieContainer.newKieSession("all-rules");
            return kieSession;
        }
    
        public KieSession getSession(String agendaGroupName) {
            KieSession session = this.getSession();
            if (StringUtils.isNoneBlank(agendaGroupName)) {
                session.getAgenda().getAgendaGroup(agendaGroupName).setFocus();
            }
    
            return session;
        }
    }

    测试方法

    package day20180117;
    
    import cn.xiaojf.drools7.base.Base;
    import cn.xiaojf.drools7.model.Car;
    import cn.xiaojf.drools7.model.Person;
    import org.junit.Test;
    import org.kie.api.KieServices;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.KieSession;
    
    public class Demo extends Base {
        @Test
        public void test() {
            KieSession kieSession = getSession();
    
            Person p1 = new Person();
            p1.setAge(20);
            Car car = new Car();
            car.setPerson(p1);
    
            kieSession.insert(car);
    
            int count = kieSession.fireAllRules();
    
            System.out.println(count);
            System.out.println(car.getDiscount());
    
            kieSession.dispose();
        }
    
        @Test
        public void test2() {
            KieSession kieSession = getSession("test-group");
    
            Person p1 = new Person();
            p1.setAge(20);
            Car car = new Car();
            car.setPerson(p1);
    
            kieSession.insert(car);
    
            int count = kieSession.fireAllRules();
    
            System.out.println(count);
            System.out.println(car.getDiscount());
    
            kieSession.dispose();
        }
    }

    rule 文件

    package cn.xiaojf.rules
    
    import cn.xiaojf.drools7.model.Car;
    rule "car-discount>30"
    agenda-group "test-group"
    when
        $car : Car(person.age > 30)
        then
            $car.setDiscount(80);
        end
    rule "car-discount<=30"
    agenda-group "test-group"
    when
    $car : Car(person.age <= 30)
    then
    $car.setDiscount(90);
    end
     

    结果如下

    1
    90
  • 相关阅读:
    【Ts踩坑】关于子类继承Error/Array/Map等造成无法访问子类中声明的方法问题
    【React Hooks】memo和useCallback搭配所带来的性能优化
    【Ts重构Axios】url处理篇
    【CSS style】超出指定行文字后开始省略
    【TypeScript】基本数据类型小结
    【TypeScript】你需要了解的泛型
    【TypeScript】几种高级类型
    Python 下载图片的几种方法
    python with open as f 写韩文中文乱码
    烙印---臧克家
  • 原文地址:https://www.cnblogs.com/xiaojf/p/8331351.html
Copyright © 2011-2022 走看看