Drools KIE API

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/51007446 在搭建D...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/51007446

搭建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入门系列

作者:@小黑

相关文章
|
缓存 Java 测试技术
Drools:第3章 3.2 KIE API解析
Drools:第3章 3.2 KIE API解析
440 0
Drools:第3章 3.2 KIE API解析
|
缓存 Java 测试技术
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
356 0
《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE API解析
|
14天前
|
缓存 前端开发 API
API接口封装系列
API(Application Programming Interface)接口封装是将系统内部的功能封装成可复用的程序接口并向外部提供,以便其他系统调用和使用这些功能,通过这种方式实现系统之间的通信和协作。下面将介绍API接口封装的一些关键步骤和注意事项。
|
21天前
|
监控 前端开发 JavaScript
实战篇:商品API接口在跨平台销售中的有效运用与案例解析
随着电子商务的蓬勃发展,企业为了扩大市场覆盖面,经常需要在多个在线平台上展示和销售产品。然而,手工管理多个平台的库存、价格、商品描述等信息既耗时又容易出错。商品API接口在这一背景下显得尤为重要,它能够帮助企业在不同的销售平台之间实现商品信息的高效同步和管理。本文将通过具体的淘宝API接口使用案例,展示如何在跨平台销售中有效利用商品API接口,以及如何通过代码实现数据的统一管理。
|
1月前
|
安全 算法 API
产品经理必备知识——API接口
前言 在古代,我们的传输信息的方式有很多,比如写信、飞鸽传书,以及在战争中使用的烽烟,才有了著名的烽火戏诸侯,但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代,我通过一部手机就可以实现衣食住行的方方面面,比如:在家购物、远程控制家电、自动驾驶等等,背后都离不开我们今天要聊的API接口。
|
1月前
|
数据采集 JSON API
如何实现高效率超简洁的实时数据采集?——Python实战电商数据采集API接口
你是否曾为获取重要数据而感到困扰?是否因为数据封锁而无法获取所需信息?是否因为数据格式混乱而头疼?现在,所有这些问题都可以迎刃而解。让我为大家介绍一款强大的数据采集API接口。
|
1月前
|
安全 API 数据安全/隐私保护
API接口知识小结
应用程序接口API(Application Programming Interface),是提供特定业务输出能力、连接不同系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不同系统之间的交互点。包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口、同级接口。
|
1天前
|
Java API Android开发
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
[NDK/JNI系列04] JNI接口方法表、基础API与异常API
6 0
|
4天前
|
XML JSON API
快速淘宝商品详情页面API接口传输 php
PI(Application Programming Interface,应用程序接口)是一组预定义的函数、协议和工具,用于构建软件应用程序之间的交互。它允许不同的软件系统和应用通过统一的接口进行数据交换和通信
|
8天前
|
人工智能 API 开发者
免费使用Kimi的API接口,kimi-free-api真香
今年AI应用兴起,各类智能体涌现,但API免费额度有限。为解决这一问题,GitHub上的[kimi-free-api](https://github.com/LLM-Red-Team/kimi-free-api)项目提供了方便,支持高速流式输出、多轮对话等,与ChatGPT接口兼容。此外,还有其他大模型的免费API转换项目,如跃问StepChat、阿里通义Qwen等。该项目可帮助用户免费体验,通过Docker-compose轻松部署。只需获取refresh_token,即可开始使用。这个开源项目促进了AI学习和开发,为探索AI潜力提供了新途径。
202 2