《Drools7.0.0.Final规则引擎教程》第5章 session使用说明详解编程语言

KieSession是用来与规则引擎进行交互的会话。在Drools 7当中分有状态的session和无状态的session:KieSession和StatelessKieSession。

有状态session

通过KieContainer可以获取KieSession,在kmodule.xml配置文件中如果不指定ksession的type默认也是有状态的session。有状态session的特性是,我们可以通过建立一次session完成多次与规则引擎之间的交互,在没有调用dispose方法时,会维持会话状态。使用KieSession的一般步骤为,获取session,insert Fact对象,然后调用fireAllRules进行规则匹配,随后调用dispose方法关闭session。

无状态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; 
    }

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15183.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论