您的位置:首页 > 其它

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

下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  drools session 技术