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里面也是这样使用。

20180110234149685019.png

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在这个基础上也定义了一个自己的存储结构:

20180110234149686973.png

drools的标准存储结构就是在src/main/resources文件夹下面存储规则文件(包括DRL文件和Excel文件),然后在META-INF文件夹下面创建一个kmodule.xml文件用来存储规则定义声明。

Drools项目最终都是打包成jar然后进行发布部署的(KIE项目生命周期提到的),这样定义工程结构和打包发布方式的根本原因就是——Maven!

20180110234149688926.png

上图描述了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实现的。

编码方式实现

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值