6、Drools6.4版本关于session的不同方法

该文章主要见解了https://dyingbleed.com/drools-4/ 博主的内容,在这里我深表感谢,

KIE = Knowledge is Everything

在 JBoss 定义的 knowledge 除了规则引擎 Drools 之外,还有工作流引擎 jBPM

KieServices

KieServices 是一个线程安全的单例:

KieServices kieServices = KieServices.Factory.get();  

KieServices 是访问规则引擎其它服务的中心。

以创建 KieContainer 实例为例:

KieContainer kieContainer = kieServices.newKieClasspathContainer();  

KieModule.xml

KieModule 是一个标准的 Java Maven 工程,包含了 pom.xmlkmodule.xml 和规则等必要资源。

KieModule 可以包含子 KieModule。

kmodule.xml内容分析


kmodule.xml 位于 src/main/resources/META-INF 目录下,定义了规则引擎如何加载工程中定义的规则。

一个空的 kmodule.xml 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>  
<kmodule xmlns="http://www.drools.org/xsd/kmodule"/>  

定义 kbase

  • name KIEBase 名称
  • includes 子 KIEBase 名称,多个使用逗号分隔
  • packages 规则文件所在包路径,多个使用逗号分隔

示例:

<?xml version="1.0" encoding="UTF-8"?>  
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">  
    <kbase name="rules" packages="rules.xxx">
    </kbase>
</kmodule>  

定义 ksession

  • name KIESession 名称
  • default 是否为默认 session,可选值:true false,默认值:false
  • type 会话类型,可选值:stateful 有状态会话 stateless 无状态会话,默认值:stateful  有状态会话  

示例:

<?xml version="1.0" encoding="UTF-8"?>  
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">  
    <kbase name="rules" packages="rules.xxx">
        <ksession default="true"/>
    </kbase>
</kmodule>  

KieBase

知识仓库。

KieContainer

KieModule 及子 KieModule 所有 KieBase 的容器。

获取 KieContainer 的两种方式:

  • 通过 classpath 加载规则
  • 通过 Maven GAV 加载规则(使用 KIE CI)

KieSession

用于与规则引擎进行交互的会话。

会话分为两类:

  • 有状态的 KieSession
  • 无状态的 StatelessKieSession 

KIESession
KIESession 会在多次与规则引擎进行交互中,维护会话的状态。
定义 KieSession,在   kmodule.xml   文件中定义 type 为   stateful   的 session:
<ksession name="stateful_session" type="stateful"></ksession>  

Tip:stateful 是 type 属性的默认值。

获取 KIESession 实例:

KieSession statefulSession = kieContainer.newKieSession("stateful_session");  

接下来,可以在 KIESession 执行一些操作。

最后,如果需要清理 KIESession 维护的状态,调用 dispose() 方法。

StatelessKIESession

与 KIESession 相反,StatelessKIESession 隔离了每次与规则引擎的交互,不会维护会话的状态。

如果将 session 比作编程语言中的函数,StatelessKIESession 就是无副作用的函数。

StatelessKIESession 适用场景:

  • 数据校验
  • 运算
  • 数据过滤
  • 消息路由
  • 任何能被描述成函数或公式的规则

定义 StatelessKIESession,在 kmodule.xml 文件中定义 type 为 stateless 的 session:

<ksession name="stateless_session" type="stateless"></ksession>  

获取 StatelessKIESession 实例:

StatelessKieSession statelessKieSession = kieContainer.newStatelessKieSession("stateless_session");  

通过 KieServices 获取 command 工厂类 KieCommands:

KieCommands commandFactory = kieServices.getCommands();  

可以使用工程类 KieCommands 调用 newXXXCommand 开头的方法创建 command 实例。

会话执行 command:

statelessKieSession.execute(command);

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

----请看下方↓↓↓↓↓↓↓

百度搜索 Drools从入门到精通:可下载开源全套Drools教程

深度Drools教程不段更新中:


更多Drools实战陆续发布中………

扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值