日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

规则引擎Drools使用 第二篇Drools规则引擎介绍

發布時間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 规则引擎Drools使用 第二篇Drools规则引擎介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?Drools規則引擎介紹

? ? ? drools是一款由JBoss組織提供的基于Java語言開發的開源規則引擎,可以將復雜且多變的業務規則從硬編碼中解放出來,以規則腳本的形式存放在文件或特定的存儲介質中(例如存放在數據庫中),使得業務規則的變更不需要修改項目代碼、重啟服務器就可以在線上環境立即生效。

drools官網地址:https://drools.org/

drools源碼下載地址:https://github.com/kiegroup/drools?Drools規則主要組成

drools API開發步驟

了解認識下drools API開發的幾個接口

KieServices?
該接口提供了很多方法,可以通過這些方法訪問KIE關于構建和運行的相關對象,比如說可以獲取KieContainer,利用KieContainer來訪問KBase和KSession等信息;

可以獲取KieRepository對象,利用KieRepository來管理KieModule等。?
KieServices就是一個中心,通過它來獲取的各種對象來完成規則構建、管理和執行等操作。

KieContainer

KieContainer可以理解為是一個KieBase的容器。

KieBase?
KieBase可以理解為是一個知識倉庫,包含了若干的規則、流程、方法等,在Drools中主要就是規則和方法,KieBase本身并不包含運行時的數據之類的,如果需要執行規則KieBase中的規則的話,就需要根據KieBase創建KieSession。


KieSession
KieSession就是一個跟Drools引擎打交道的會話,其基于KieBase創建,它會包含運行時數據,包含“事實 Fact”,并對運行時數據事實進行規則運算。我們通過KieContainer創建KieSession是一種較為方便的做法,其實他本質上是從KieBase中創建出來


KieRepository?
KieRepository是一個單例對象,它是一個存放KieModule的倉庫,KieModule由kmodule.xml文件定義(當然不僅僅只是用它來定義)。..

KieProject?
KieContainer通過KieProject來初始化、構造KieModule,并將KieModule存放到KieRepository中,然后KieContainer可以通過KieProject來查找KieModule定義的信息,并根據這些信息構造KieBase和KieSession。

ClasspathKieProject?
ClasspathKieProject實現了KieProject接口,它提供了根據類路徑中的META-INF/kmodule.xml文件構造KieModule的能力,也就是我們能夠基于Maven構造Drools組件的基本保障之一。
?

規則引擎構成

drools規則引擎由以下三部分構成:

Working Memory(工作內存)
Rule Base(規則庫)
Inference Engine(推理引擎)
其中Inference Engine(推理引擎)又包括:

Pattern Matcher(匹配器)
Agenda(議程)
Execution Engine(執行引擎)

相關概念說明

Working Memory:工作內存,drools規則引擎會從Working Memory中獲取數據并和規則文件中定義的規則進行模式匹配,所以我們開發的應用程序只需要將我們的數據插入到Working Memory中即可,例如本案例中我們調用kieSession.insert(order)就是將order對象插入到了工作內存中。

Fact:事實,是指在drools 規則應用當中,將一個普通的JavaBean插入到Working Memory后的對象就是Fact對象,例如本案例中的Order對象就屬于Fact對象。Fact對象是我們的應用和規則引擎進行數據交互的橋梁或通道。

Rule Base:規則庫,我們在規則文件中定義的規則都會被加載到規則庫中。

Pattern Matcher:匹配器,將Rule Base中的所有規則與Working Memory中的Fact對象進行模式匹配,匹配成功的規則將被激活并放入Agenda中。

Agenda:議程,用于存放通過匹配器進行模式匹配后被激活的規則。

Execution Engine:執行引擎,執行Agenda中被激活的規則。

?規則引擎執行過程

KIE介紹

我們在操作Drools時經常使用的API以及它們之間的關系如下圖:

通過上面的核心API可以發現,大部分類名都是以Kie開頭。Kie全稱為Knowledge Is Everything,即"知識就是一切"的縮寫,是Jboss一系列項目的總稱。如下圖所示,Kie的主要模塊有OptaPlanner、Drools、UberFire、jBPM。?

?通過上圖可以看到,Drools是整個KIE項目中的一個組件,Drools中還包括一個Drools-WB的模塊,它是一個可視化的規則編輯器。

深入了解下Kie系列

KieServices 是一個接口,我們通過KieServices.Factory.get()來獲取 static class Factory {public Factory() { /* compiled code */ }public static org.kie.api.KieServices get() { /* compiled code */ }private static class LazyHolder {private static org.kie.api.KieServices INSTANCE;private LazyHolder() { /* compiled code */ }} }

KieServices 幾個重要方法:

public org.kie.api.builder.KieRepository getRepository() public org.kie.api.runtime.KieContainer getKieClasspathContainer() public org.kie.api.runtime.KieContainer getKieClasspathContainer(java.lang.ClassLoader classLoader) public org.kie.api.runtime.KieContainer getKieClasspathContainer(java.lang.String containerId, java.lang.ClassLoader classLoader) public org.kie.api.runtime.KieContainer newKieClasspathContainer() public org.kie.api.runtime.KieContainer newKieClasspathContainer(java.lang.String containerId) public org.kie.api.builder.KieBuilder newKieBuilder(java.io.File file) public org.kie.api.builder.KieBuilder newKieBuilder(org.kie.api.builder.KieFileSystem kieFileSystem) public org.kie.api.io.KieResources getResources() public org.kie.api.builder.KieFileSystem newKieFileSystem() public org.kie.api.builder.model.KieModuleModel newKieModuleModel()

?KieContainer

org.kie.api.KieBase getKieBase();org.kie.api.KieBase getKieBase(java.lang.String s); void dispose(); org.kie.api.runtime.KieSession newKieSession(); org.kie.api.KieBase newKieBase(java.lang.String s, org.kie.api.KieBaseConfiguration kieBaseConfiguration); org.kie.api.runtime.KieSession newKieSession(java.lang.String s); org.kie.api.runtime.StatelessKieSession newStatelessKieSession(); org.kie.api.runtime.StatelessKieSession newStatelessKieSession(java.lang.String s); org.kie.api.runtime.KieSessionConfiguration getKieSessionConfiguration();

KieRepository org.kie.api.builder.ReleaseId getDefaultReleaseId(); void addKieModule(org.kie.api.builder.KieModule kieModule);

KieBase org.kie.api.definition.KiePackage getKiePackage(java.lang.String s); void removeKiePackage(java.lang.String s); org.kie.api.definition.rule.Rule getRule(java.lang.String s, java.lang.String s1); void removeRule(java.lang.String s, java.lang.String s1); org.kie.api.runtime.KieSession newKieSession(); org.kie.api.runtime.KieSession newKieSession(org.kie.api.runtime.KieSessionConfiguration kieSessionConfiguration, org.kie.api.runtime.Environment environment); org.kie.api.runtime.StatelessKieSession newStatelessKieSession();

kieSession

void dispose();

?<T> T getKieRuntime(java.lang.Class<T> aClass);

總結

以上是生活随笔為你收集整理的规则引擎Drools使用 第二篇Drools规则引擎介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。