• 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
  • 相关阅读:
    C#反射的使用
    Swagger实例分享(VS+WebApi+Swashbuckle)
    WCF全双工通信实例分享(wsDualHttpBinding、netTcpBinding两种实现方式)
    WCF通信简单学习实例
    netcore 实现跨应用的分布式session
    netcore mvc 的简单实现
    netcore 基于 DispatchProxy 实现一个简单Rpc远程调用
    一步步到IOC
    《JavaScript设计模式与开发实践》读书笔记-基础知识
    windows下docker与.net core 的简单示例
  • 原文地址:https://www.cnblogs.com/xiaojf/p/8331351.html
Copyright © 2020-2023  润新知