drools 规则引擎session
KieSession是用来与规则引擎进行交互的会话。在Drools 7当中分有状态的session和无状态的session:KieSession和StatelessKieSession。
1.1 有状态session
通过KieContainer可以获取KieSession,在kmodule.xml配置文件中如果不指定ksession的type默认也是有状态的session。有状态session的特性是,我们可以通过建立一次session完成多次与规则引擎之间的交互,在没有调用dispose方法时,会维持会话状态。使用KieSession的一般步骤为,获取session,insert Fact对象,然后调用fireAllRules进行规则匹配,随后调用dispose方法关闭session。
1.2 无状态session
StatelessKieSession提供了一个更加便利的API,是对KisSession的封装,不再调用dispose方法进行session的关闭。它隔离了每次与规则引擎的交互,不会再去维护会话的状态。同时也不再提供fireAllRules方法。
使用场景:
(1)数据校验
(2)运算
(3)数据过滤
(4)消息路由
(5)任何能被描述成函数或公式的规则
具体示例:
规则代码:
package com.stateless
import com.secbro.drools.model.Person
rule "test-stateless"
when
$p : Person()
then
System.out.println($p.getAge());
end
测试代码:
public void testStateLessSession(){
StatelessKieSession kieSession = this.getStatelessKieSession();
List<Person> list = new ArrayList<>();
Person p = new Person();
p.setAge(35);
list.add(p);
Person p1 = new Person();
p1.setAge(20);
list.add(p1);
// kieSession.execute(p);
kieSession.execute(list);
}
protected StatelessKieSession getStatelessKieSession(){
KieServices kieServices = KieServices.get();
KieContainer kieContainer = kieServices.getKieClasspathContainer();
StatelessKieSession kieSession = kieContainer.newStatelessKieSession("stateless-rules");
return kieSession;
}
protected StatelessKieSession getStatelessKieSession(String agendaGroupName){
StatelessKieSession kieSession = getStatelessKieSession();
return kieSession;
}
相关技术视频
QQ技术交流2群:715840230
CSDN学院:《Drools7规则引擎进阶教程》
CSDN学院:《Drools7规则引擎入门教程》
CSDN学院:《Drools7系列优惠套餐》
《Drools规则引擎基础+Workbench实战视频教程套餐》
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://choupangxia.com/2019/09/07/drools-%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8esession/