pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

聊聊drools?session的不同

在drools中存在2種session,一種是有狀態(tài)的Session(StatefulSession),另外一種一種是無狀態(tài)的Session(StatelessSession,本文通過實例代碼給大家介紹drools?session的不同,感興趣的朋友一起看看吧

一、理解

drools中存在2種session,一種是有狀態(tài)的Session (Stateful Session),另外一種一種是無狀態(tài)的Session (Stateless Session)。

1、那么他們2者之間有什么不同呢?
2、何時該使用有狀態(tài)的Session,何時該使用無狀態(tài)的Session?
此處簡單說一下我的理解

1、有狀態(tài)Session

有狀態(tài) session 是使用推理對fact 對象隨時間進行迭代更改的會話。 在有狀態(tài)的 session中,來自 session的先前調(diào)用(先前的會話狀態(tài))的數(shù)據(jù)在會話調(diào)用之間保留,而在無狀態(tài)的 session中,該數(shù)據(jù)被丟棄。

2、無狀態(tài)Session

無狀態(tài) session 是不會使用推理對fact 對象隨時間進行迭代更改的會話。 無狀態(tài) Session 的先前調(diào)用的數(shù)據(jù)在會話之間不會保留的。

解釋:
針對無狀態(tài) session 是不會使用推理對fact 對象隨時間進行迭代更改的會話的理解,我的理解是 針對Java Api來使用的,
1、在無狀態(tài)的Session中,只有execute方法,多次調(diào)用execute方法,在上次execute方法不會影響下次execute方法的執(zhí)行。
2、而在drl文件中使用insertupdatemodifydelete等方法時,會導致工作內(nèi)存的對象更新,導致規(guī)則的重新匹配。

3、那么何時使用不同的Session呢?

1、如果說我們只是驗證一下規(guī)則,那么用無狀態(tài)的Session。
比如:

驗證用戶是否有開銀行卡的條件。計算訂單金額的折扣。

即一步就可以完成。

2、如果說我們的規(guī)則需要多步來完成,則可以用有狀態(tài)的Session。
比如:

向Session中插入Fact對象A,然后觸發(fā)規(guī)則。執(zhí)行一段Java代碼向Session中插入Fact對象B,然后觸發(fā)規(guī)則,此時的規(guī)則需要依賴上一步規(guī)則的數(shù)據(jù)。

即需要關聯(lián)的多步來完成。

二、需求

我們自己有一個Count對象,該對象存在cntname2個屬性。
規(guī)則文件中存在如下2個規(guī)則

規(guī)則一:
如果工作內(nèi)存中存在Count對象,則將Count對象的cnt屬性加1
規(guī)則二:
如果工作內(nèi)存中存在2Count對象,一個對象的name=count-01另一個對象的name=count-02則輸出ok字符串。

針對有狀態(tài)Session和無狀態(tài)Session,看結果有什么不同。

三、實現(xiàn)步驟

1、項目結構說明

2、引入jar包

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-bom</artifactId>
            <type>pom</type>
            <version>7.69.0.Final</version>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
    </dependency>
    <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-mvel</artifactId>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.11</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
    </dependency>
</dependencies>

3、編寫Count類

@Data
@AllArgsConstructor
public class Counter {
    /**
     * 名稱
     */
    private String name;
    /**
     * 計數(shù)
     */
    private Integer cnt;
}

就是一個普通的java對象。

4、編寫kmodule.xml文件

<kmodule xmlns="http://www.drools.org/xsd/kmodule">
    <kbase name="kabse-01" packages="rules.stateful" default="false">
        <!--
            type="stateful" 表示有狀態(tài)的session
        -->
        <ksession name="stateful-session" default="false" type="stateful"/>
    </kbase>
    <kbase name="kabse-02" packages="rules.stateless" default="false">
        <!--
            type="stateless" 表示無狀態(tài)的session
        -->
        <ksession name="stateless-session" default="false" type="stateless"/>
    </kbase>
</kmodule>

此處需要注意ksessiontype的值,無狀態(tài)Session和有狀態(tài)Session的值不一致,不寫type,默認就是有狀態(tài)Session。

5、編寫規(guī)則文件

package rules.stateful
import com.huan.drools.Counter
// 將counter中的cnt的值遞增一下
rule "stateful_rule_count_increment"
    when
        $counter: Counter( )
    then
        $counter.setCnt($counter.getCnt() + 1);
        System.out.println("rule_count_increment: count name:[" + $counter.getName()+"],cnt=[" + $counter.getCnt() + "]");
end
// 如果工作內(nèi)存中同時存在 count-01 和 counter-02 則輸出ok
rule "stateful_rule_count_exists"
    when
        Counter(name == "count-01") and Counter(name == "count-02")
    then
        System.out.println("ok");
end

6、Stateful session運行結果

1、因為是有狀態(tài)的Session,在多次fireAllRules的時候,上次插入到工作內(nèi)存的對象還是存在的。即Session的數(shù)據(jù)保留了
2、有狀態(tài)Session在執(zhí)行完之后,必須要調(diào)用dispose方法,避免內(nèi)存泄漏。

7、Stateless Session運行結果

無狀態(tài)的Session,因為會丟失Session的數(shù)據(jù),所以ok沒有輸出出來。

四、注意事項

1、在drl文件中,使用insert\update\modify\delete等方法時,都在導致規(guī)則的重新匹配。
2、Java代碼中是否可以獲取stateful sessionstateless session是有ksession中的type的值決定的。
3、stateless sessionexecute執(zhí)行完之后,會清除工作內(nèi)存中的數(shù)據(jù),而stateful sessionfireAllRules則不會清除,除非調(diào)用了dispose方法。
4、個人理解有狀態(tài)和無狀態(tài)從api層面更好理解。

五、完整代碼

https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-session

六、參考文檔

1、https://docs.drools.org/7.69.0.Final/drools-docs/html_single/index.html#kie-sessions-con_decision-engine
2、https://www.javainuse.com/drools_states
3、https://groups.google.com/g/drools-usage/c/qYbqiS1ht4g

到此這篇關于drools session理解的文章就介紹到這了,更多相關drools session內(nèi)容請搜索html5模板網(wǎng)以前的文章希望大家以后多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權益,請聯(lián)系我們刪除處理,感謝您的支持!

相關文檔推薦

主站蜘蛛池模板: POS机官网 - 拉卡拉POS机免费办理|官网在线申请入口 | 服务器之家 - 专注于服务器技术及软件下载分享 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 三板富 | 专注于新三板的第一垂直服务平台 | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 昊宇水工|河北昊宇水工机械工程有限公司 | 模温机-油温机-电加热导热油炉-工业冷水机「欧诺智能」 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 气力输送设备_料封泵_仓泵_散装机_气化板_压力释放阀-河南锐驰机械设备有限公司 | 浙江美尔凯特智能厨卫股份有限公司 | 在线悬浮物浓度计-多参数水质在线检测仪-上海沃懋仪表科技有限公司 | 样品瓶(色谱样品瓶)百科-浙江哈迈科技有限公司 | 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司 | 幂简集成 - 品种超全的API接口平台, 一站搜索、试用、集成国内外API接口 | 杭州成人高考_浙江省成人高考网上报名 | 西安展台设计搭建_西安活动策划公司_西安会议会场布置_西安展厅设计西安旭阳展览展示 | 德国GMN轴承,GMN角接触球轴承,GMN单向轴承,GMN油封,GMN非接触式密封 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 油液红外光谱仪-油液监测系统-燃油嗅探仪-上海冉超光电科技有限公司 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 多物理场仿真软件_电磁仿真软件_EDA多物理场仿真软件 - 裕兴木兰 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 【黄页88网】-B2B电子商务平台,b2b平台免费发布信息网 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 合肥废气治理设备_安徽除尘设备_工业废气处理设备厂家-盈凯环保 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 深圳APP开发公司_软件APP定制开发/外包制作-红匣子科技 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 济南ISO9000认证咨询代理公司,ISO9001认证,CMA实验室认证,ISO/TS16949认证,服务体系认证,资产管理体系认证,SC食品生产许可证- 济南创远企业管理咨询有限公司 郑州电线电缆厂家-防火|低压|低烟无卤电缆-河南明星电缆 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 牛奶检测仪-乳成分分析仪-北京海谊 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页 | HV全空气系统_杭州暖通公司—杭州斯培尔冷暖设备有限公司 |