Drools - 規則編寫



如果您檢視 HelloWorld 專案 (Sample.drl) 中編寫的預設規則,會發現使用了許多關鍵字,我們現在將對其進行解釋。

Default Rule

Sample.drl

  • 包 (Package) − 每條規則都以包名開頭。包充當規則的名稱空間。同一個包內的規則名稱必須唯一。規則中的包類似於 Java 中的包。

  • 匯入語句 (Import statement) − 您想要應用規則的任何事實都需要匯入。例如,以上示例中的 com.sample.DroolsTest.Message。

  • 規則定義 (Rule Definition) − 它由規則名稱、條件和結論組成。Drools 關鍵字為 rule、when、thenend。在上面的示例中,規則名稱為“Hello World”和“GoodBye”。when 部分是兩條規則中的條件,then 部分是結論。在規則術語中,when 部分也稱為 LHS(左側), then 部分也稱為 RHS(右側)。

現在讓我們來看一下用於載入 Drools 並執行規則的 Java 檔案中使用的術語。

知識庫 (Knowledge Base)

知識庫是一個介面,用於管理規則、流程和內部型別的集合。它包含在包org.drools.KnowledgeBase中。在 Drools 中,這些通常被稱為知識定義知識。知識定義分組到知識包中。可以新增或刪除知識定義。知識庫的主要目的是儲存和重用它們,因為它們的建立成本很高。知識庫提供建立知識會話的方法。

知識會話 (Knowledge Session)

知識會話是從知識庫中檢索的。它是與 Drools 引擎互動的主要介面。知識會話可以分為兩種型別:

  • 無狀態知識會話 (Stateless Knowledge Session)

  • 有狀態知識會話 (Stateful Knowledge Session)

無狀態知識會話 (Stateless Knowledge Session)

無狀態知識會話是一個無狀態會話,構成了最簡單的用例,不使用推理。無狀態會話可以像函式一樣呼叫,傳遞一些資料,然後接收一些結果。無狀態會話的常見示例包括:

  • 驗證

    • 這個人是否有資格獲得抵押貸款?

  • 計算

    • 計算抵押貸款保險費。

  • 路由和過濾

    • 將傳入的訊息(例如電子郵件)過濾到資料夾中。

    • 將傳入的訊息傳送到目標。

有狀態知識會話 (Stateful Knowledge Session)

有狀態會話生命週期更長,並允許隨著時間的推移進行迭代更改。有狀態會話的一些常見用例包括:

  • 監控

    • 股票市場監控和分析,用於半自動購買。

  • 診斷

    • 故障查詢,醫學診斷

  • 物流

    • 包裹跟蹤和交付配置

知識構建器 (Knowledge Builder)

KnowledgeBuilder 介面負責從知識定義(規則、流程、型別)構建 KnowledgePackage。它包含在包org.drools.builder.KnowledgeBuilder中。知識定義可以採用多種格式。如果構建過程中有任何問題,KnowledgeBuilder 將透過這兩種方法報告錯誤:hasErrorsgetError

下圖解釋了這個過程

KnoledgeBuilder

在上面的示例中,由於我們採用的是無狀態知識會話的簡單示例,因此我們將事實插入會話中,然後呼叫 fireAllRules() 方法,您將看到輸出。

對於有狀態知識會話,一旦規則被觸發,有狀態知識會話物件必須呼叫dispose()方法來釋放會話並避免記憶體洩漏。

廣告
© . All rights reserved.