java development kie_【java規則引擎】drools6.5.0中kie的概論
什么是KIE?
KIE是jBoss里面一些相關項目的統稱,下圖就是KIE代表的一些項目,其中我們比較熟悉的就有jBPM和Drools。
這些項目都有一定的關聯關系,並且存在一些通用的API,比如說涉及到構建(building)、部署(deploying)和加載 (loading)等方面的,這些API就都會以KIE作為前綴來表示這些是通用的API。前面看到的一些KieServices、 KieContainer、KieSession類就都是KIE的公共API。
總的來說,就是jBoss通過KIE將jBPM和Drools等相關項目進行了一個整合,統一了他們的使用方式。像KieServices這些KIE類就是整合后的結果,在Drools中這樣使用,在jBPM里面也是這樣使用。

3、KIE項目生命周期
一個Drools應用項目其實就是一個KIE項目,KIE的生命周期其實就是Drools和jBPM這些項目的生命周期。
KIE項目生命周期包含:編寫(Author)、構建(Build)、測試(Test)、部署(Deploy)、使用(Utilize)、執行(Run)、交互(Work)、管理(Manage)。
編寫:編寫就是編寫規則文件或者流程文件;
構建:就是構建一個可以發布部署的組件,在KIE中就是構建一個jar文件;
測試:在部署到應用程序之前需要對規則或者流程進行測試;
部署:就是將jar部署到應用程序,KIE利用Maven倉庫來進行發布和部署;
使用:就是加載jar文件,並通過KieContainer對jar文件進行解析,然后創建KieSession;
執行:系統通過KieSession對象的API跟Drools引擎進行交互,執行規則或者流程;
交互:用戶通過命令行或者UI跟引擎進行交互;
管理:管理KieSession或者KieContainer對象。
4、KIE & Maven
通過前面的知識我們了解到Drools工程其實就是一個Maven工程,有着Maven工程標准的結構,然后Drools在這個基礎上也定義了一個自己的存儲結構:

drools的標准存儲結構就是在src/main/resources文件夾下面存儲規則文件(包括DRL文件和Excel文件),然后在META-INF文件夾下面創建一個kmodule.xml文件用來存儲規則定義聲明。
Drools項目最終都是打包成jar然后進行發布部署的(KIE項目生命周期提到的),這樣定義工程結構和打包發布方式的根本原因就是——Maven!

上圖描述了KIE項目(包括Drools)的打包、發布、部署過程,就是一個KIE項目按照上面定義的工程結構進行設計開發,然后通過mvn deploy命令發布到Maven倉庫,然后應用程序可以通過mvn install將發布好的jar包下載安裝到本地應用程序中,最后通過KieServices等API就可以直接使用這些發布好的規則了。
為什么我們寫的JUnit Test類里面驅動一個規則的代碼非常簡單,就是因為Drools定義了上面的一套規范,按照規范來編寫、發布、部署規則之后就可以確保以最簡單的方式來使用Drools等KIE項目。這也是慣例優於配置的一種體現。
所以我們說一個Drools項目工程就是一個Maven項目工程,或者說一個KIE項目工程就是一個Maven工程。
KIE也提供了一種策略,能夠讓應用程序在運行時,能夠動態監測Maven倉庫中Drools項目jar組件的版本更新情況,然后可以根據配置動態更新Drools發布包,實現熱插拔功能,這個是通過KieScanner API實現的。
編碼方式實現

1 public class KieFileSystemTest {2
3 @Test4 public void test() {5 KieServices kieServices = KieServices.Factory.get();6 KieResources resources = kieServices.getResources();7 KieModuleModel kieModuleModel = kieServices.newKieModuleModel();//18
9 KieBaseModel baseModel = kieModuleModel.newKieBaseModel(10 "FileSystemKBase").addPackage("rules");//211 baseModel.newKieSessionModel("FileSystemKSession");//312 KieFileSystem fileSystem = kieServices.newKieFileSystem();13
14 String xml = kieModuleModel.toXML();15 System.out.println(xml);//416 fileSystem.writeKModuleXML(xml);//517
18 fileSystem.write("src/main/resources/rules/rule.drl", resources19 .newClassPathResource("kiefilesystem/KieFileSystemTest.drl"));//620
21 KieBuilder kb = kieServices.newKieBuilder(fileSystem);22 kb.buildAll();//723 if (kb.getResults().hasMessages(Level.ERROR)) {24 throw new RuntimeException("Build Errors:\n"25 + kb.getResults().toString());26 }27 KieContainer kContainer = kieServices.newKieContainer(kieServices28 .getRepository().getDefaultReleaseId());29
30 assertNotNull(kContainer.getKieBase("FileSystemKBase"));31 KieSession kSession = kContainer.newKieSession("FileSystemKSession");32
33 kSession.fireAllRules();34 }35 }View Code
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
