Drools6.4版本关于session的不同方法
小编为什么会要将session独立出来一个章节呢,这是有原因的,我们在开发过程会遇到各种情况,这个session的状态是很重要的,也会在开发中经常使用。
KieSession用于与规则引擎进行交互的会话。
会话分为两类:
l 有状态的 KieSession
l 无状态的 StatelessKieSession
KieSession 有状态的
KieSession 会在多次与规则引擎进行交互中,维护会话的状态。
定义KieSession,在kmodule.xml文件中定义 type 为stateful的 session:
<ksessionname="stateful_session"type="stateful"></ksession>
注意:stateful 是 type 属性的默认值。
获取 KieSession实例
KieSessionstatefulSession =kieContainer.newKieSession("stateful_session");
接下来,可以在 KieSession执行一些操作。最后,如果需要清理KieSession维护的状态,调用 dispose()方法。
StatelessKIESession
与 KieSession相反,StatelessKIESession 隔离了每次与规则引擎的交互,不会维护会话的状态。
如果将 session 比作编程语言中的函数,StatelessKIESession 就是无副作用的函数。
StatelessKIESession适用场景:
数据校验
运算
数据过滤
消息路由
任何能被描述成函数或公式的规则
定义StatelessKIESession,在kmodule.xml文件中定义type为stateless的 session:
<ksessionname="stateless_session"type="stateless"></ksession>
如果我们想要用无状态的kie-session的话就必须这样定义了。
获取StatelessKIESession 实例:
StatelessKieSession statelessKieSession = kieContainer.newStatelessKieSession("stateless_session");
//通过 KieServices 获取 command 工厂类 KieCommands:
KieCommands commandFactory = kieServices.getCommands();
//可以使用工程类 KieCommands 调用 newXXXCommand 开头的方法创建 command 实例。
//会话执行 command:
statelessKieSession.execute(command);
//----------------------- 分隔线-----------------------
[source code] 调用的是该接口
public interface StatelessRuleSession {
void execute(java.lang.Object o);
void execute(java.lang.Iterable iterable);
}
StatelessKnowledgeSessionImpl 实现类
public void execute(Object object) {
StatefulKnowledgeSession ksession = newWorkingMemory();
try {
ksession.insert( object );
ksession.fireAllRules();
} finally {
dispose(ksession);
}
}
从代码中我们可以看出来,也是通过finally中的dispose方法来删除的,只是与kieSession方式不同。
下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的
----请看下方↓↓↓↓↓↓↓
百度搜索 Drools从入门到精通:可下载开源全套Drools教程
深度Drools教程不段更新中:
更多Drools实战陆续发布中………
扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓