【java規則引擎】drools6.5.0版本api簡介

Love Lenka發表於2017-07-04

在有些術語使用的時候,我有時候會用KIE專案、KIE引擎或者Drools專案、Drools引擎,大家應該理解KIE是Drools等專案的一個統稱,所以在大多數情況下KIE或者特指Drools都是差不多的。

現在我們開始瞭解KIE的相關API,在這個helloworld例子中,我們接觸過如下這些類和介面:

我們通過KieServices物件得到一個KieContainer,然後KieContainer根據session name來新建一個KieSession,最後通過KieSession來執行規則。

KieServices:

該介面提供了很多方法,可以通過這些方法訪問KIE關於構建和執行的相關物件,比如說可以獲取KieContainer,利用 KieContainer來訪問KBase和KSession等資訊;可以獲取KieRepository物件,利用KieRepository來管理 KieModule等。

KieServices就是一箇中心,通過它來獲取的各種物件來完成規則構建、管理和執行等操作。

KieContainer:

可以理解KieContainer就是一個KieBase的容器,KieBase是什麼呢?

KieBase:

KieBase就是一個知識倉庫,包含了若干的規則、流程、方法等,在Drools中主要就是規則和方法,KieBase本身並不包含執行時的資料之類的,如果需要執行規則KieBase中的規則的話,就需要根據KieBase建立KieSession。

KieSession:

KieSession就是一個跟Drools引擎打交道的會話,其基於KieBase建立,它會包含執行時資料,包含“事實 Fact”,並對執行時資料事實進行規則運算。我們通過KieContainer建立KieSession是一種較為方便的做法,其實他本質上是從 KieBase中建立出來。的。

KieSession就是應用程式跟規則引擎進行互動的會話通道。

建立KieBase是一個成本非常高的事情,KieBase會建立知識(規則、流程)倉庫,而建立KieSession則是一個成本非常低的事情,所以KieBase會建立快取,而KieSession則不必。

較為完善的類關係如下:

KieRepository:

KieRepository是一個單例物件,它是一個存放KieModule的倉庫,KieModule由kmodule.xml檔案定義(當然不僅僅只是用它來定義)。

KieProject:

KieContainer通過KieProject來初始化、構造KieModule,並將KieModule存放到 KieRepository中,然後KieContainer可以通過KieProject來查詢KieModule定義的資訊,並根據這些資訊構造 KieBase和KieSession。

ClasspathKieProject:

ClasspathKieProject實現了KieProject介面,它提供了根據類路徑中的META-INF/kmodule.xml檔案構造KieModule的能力,也就是我們能夠基於Maven構造Drools元件的基本保障之一。

意味著只要我們按照前面提到過的Maven工程結構組織我們的規則檔案或流程檔案,我們就能夠只用很少的程式碼完成模型的載入和構建

相關文章