鍍金池/ 教程/ Java/ Drools規(guī)則編寫
Drools規(guī)則語法
Drools調(diào)試
Drools常用術(shù)語
創(chuàng)建Drools程序(入門)
Drools教程
Drools規(guī)則編寫
Drools Eclipse插件
Drools運(yùn)行時(shí)
Drools簡(jiǎn)單項(xiàng)目

Drools規(guī)則編寫

如果有在看Hello World項(xiàng)目(Sample.drl)的默認(rèn)規(guī)則,也有很多使用的關(guān)鍵字,我們現(xiàn)在將一個(gè)一個(gè)地來解釋。

Default Rule

 

Sample.drl
  • 包: 每一個(gè)規(guī)則開始包的名稱。包充當(dāng)規(guī)則命名空間。包內(nèi)的規(guī)則名稱必須是唯一的。在規(guī)則中包類似于Java包。

  • Import語句: 要應(yīng)用規(guī)則的任何fact,這些fact都需要導(dǎo)入。例如,com.sample.DroolsTest.Message; 在上面的例子。

  • 規(guī)則定義: 它由規(guī)則名稱,條件和后果。 Drools的關(guān)鍵字:rule, when, then, 以及 end. 在上述的例子中,規(guī)則名 “Hello World” 和 “GoodBye”.  when 部分是兩個(gè)規(guī)則中的條件,then 部分是后果.在規(guī)則的術(shù)語,  when 部分也被稱為L(zhǎng)HS(左手側(cè))以及 then 部分作為規(guī)則的RHS(右手邊)。

現(xiàn)在讓我們來看看在用于裝載的Drools并執(zhí)行規(guī)則的Java文件中使用的術(shù)語。

知識(shí)庫

知識(shí)庫是管理規(guī)則,流程,和內(nèi)部類型的集合的接口. 它包含在包 org.drools.KnowledgeBase 內(nèi). 在Drools中,這些被統(tǒng)稱為knowledge definitions 或 knowledge. 知識(shí)定義被分成 knowledge packages. 知識(shí)的定義可以被添加或刪除. 知識(shí)庫的主要目的是為存儲(chǔ)和重新使用它們,因?yàn)樗鼈兊膭?chuàng)建是昂貴的。知識(shí)庫提供了創(chuàng)造知識(shí)的會(huì)話方法。

知識(shí)會(huì)話

知識(shí)會(huì)話從知識(shí)庫檢索。它是用于與Drools的引擎進(jìn)行交互的主要接口。知識(shí)會(huì)話有兩種類型:

  • 無狀態(tài)知識(shí)會(huì)話
  • 有狀態(tài)知識(shí)會(huì)話

無狀態(tài)會(huì)話知識(shí)

無狀態(tài)會(huì)話知識(shí)是一個(gè)無狀態(tài)的會(huì)話,形成最簡(jiǎn)單的使用情況,不會(huì)利用推斷。一個(gè)無狀態(tài)的會(huì)話可以被稱為像一個(gè)函數(shù),它傳遞了一些數(shù)據(jù),然后將接收回來了一定的成效。無狀態(tài)會(huì)話的常見例子包括:

  • 驗(yàn)證
    • 這個(gè)人有資格獲得抵押貸款?
  • 計(jì)算
    • 計(jì)算按揭保險(xiǎn)費(fèi)。
  • 路由和過濾
    • 過濾傳入的消息,如電子郵件,到文件夾中。
    • 發(fā)送傳入的消息到目的地

狀態(tài)知識(shí)會(huì)話

狀態(tài)會(huì)話更長(zhǎng)保留,并允許隨著時(shí)間的推移反復(fù)變化。一些常見的用例有狀態(tài)會(huì)話包括:

  • 監(jiān)控
    • 現(xiàn)貨市場(chǎng)監(jiān)測(cè)和分析半自動(dòng)買盤。
  • 診斷
    • 故障排除,醫(yī)療診斷
  • 物流
    • 包裹跟蹤和交付供應(yīng)

知識(shí)生成器

KnoledgeBuilder接口負(fù)責(zé)構(gòu)建從知識(shí)的定義(規(guī)則,流程,類型)一個(gè)KnowledgePackage。它包含在 org.drools.builder.KnowledgeBuilder 包內(nèi).  知識(shí)的定義可以是各種格式。如果使用構(gòu)建有任何問題,KnowledgeBuilder將報(bào)告通過這兩種方法的錯(cuò)誤: hasErrors 以及 getError.

下圖說明了過程

KnoledgeBuilder

在上面的例子中,因?yàn)槲覀冋诓扇o狀態(tài)會(huì)話知識(shí)的一個(gè)簡(jiǎn)單的例子,我們已經(jīng)插入了事實(shí)的會(huì)話,然后fireAllRules()方法被調(diào)用,你會(huì)看到輸出結(jié)果。

如果有狀態(tài)會(huì)話的知識(shí),一旦規(guī)則被激發(fā),有狀態(tài)的知識(shí)會(huì)話對(duì)象必須調(diào)用方法Dispose()釋放會(huì)話以避免內(nèi)存泄漏。