Drools規則編寫


如果有在看Hello World專案(Sample.drl)的預設規則,也有很多使用的關鍵字,我們現在將一個一個地來解釋。

Default Rule

 

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.

下圖說明了過程

KnoledgeBuilder

在上面的例子中,因為我們正在採取無狀態對談知識的一個簡單的例子,我們已經插入了事實的對談,然後fireAllRules()方法被呼叫,你會看到輸出結果。

如果有狀態對談的知識,一旦規則被激發,有狀態的知識對談物件必須呼叫方法Dispose()釋放對談以避免記憶體洩漏。