Drools規則編寫
如果有在看Hello World項目(Sample.drl)的默認規則,也有很多使用的關鍵字,我們現在將一個一個地來解釋。
-
包: 每一個規則開始包的名稱。包充當規則命名空間。包內的規則名稱必須是唯一的。在規則中包類似於Java包。
-
Import語句: 要應用規則的任何fact,這些fact都需要導入。例如,com.sample.DroolsTest.Message; 在上麵的例子。
-
規則定義: 它由規則名稱,條件和後果。 Drools的關鍵字:rule, when, then, 以及 end. 在上述的例子中,規則名 “Hello World” 和 “GoodBye”. when 部分是兩個規則中的條件,then 部分是後果.在規則的術語, when 部分也被稱為LHS(左手側)以及 then 部分作為規則的RHS(右手邊)。
現在讓我們來看看在用於裝載的Drools並執行規則的Java文件中使用的術語。
知識庫
知識庫是管理規則,流程,和內部類型的集合的接口. 它包含在包 org.drools.KnowledgeBase 內. 在Drools中,這些被統稱為knowledge definitions 或 knowledge. 知識定義被分成 knowledge packages. 知識的定義可以被添加或刪除. 知識庫的主要目的是為存儲和重新使用它們,因為它們的創建是昂貴的。知識庫提供了創造知識的會話方法。
知識會話
知識會話從知識庫檢索。它是用於與Drools的引擎進行交互的主要接口。知識會話有兩種類型:
- 無狀態知識會話
- 有狀態知識會話
無狀態會話知識
無狀態會話知識是一個無狀態的會話,形成最簡單的使用情況,不會利用推斷。一個無狀態的會話可以被稱為像一個函數,它傳遞了一些數據,然後將接收回來了一定的成效。無狀態會話的常見例子包括:
-
驗證
- 這個人有資格獲得抵押貸款?
-
計算
- 計算按揭保險費。
-
路由和過濾
- 過濾傳入的消息,如電子郵件,到文件夾中。
- 發送傳入的消息到目的地
狀態知識會話
狀態會話更長保留,並允許隨著時間的推移反複變化。一些常見的用例有狀態會話包括:
-
監控
- 現貨市場監測和分析半自動買盤。
-
診斷
- 故障排除,醫療診斷
-
物流
- 包裹跟蹤和交付供應
知識生成器
KnoledgeBuilder接口負責構建從知識的定義(規則,流程,類型)一個KnowledgePackage。它包含在 org.drools.builder.KnowledgeBuilder 包內. 知識的定義可以是各種格式。如果使用構建有任何問題,KnowledgeBuilder將報告通過這兩種方法的錯誤: hasErrors 以及 getError.
下圖說明了過程
在上麵的例子中,因為我們正在采取無狀態會話知識的一個簡單的例子,我們已經插入了事實的會話,然後fireAllRules()方法被調用,你會看到輸出結果。
如果有狀態會話的知識,一旦規則被激發,有狀態的知識會話對象必須調用方法Dispose()釋放會話以避免內存泄漏。