幾個關鍵點:
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
