【java規則引擎】《Drools7.0.0.Final規則引擎教程》第3章 3.2 KIE API解析


轉載至:https://blog.csdn.net/wo541075754/article/details/75004575

3.2.4 KieServices

該接口提供了很多方法,可以通過這些方法訪問KIE關於構建和運行的相關對象,比如說可以獲取KieContainer,利用KieContainer來訪問KBase和KSession等信息;可以獲取KieRepository對象,利用KieRepository來管理KieModule等。 
KieServices就是一個中心,通過它來獲取的各種對象來完成規則構建、管理和執行等操作。 
示例demo:

// 通過單例創建KieServices
KieServices kieServices = KieServices.Factory.get();
// 獲取KieContainer
KieContainer kieContainer = kieServices.getKieClasspathContainer();
// 獲取KieRepository
KieRepository kieRepository = kieServices.getRepository();
View Code

3.2.5 KieContainer

可以理解KieContainer就是一個KieBase的容器。提供了獲取KieBase的方法和創建KieSession的方法。其中獲取KieSession的方法內部依舊通過KieBase來創建KieSession。

// 通過單例創建KieServices
KieServices kieServices = KieServices.Factory.get();
// 獲取KieContainer
KieContainer kieContainer = kieServices.getKieClasspathContainer();

// 獲取KieBase
KieBase kieBase = kieContainer.getKieBase();
// 創建KieSession
KieSession kieSession = kieContainer.newKieSession("session-name");
View Code

3.2.6 KieBase

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

// 獲取KieBase
KieBase kieBase = kieContainer.getKieBase();
KieSession kieSession = kieBase.newKieSession();
StatelessKieSession statelessKieSession = kieBase.newStatelessKieSession();
View Code

3.2.7 KieSession

KieSession就是一個跟Drools引擎打交道的會話,其基於KieBase創建,它會包含運行時數據,包含“事實Fact”,並對運行時數據實時進行規則運算。通過KieContainer創建KieSession是一種較為方便的做法,其本質上是從KieBase中創建出來的。KieSession就是應用程序跟規則引擎進行交互的會話通道。 
創建KieBase是一個成本非常高的事情,KieBase會建立知識(規則、流程)倉庫,而創建KieSession則是一個成本非常低的事情,所以KieBase會建立緩存,而KieSession則不必。 

3.2.8 KieRepository

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

/ 通過單例創建KieServices
KieServices kieServices = KieServices.Factory.get();
// 獲取KieRepository
KieRepository kieRepository = kieServices.getRepository();
View Code

3.2.9 KieProject

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

3.2.10 ClasspathKieProject

ClasspathKieProject實現了KieProject接口,它提供了根據類路徑中的META-INF/kmodule.xml文件構造KieModule的能力,是基於Maven構造Drools組件的基本保障之一。意味着只要按照前面提到過的Maven工程結構組織我們的規則文件或流程文件,只用很少的代碼完成模型的加載和構建。

3.2.11 kmodule.xml

kmodule的簡單配置規則在上面的實例中已經簡單介紹,下面具體介紹具體的配置。

kbase的屬性:

屬性名 默認值 合法的值 描述
name none any KieBase的名稱,這個屬性是強制的,必須設置。
includes none 逗號分隔的KieBase名稱列表 意味着本KieBase將會包含所有include的KieBase的rule、process定義制品文件。非強制屬性。
packages all 逗號分隔的字符串列表 默認情況下將包含resources目錄下面(子目錄)的所有規則文件。也可以指定具體目錄下面的規則文件,通過逗號可以包含多個目錄下的文件。
default false true, false 表示當前KieBase是不是默認的,如果是默認的話,不用名稱就可以查找到該KieBase,但是每一個module最多只能有一個KieBase。
equalsBehavior identity identity,equality 顧名思義就是定義“equals”(等於)的行為,這個equals是針對Fact(事實)的,當插入一個Fact到Working Memory中的時候,Drools引擎會檢查該Fact是否已經存在,如果存在的話就使用已有的FactHandle,否則就創建新的。而判斷Fact是否存在的依據通過該屬性定義的方式來進行的:設置成 identity,就是判斷對象是否存在,可以理解為用==判斷,看是否是同一個對象; 如果該屬性設置成 equality的話,就是通過Fact對象的equals方法來判斷。
eventProcessingMode cloud cloud, stream 當以雲模式編譯時,KieBase將事件視為正常事實,而在流模式下允許對其進行時間推理。
declarativeAgenda disabled disabled,enabled 這是一個高級功能開關,打開后規則將可以控制一些規則的執行與否。

 
        

ksession的屬性:

屬性名 默認值 合法的值 描述
name none any KieSession的名稱,該值必須唯一,也是強制的,必須設置。
type stateful stateful, stateless 定義該session到底是有狀態(stateful)的還是無狀態(stateless)的,有狀態的session可以利用Working Memory執行多次,而無狀態的則只能執行一次。
default false true, false 定義該session是否是默認的,如果是默認的話則可以不用通過session的name來創建session,在同一個module中最多只能有一個默認的session。
clockType realtime realtime,pseudo 定義時鍾類型,用在事件處理上面,在復合事件處理上會用到,其中realtime表示用的是系統時鍾,而pseudo則是用在單元測試時模擬用的。
beliefSystem simple simple,defeasible, jtms 定義KieSession使用的belief System的類型。

 

 

 



 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM