Drools6.4版本关于session的不同方法
2017-03-22 18:06
399 查看
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这一块技术,遇到了很多难题,很多技术问题,小编不敢说这文章是写的最好的,只是做一个技术分享,之前也有写过博客,但遇到一些事让小编有些心寒,所以将博客删除了,小编真的不是来装大神装B的,只是将自己会的一些技术分享出来,让初学者少走一些弯路,这技术比较冷门,所以资料少的可怜经过小编的不懈努力,结合了自己的认知和笔记,用时两周将些文档编辑成功,读者如果心疼小编,就给一些辛苦费啥的,小编后续会继续努力将底层实现和算法的知识也写进来的
文章是不可编辑的,读者要是看到哪里有问题或出错的地方,可随时与小编联系,小编的QQ是448998253 邮箱是kangzuguan@qq.com
下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的
相关文章推荐
- 6、Drools6.4版本关于session的不同方法
- 关于不同版本JDK启动eclipse失败的解决方法
- 关于 QWidget+Qml程序打包到ubuntu时,程序与系统库版本不同,编译时添加并依赖自带库 的方法
- 关于session_cached_cursors的在不同db版本下的不同默认值
- 关于Session方法之Abandon、Clear和RemoveAll
- Frame中关于Session丢失的解决方法
- Frame中关于Session丢失的解决方法!
- .Net反射技术应用解决对象不同版本方法不同参数的问题
- 关于session的介绍以及实现跨context的session方法(jsp-servlet 技术)
- .Net反射技术应用解决对象不同版本方法不同参数的问题
- session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
- Net反射技术应用解决对象不同版本方法不同参数的问题
- 关于Global.asa文件的深入研究与session变量失效提示的具体方法
- 关于Sessiont丢值的处理方法
- GCC不同版本的编译方法
- 关于Sessiont丢值的处理方法
- 关于Global.asa文件的深入研究与session变量失效提示的具体方法
- Frame中关于Session丢失的解决方法!
- 关于E17 CVS0926版本中图标混乱的解决方法
- Frame中关于Session丢失的解决方法!