轉載:https://blog.csdn.net/wo541075754/article/details/74943236
3.2.1 什么是KIE
KIE(Knowledge Is Everything),知識就是一切的簡稱。JBoss一系列項目的總稱,在《Drools使用概述》章節已經介紹了KIE包含的大部分項目。它們之間有一定的關聯,通用一些API。比如涉及到構建(building)、部署(deploying)和加載(loading)等方面都會以KIE作為前綴來表示這些是通用的API。
下圖為KIE所包含的子項目結構圖:
3.2.2 KIE生命周期
無論是Drools還是JBPM,生命周期都包含以下部分:
編寫:編寫規則文件,比如:DRL,BPMN2、決策表、實體類等。
構建:構建一個可以發布部署的組件,對於KIE來說是JAR文件。
測試:部署之前對規則進行測試。
部署:利用Maven倉庫將jar部署到應用程序。
使用:程序加載jar文件,通過KieContainer對其進行解析創建KieSession。
執行:通過KieSession對象的API與Drools引擎進行交互,執行規則。
交互:用戶通過命令行或者UI與引擎進行交互。
管理:管理KieSession或者KieContainer對象。
3.2.3 FACT對象
Fact對象是指在使用Drools 規則時,將一個普通的JavaBean對象插入到規則引擎的 WorkingMemory當中的對象。規則可以對Fact對象進行任意的讀寫操作。Fact對象不是對原來的JavaBean對象進行Clone,而是使用傳入的JavaBean對象的引用。規則在進行計算時需要的應用系統數據設置在Fact對象當中,這樣規則就可以通過對Fact對象數據的讀寫實現對應用數據的讀寫操作。
Fact對象通常是一個具有getter和setter方法的POJO對象,通過getter和setter方法可以方便的實現對Fact對象的讀寫操作,所以我們可以簡單的把 Fact 對象理解為規則與應用系統數據交互的橋梁或通道。
當Fact對象插入到WorkingMemory當中后,會與當前WorkingMemory當中所有的規則進行匹配,同時返回一個FactHandler對象。FactHandler對象是插入到WorkingMemory當中Fact對象的引用句柄,通過FactHandler對象可以實現對Fact對象的刪除及修改等操作。
前面的實例中通過調用insert方法將Product對象插入到WorkingMemory當中,Product對象插入到規則中之后就是說為的FACT對象。如果需要插入多個FACT對象,多次調用insert方法,並傳入對應FACT對象即可。