Drools規則編寫

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

Default

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()釋放會話以避免內存泄漏。