KIE = Knowledge is Everything

在 JBoss 定义的 knowledge 除了规则引擎 Drools 之外,还有工作流引擎 jBPM。

还会接触到一下Drools的API:KieServices、KieContainer、KieSession、KieBase、KieModule等。

还有kmodule.xml文件中的几个选项:kmodule、kbase、ksession等

Kie是什么

KIE是jBoss里面一些相关项目的统称,例如jBPM和Drools
这些项目都有一定的关联关系,并且存在一些通用的API,比如说涉及到构建(building)、部署(deploying)和加载(loading)等方面的
这些API就都会以KIE作为前缀来表示这些是通用的API
前面看到的一些KieServices、KieContainer、KieSession类就都是KIE的公共API。

Kie生命周期

Kie项目的生命周期都会包含以下几个过程:

1.编写:编写规则文件等
2.构建:构建一个可以发布部署的组件(jar文件)
3.测试:部署之前对规则进行测试
4.部署:利用Maven仓库将jar部署到应用程序
5.使用:程序中加载jar文件并通过KieContainer对jar文件进行解析创建KieSession
6.执行:通过KieSession对象的API跟Drools引擎进行交互执行规则
7.交互:用户通过命令行或者UI跟引擎进行交互
8.管理:管理KieSession或者KieContainer对象

使用Kie项目的流程就是以上生命周期的过程,之前的Hello World例子就是生命周期中的测试、使用、执行等部分。

KieServices

通过KieServices.Factory.get()方式获得,是一个单例的、线程安全的,为其他Kie工具提供服务
KieServices是Kie项目的中心,通过其可以获取的各种对象来完成规则构建、管理和执行等操作
其中有的方法分为两大类:getX()和newX(),其中,get只会返回一个对应单例对象的引用,new则会重新创建一个对象。

KieServices kieServices = KieServices.Factory.get();  

KieServices 是访问规则引擎其它服务的中心。

以创建 KieContainer 实例为例:

KieContainer kieContainer = kieServices.newKieClasspathContainer();  

KieRepository

是一个单例的存放所有KieModule的仓库,无论KieModule是存放在Maven仓库中还是动态配置的。KieModule由kmodule.xml文件定义,也可以由代码来定义。

KieModule

KieModule 是一个标准的 Java Maven 工程,包含了 pom.xmlkmodule.xml 和规则等必要资源。

KieModule 可以包含子 KieModule。

KieBase

KieBase就是一个知识仓库,包含了若干的规则、流程、方法等,但是不包含运行时的数据。

KieContainer

KieModule 及子 KieModule 所有 KieBase 的容器。从KieServices中获得,其会借助KieProject来**初始化、构造**KieModule并将放入KieRepository中是一个给定的KieModule中所有KieBase的存放容器。

获取 KieContainer 的两种方式:

  • 通过 classpath 加载规则
  • 通过 Maven GAV 加载规则(使用 KIE CI)

KieSession

KieSession就是一个跟Drools引擎打交道的会话,其基于KieBase创。KieContainer创建KieSession是一种较为方便的做法,其实他本质上是从KieBase中创建出来。

为了理解方便,我们可以将整个Kie项目看成是一个KieProject。这个KieProject包含了一个kmodule.xml文件,其中定义了kmodule、kbase和ksession等选项,可以将其看成API中对应的KieModule等工具。

要使用这个Kie项目,首先创建KieServices,通过getKieClasspathContainer方法获得KieContainer。KieContainer通过KieProject加载kmodule文件(ClasspathKieProject实现的)创建KieModule放入KieRepository。
KieContainer又可以通过KieProject到KieRepository中找到,对应的KieModule创建KieBase知识库(也就是各个规则文件中的规则)。

通过KieBase创建KieSession规则会话到规则引擎(KieContainer创建KieSession其实是通过KieBase)。

KieProject

KieContainer可以通过KieProject来**查找**KieModule定义的信息,并根据这些信息构造KieBase和KieSession。

ClasspathKieProject

ClasspathKieProject实现了KieProject接口,它提供了根据类路径中的META-INF/kmodule.xml文件构造KieModule的能力。

kmodule.xml中的属性

该文件中的每个选项都有很多属性,列出几个常用属性作为参考。

kbase的属性

Drools规则引擎KIE相关API插图

ksession的属性

Drools规则引擎KIE相关API插图1


Drools规则引擎KIE相关API插图2

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2021/03/21/drools-kie-api/