【java規則引擎】drools6.5.0版本中kmodule.xml解析

Love Lenka發表於2017-07-04

kmodule.xml檔案存放在src/main/resources/META-INF/資料夾下。

1 <?xml version="1.0" encoding="UTF-8"?>
2 <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
3     <kbase name="rules" packages="rules">
4         <ksession name="ksession-rules"/>
5     </kbase>
6     <kbase name="dtables" packages="dtables">
7         <ksession name="ksession-dtables"/>
8     </kbase>
9 </kmodule>
View Code

這個kmodule.xml的檔案的定義非常簡單,其實也很容易理解:

  • 一個kmodule裡面包含了兩個kbase,這個也是我們這個例子裡面的兩個用例,分別對應drl規則檔案的例子,一個是對應Excel表格的規則例子。
  • 每一個kbase都有一個name,可以取任意字串,但是不能重名。
  • 然後都有一個packages,可以看到packages裡面的字串其實就是src/main/resources下面的資料夾的名稱,或者叫包名,規則引擎會根據這裡定義的包來查詢規則定義檔案。可以同時定義多個包,以逗號分隔開來就行。
  • 每一個kbase下面可以包含多個ksession,當然本例中都自定義了一個。
  • 每一個ksession都有一個name,名字也可以是任意字串,但是也不能重複。
  • kbase和ksession裡面的name屬性是全域性不能重複的。
  • kbase和ksession中其實還有很多其它的屬性,但是在這裡不是很重要,就先不提了,後面我們會一一講解的。

 

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 這個屬性暫時不用理會,在後面的CEP(Complex Event Processing:複合事件處理)章節會學習到。
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, jtms, defeasible 暫時還沒有搞清楚,等搞清楚之後再說.

相關文章