在有些術語使用的時候,我有時候會用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工程結構組織我們的規則檔案或流程檔案,我們就能夠隻用很少的代碼完成模型的加載和建構