在搭建Drools开发环境中我们接触了几个Drools的API,例如:

  • KieServices
  • KieContainer
  • KieSession

还有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例子就是生命周期中的测试、使用、执行等部分

API概述

了解了Kie是什么之后,现在回头看看我们用到的API

KieServices

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

KieRepository

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

KieContainer

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

KieProject

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

ClasspathKieProject

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

KieBase

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

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)

kmodule.xml中的属性

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

kbase的属性

属性名 默认值 合法的值 描述
name none any KieBase的名称,必须设置
includes none 逗号分隔的KieBase名称列表 意味着该KieBase会包含所有include的KieBase的rule等文件
packages all 逗号分隔的字符串列表 默认情况下将包含resources目录下面(子目录)的所有规则文件,也可以指定具体目录下面的规则文件
default false true, false 表示当前KieBase是不是默认的,如果是默认的话,不用名称就可以查找到该KieBase,但是每一个module最多只能有一个KieBase
equalsBehavior identity identity, equality 判断Working Memory中对象相等的依据,identity可以理解为用==判断;equality就是通过Fact对象的equals方法来判断

ksession的属性

属性名 默认值 合法的值 描述
name none any KieSession的名称,该值必须唯一,必须设置
type stateful stateful, stateless 定义该session到底是有状态的还是无状态的,有状态的session可以利用Working Memory执行多次,而无状态的则只能执行一次
default false true, false 定义该session是否是默认的,如果是默认的话则可以不用通过session的name来创建session,在同一个module中最多只能有一个默认的session

参考:

Drools官方文档
KIE JAVA API
Drools入门系列

作者:@小黑

Drools KIE API相关推荐

  1. drools kie框架测试工程

    drools kie框架测试工程 目录 工程配置文件 测试代码 源码 目录 │ .gitignore │ pom.xml │ README.md │ ├─.idea │ workspace.xml │ ...

  2. drools-kie API 和kmodule.xml 文件详解

    本文结构 1. 什么是KIE? 2. kieServices和kieContainer 3. 然后逐个介绍这些对象 4. kmodule.xml 1. 什么是KIE? KIE是jBoss里面一些相关项 ...

  3. drools 7.x KIE API解析

    https://blog.csdn.net/wo541075754/article/details/75004575 http://dyingbleed.com/drools-2/

  4. java development kie_java – 直接从存储库加载Drools/KIE Workbench工件

    我们尝试使用全新的KIE工作台(以前称为Guvnor)和新的基于maven的工件切换到Drools 6. 现在,我想在第二个映像("部署")中使用this blog post中描述 ...

  5. 虚拟化 半虚拟化 全虚拟化_我的虚拟实习经历

    虚拟化 半虚拟化 全虚拟化 Expedia Group Technology -软件 (EXPEDIA GROUP TECHNOLOGY - SOFTWARE) This summer, I inte ...

  6. Drools从入门到精通之KIE

    KIE即Knowledge Is EveryThing的缩写 KIE包含以下不同但相关的项目,为业务自动化和管理提供完整的解决方案组合: Drools是一个业务规则管理系统,具有前向链接和后向链接推理 ...

  7. jboss规则引擎KIE Drools 6.3.0 Final 教程(2)

    使用JAVA程序调用规则-运行KIE-DROOLS上的规则 第一步:建立一个MAVEN的Java工程 POM.XML 给出pom.xml文件 <project xmlns="http: ...

  8. 关于Drools:kie引擎的rest接口调用学习笔记

    1. 想要调用rest接口,先准备Docker环境,参考官网安装教程或菜鸟教程. 2. workbench的安装: 1)打开Windows PowerShell 2)输入以下命令,从镜像仓库拉取dro ...

  9. jboss规则引擎KIE Drools 6.3.0 Final 教程(1)

    前言 目前世面上中文的KIE DROOLS Workbench(JBOSS BRMS)的教程几乎没有,有的也只有灵灵碎碎的使用机器来翻译的(翻的不知所云)或者是基于老版本的JBOSS Guvnor即5 ...

最新文章

  1. python基于值得内存_为什么说Python采用的是基于值的内存管理模式
  2. R语言基于多字段(多数据列、multiple columns)对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案
  3. NanoID 了解一下?比 UUID 更好用!
  4. ActiveMQ入门案例-生产者代码实现
  5. Table Controls in ABAP Programs
  6. 李宏毅老师机器学习和深度学习
  7. 2075. 解码斜向换位密码
  8. app+java_‎App Store 上的“Java大全”
  9. linux系统安装并配置oracle客户端
  10. 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)
  11. html如何把三个按键放一起_winkawaks使用手柄按键玩游戏的教程-winkawaks街机模拟器用手柄攻略...
  12. android 可拖拽View的简单实现
  13. 介绍一下python getopt 模块
  14. 在Linux环境下安装JDK+JBoss
  15. 【Java与智能设备】用户界面基础
  16. 关于DNF的多媒体包NPK文件的那些事儿(5)- IMG文件里的指向型索引项(指向帧)的深度与有向环检测
  17. CentOS7安装搜狗输入法
  18. 软件测试工程师笔试题目
  19. 北京邮电大学计算机考研难,北京邮电大学(专业学位)计算机技术考研难吗
  20. 4000倍的资本效率提升,Uniswap V3 将如何实现?

热门文章

  1. jsvascript === 和==的区别
  2. 《VS面向对象及可视化设计 》文本操作实例5-1
  3. vue 2.0系列QQ音乐播放器案例
  4. 【ExpandTabView】Android 仿大众,美团下拉菜单ExpandTabView
  5. 【linuxs make 出现undefined reference to ‘std::__cxx11...】
  6. 高级软件工程第六次作业:“希希敬敬对”团队作业-3
  7. 关于SSD寿命问题的探讨
  8. google reader 和 抓虾
  9. 线程之插队(join方法)
  10. springBoot打jar包遇到的麻烦