1. 程式人生 > >【java規則引擎】drools6.5.0版本中kmodule.xml解析

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

excel表格 兩個 狀態 excel表 自定義 roo 暫時 指定 一次

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 暫時還沒有搞清楚,等搞清楚之後再說.

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