最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

聊聊drools?session的不同

 更新時(shí)間:2022年05月17日 09:47:04   作者:huan1993  
在drools中存在2種session,一種是有狀態(tài)的Session (Stateful Session),另外一種一種是無(wú)狀態(tài)的Session (Stateless Session,本文通過(guò)實(shí)例代碼給大家介紹drools?session的不同,感興趣的朋友一起看看吧

一、理解

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

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

1、有狀態(tài)Session

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

2、無(wú)狀態(tài)Session

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

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

3、那么何時(shí)使用不同的Session呢?

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

驗(yàn)證用戶是否有開銀行卡的條件。計(jì)算訂單金額的折扣。

即一步就可以完成。

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

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

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

二、需求

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

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

針對(duì)有狀態(tài)Session和無(wú)狀態(tài)Session,看結(jié)果有什么不同。

三、實(shí)現(xiàn)步驟

1、項(xiàng)目結(jié)構(gòu)說(shuō)明

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;
    /**
     * 計(jì)數(shù)
     */
    private Integer cnt;
}

就是一個(gè)普通的java對(duì)象。

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" 表示無(wú)狀態(tài)的session
        -->
        <ksession name="stateless-session" default="false" type="stateless"/>
    </kbase>
</kmodule>

此處需要注意ksessiontype的值,無(wú)狀態(tài)Session和有狀態(tài)Session的值不一致,不寫type,默認(rèn)就是有狀態(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)存中同時(shí)存在 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運(yùn)行結(jié)果

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

7、Stateless Session運(yùn)行結(jié)果

無(wú)狀態(tài)的Session,因?yàn)闀?huì)丟失Session的數(shù)據(jù),所以ok沒有輸出出來(lái)。

四、注意事項(xiàng)

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

到此這篇關(guān)于drools session理解的文章就介紹到這了,更多相關(guān)drools session內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java類加載器和類反射使用示例

    java類加載器和類反射使用示例

    這篇文章主要介紹了java類加載器和類反射使用示例,需要的朋友可以參考下
    2014-03-03
  • java 迭代器模式實(shí)例詳解

    java 迭代器模式實(shí)例詳解

    這篇文章主要介紹了java 迭代器模式實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Java基礎(chǔ):流Stream詳解

    Java基礎(chǔ):流Stream詳解

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列。這篇文章主要介紹了Java8新特性Stream流的相關(guān)資料,需要的朋友參考下吧
    2021-09-09
  • Java8新特性之lambda(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    Java8新特性之lambda(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)

    這篇文章主要介紹了Java8新特性之lambda(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)表達(dá)式的相關(guān)知識(shí),包括lambda語(yǔ)法方面的知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-06-06
  • hdfs集成springboot使用方法

    hdfs集成springboot使用方法

    這篇文章主要介紹了hdfs集成springboot使用,配置Configuration信息分為兩種方式,每種方式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Java利用蒙特卡洛方法求解圓周率π值

    Java利用蒙特卡洛方法求解圓周率π值

    蒙特·卡羅方法(Monte Carlo method),也稱統(tǒng)計(jì)模擬方法,是一種以概率統(tǒng)計(jì)理論為基礎(chǔ)的數(shù)值計(jì)算方法。本文將利用該方法實(shí)現(xiàn)圓周率的計(jì)算,需要的可以參考一下
    2022-08-08
  • Java反射機(jī)制及Method.invoke詳解

    Java反射機(jī)制及Method.invoke詳解

    這篇文章主要介紹了Java反射機(jī)制及Method.invoke詳解,本文講解了JAVA反射機(jī)制、得到某個(gè)對(duì)象的屬性、得到某個(gè)類的靜態(tài)屬性、執(zhí)行某對(duì)象的方法、執(zhí)行某個(gè)類的靜態(tài)方法等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié)

    詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié)

    這篇文章主要介紹了詳解Maven項(xiàng)目缺少M(fèi)aven Dependencies解決方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • JAVA泛型的繼承和實(shí)現(xiàn)、擦除原理解析

    JAVA泛型的繼承和實(shí)現(xiàn)、擦除原理解析

    這篇文章主要介紹了JAVA泛型的繼承和實(shí)現(xiàn)、擦除原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 通過(guò)Spring Boot配置動(dòng)態(tài)數(shù)據(jù)源訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼

    通過(guò)Spring Boot配置動(dòng)態(tài)數(shù)據(jù)源訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了通過(guò)Spring Boot配置動(dòng)態(tài)數(shù)據(jù)源訪問(wèn)多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2018-03-03

最新評(píng)論

天水市| 济阳县| 车致| 渝中区| 嵊泗县| 万山特区| 陆丰市| 都兰县| 大同县| 鲁山县| 东至县| 扎兰屯市| 盖州市| 曲麻莱县| 通渭县| 遂川县| 集安市| 莆田市| 太仆寺旗| 长子县| 昌吉市| 石狮市| 南溪县| 常熟市| 罗甸县| 仲巴县| 金溪县| 安达市| 滁州市| 古丈县| 景泰县| 吴桥县| 安化县| 大新县| 贡觉县| 湟中县| 清徐县| 汽车| 新民市| 十堰市| 永定县|