规则引擎Drools使用 第二篇Drools规则引擎介绍

2023-11-16

 Drools规则引擎介绍

      drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中),使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效。

drools官网地址:https://drools.org/

drools源码下载地址:https://github.com/kiegroup/drools Drools规则主要组成

drools API开发步骤

了解认识下drools API开发的几个接口

KieServices 
该接口提供了很多方法,可以通过这些方法访问KIE关于构建和运行的相关对象,比如说可以获取KieContainer,利用KieContainer来访问KBase和KSession等信息;

可以获取KieRepository对象,利用KieRepository来管理KieModule等。 
KieServices就是一个中心,通过它来获取的各种对象来完成规则构建、管理和执行等操作。

KieContainer

KieContainer可以理解为是一个KieBase的容器。

KieBase 
KieBase可以理解为是一个知识仓库,包含了若干的规则、流程、方法等,在Drools中主要就是规则和方法,KieBase本身并不包含运行时的数据之类的,如果需要执行规则KieBase中的规则的话,就需要根据KieBase创建KieSession。


KieSession
KieSession就是一个跟Drools引擎打交道的会话,其基于KieBase创建,它会包含运行时数据,包含“事实 Fact”,并对运行时数据事实进行规则运算。我们通过KieContainer创建KieSession是一种较为方便的做法,其实他本质上是从KieBase中创建出来


KieRepository 
KieRepository是一个单例对象,它是一个存放KieModule的仓库,KieModule由kmodule.xml文件定义(当然不仅仅只是用它来定义)。..

KieProject 
KieContainer通过KieProject来初始化、构造KieModule,并将KieModule存放到KieRepository中,然后KieContainer可以通过KieProject来查找KieModule定义的信息,并根据这些信息构造KieBase和KieSession。

ClasspathKieProject 
ClasspathKieProject实现了KieProject接口,它提供了根据类路径中的META-INF/kmodule.xml文件构造KieModule的能力,也就是我们能够基于Maven构造Drools组件的基本保障之一。
 

规则引擎构成

drools规则引擎由以下三部分构成:

Working Memory(工作内存)
Rule Base(规则库)
Inference Engine(推理引擎)
其中Inference Engine(推理引擎)又包括:

Pattern Matcher(匹配器)
Agenda(议程)
Execution Engine(执行引擎)

相关概念说明

Working Memory:工作内存,drools规则引擎会从Working Memory中获取数据并和规则文件中定义的规则进行模式匹配,所以我们开发的应用程序只需要将我们的数据插入到Working Memory中即可,例如本案例中我们调用kieSession.insert(order)就是将order对象插入到了工作内存中。

Fact:事实,是指在drools 规则应用当中,将一个普通的JavaBean插入到Working Memory后的对象就是Fact对象,例如本案例中的Order对象就属于Fact对象。Fact对象是我们的应用和规则引擎进行数据交互的桥梁或通道。

Rule Base:规则库,我们在规则文件中定义的规则都会被加载到规则库中。

Pattern Matcher:匹配器,将Rule Base中的所有规则与Working Memory中的Fact对象进行模式匹配,匹配成功的规则将被激活并放入Agenda中。

Agenda:议程,用于存放通过匹配器进行模式匹配后被激活的规则。

Execution Engine:执行引擎,执行Agenda中被激活的规则。

 规则引擎执行过程

KIE介绍

我们在操作Drools时经常使用的API以及它们之间的关系如下图:

通过上面的核心API可以发现,大部分类名都是以Kie开头。Kie全称为Knowledge Is Everything,即"知识就是一切"的缩写,是Jboss一系列项目的总称。如下图所示,Kie的主要模块有OptaPlanner、Drools、UberFire、jBPM。 

 通过上图可以看到,Drools是整个KIE项目中的一个组件,Drools中还包括一个Drools-WB的模块,它是一个可视化的规则编辑器。

深入了解下Kie系列

KieServices 是一个接口,我们通过KieServices.Factory.get()来获取
static class Factory {
    public Factory() { /* compiled code */ }

    public static org.kie.api.KieServices get() { /* compiled code */ }

    private static class LazyHolder {
        private static org.kie.api.KieServices INSTANCE;

        private LazyHolder() { /* compiled code */ }
    }
}

KieServices 几个重要方法:

public org.kie.api.builder.KieRepository getRepository() 
public org.kie.api.runtime.KieContainer getKieClasspathContainer() 
public org.kie.api.runtime.KieContainer getKieClasspathContainer(java.lang.ClassLoader classLoader) 
public org.kie.api.runtime.KieContainer getKieClasspathContainer(java.lang.String containerId, java.lang.ClassLoader classLoader)
public org.kie.api.runtime.KieContainer newKieClasspathContainer()
public org.kie.api.runtime.KieContainer newKieClasspathContainer(java.lang.String containerId)
public org.kie.api.builder.KieBuilder newKieBuilder(java.io.File file)
public org.kie.api.builder.KieBuilder newKieBuilder(org.kie.api.builder.KieFileSystem kieFileSystem) 
public org.kie.api.io.KieResources getResources() 
public org.kie.api.builder.KieFileSystem newKieFileSystem() 
public org.kie.api.builder.model.KieModuleModel newKieModuleModel()

 KieContainer

org.kie.api.KieBase getKieBase();

org.kie.api.KieBase getKieBase(java.lang.String s);
void dispose();
org.kie.api.runtime.KieSession newKieSession();
org.kie.api.KieBase newKieBase(java.lang.String s, org.kie.api.KieBaseConfiguration kieBaseConfiguration);
org.kie.api.runtime.KieSession newKieSession(java.lang.String s);
org.kie.api.runtime.StatelessKieSession newStatelessKieSession();
org.kie.api.runtime.StatelessKieSession newStatelessKieSession(java.lang.String s);
org.kie.api.runtime.KieSessionConfiguration getKieSessionConfiguration();

KieRepository
org.kie.api.builder.ReleaseId getDefaultReleaseId();
void addKieModule(org.kie.api.builder.KieModule kieModule);

KieBase
org.kie.api.definition.KiePackage getKiePackage(java.lang.String s);
void removeKiePackage(java.lang.String s);
org.kie.api.definition.rule.Rule getRule(java.lang.String s, java.lang.String s1);
void removeRule(java.lang.String s, java.lang.String s1);
org.kie.api.runtime.KieSession newKieSession();
org.kie.api.runtime.KieSession newKieSession(org.kie.api.runtime.KieSessionConfiguration kieSessionConfiguration, org.kie.api.runtime.Environment environment);
org.kie.api.runtime.StatelessKieSession newStatelessKieSession();

kieSession

void dispose();

 <T> T getKieRuntime(java.lang.Class<T> aClass);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

规则引擎Drools使用 第二篇Drools规则引擎介绍 的相关文章

  • 规则引擎调研报告

    背景 我们公司由于业务的极具扩大 每天经过系统的金额也达到了20亿美金左右 这个时候对资金的管控就不能像以前那样分散在不同的系统 由不同的部门负责了 所以说 我们成立了风控部门 必须成立了专门的研发团队负责风控需求 要开始做风控了 我受命去
  • 规则引擎Drools使用 第十二篇 Drools 的高级语法之RHS加强

    RHS部分是规则体的重要组成部分 当LHS部分的条件匹配成功后 对应的RHS部分就会触发执行 一般在RHS部分中需要进行业务处理 在RHS部分Drools为我们提供了一个内置对象 名称就是drools 本小节我们来介绍几个drools对象提
  • 规则引擎相关开源项目总结

    表达式引擎 Java Groovy https groovy lang org JEXL https commons apache org proper commons jexl mvel https github com mvel mve
  • 规则引擎Drools使用 第五篇 Drools内置方法

    Drools内置方法 规则文件的RHS部分的主要作用是通过插入 删除或修改工作内存中的Fact数据 来达到控制规则引擎执行的目的 Drools提供了一些方法可以用来操作工作内存中的数据 操作完成后规则引擎会重新进行相关规则的匹配 原来没有匹
  • 如何通过 ant 构建脚本编译 .drl 文件

    我是流口水的新手 我想知道是否可以使用某种可以在 Windows 命令行 shell cmd 中输入的命令来编译 drl 文件 我查看了 drools 发行版附带的二进制文件 但我无法找到编译 drl 文件的方法 我对这样的命令感兴趣的原因
  • 为什么我们在“==”比较中指定变量的顺序很重要?

    我注意到 仅更改与 运算符进行比较的变量的顺序就会产生很大的性能差异 例如 variable variable 比variable variable 慢得多 为什么会这样 有类似的案例吗 顺便说一下 我使用的是从 GitHub 下载的 Op
  • 流口水基于时间的限制和“现在”

    我们正在尝试写一个流口水 上面写着 如果事件发生在上周 则执行后果 我们有表示事件发生时间的常规 java 日期对象 但我们不确定如何在流口水的 LHS 中表达我们希望该日期对象在上周发生 重要的是 一周的时间跨度是任意的 它可以随时更改为
  • Drools 6.0 在运行时动态加载规则

    我想在运行时加载 drl 文件 我发现的帖子包括这个one适用于 5 0 版本 但我不知道如何为 drools 6 0 版本执行此操作 在 Drools 6 中 您的规则包被部署到 Maven 提供了 KieScanner 您可以将其附加到
  • 用弹簧配置流口水。 xsd 错误

    我正在尝试使用 Drools 创建 spring roo 应用程序 但我在 applicationContext xml 中遇到了错误 Error 在这一行找到多个注释 无法找到模式命名空间 http drools org schema 的
  • 如何在drools中调用Java函数?

    我想从 Utils 类调用 Java 函数 该函数调用 JPA Repository 方法来检索自定义对象 我想从 Drools 决策表中调用这个函数 现在 这个简单的函数给出了空指针异常 我已经为此浪费了几个小时 我在决策表的 导入 部分
  • Drools:在数据库中存储规则

    目前 我将所有规则文件存储在文件系统上 它们有很多版本 并在启动时将它们的不同版本加载到内存中 我想更改为将我的 drools 文件存储在数据库中 并且想知道 Drools 是否有任何解决方案或插件可以促进这一点 或者我应该自己制作 Tha
  • 有没有可以使用 Drools 的 GUI?

    我是流口水的新手 我已经将 Drools 与 jsp 集成了 现在我想知道有没有 Drools 的 GUI 可以运行其应用程序吗 谢谢 Drools Guvnor 是用于管理规则的 Web GUI http docs jboss org d
  • Drools 在 where 子句中获取 List 的第一个元素

    是否可以从中获取列表的第一个元素whenDrools 中的条款 如果我不知道列表中的对象字段值 而我只想检索第一个元素 我该怎么做 rule TestRule1 dialect java when c Collection listCust
  • Guvnor规则编码

    我在 Excel 中有一个 Drools 决策表 规则中使用的一些字符串具有 字符 当我从这个决策表在 Guvnor 中构建规则包时 我在规则源中得到了错误的字符 例如 在电子表格中 gt rea de Lazer POR 在内置的 drl
  • Drools 知识库 已弃用

    我正在将 Drools 规则引擎集成到我的应用程序中 我发现的 99 的入门示例如下 KnowledgeBuilder kbuilder KnowledgeBuilderFactory newKnowledgeBuilder kbuilde
  • 在 drools-camel-server 上重新加载远程 drools guvnor 资源

    我正在使用 drools camel server 5 4 Final 来执行从 jboss AS7 上的 guvnor 获取的规则 如下所示
  • Drools-如何找出所有规则都匹配了?

    我有一个 DRL 文件 其中有 10 条规则 一旦我插入一个事实 一些规则可能会被匹配 我如何找出以编程方式匹配的规则 请注意 此答案对于 Drools 5 x 及以下版本有效 如果您已转到 6 或更高版本 请查看 melchoir55 修
  • 如何从 Drools 列表中获取最大最小项目

    我有课 class Person public Date dateOfBirth public List
  • PackageBuilder.java 在 Drools 6.1.0.final 中不可用

    我是 drools 的新手 目前我们在项目中使用 Drools 5 4 0 目前我们使用Drools 5 4 0的RuleCompiler java和PackageBuilder java类来编译 xls文件并创建ruleSetObject
  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object

随机推荐

  • Java高并发秒杀系统(二)

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net GallenZhang article details 78626730 秒杀系优化分析 1 详情页面 2系统时间 3地址暴露接口 4执行秒杀操作
  • 手把手教你如何快速搭建个人博客

    之前有录制和编写过WordPress搭建个人博客的内容 但是都比较麻烦 需要在控制台黑框复制运行相关的命令 很多没接触过过的用户还是有一定的困难 那么今天就把最最最简单的方法分享给大家 全程都是可视化的操作 不需要在复制相关的命令了 赶快跟
  • GitHub上精确搜索查找项目笔记

    1 通过in关键词限制搜索范围 1 abc in name 项目名里面包含abc 2 abc in description 项目描述包含abc 3 abc in readme 项目的readme文件里包含abc 4 还可以通过abc in
  • Error: failed to download “stable/openebs“

    安装openebs出现下面的异常 Error failed to download stable openebs hint running helm repo update may help 解决方案 未修改前的helm repo源 修改h
  • 解决在 Win7 旗舰版虚拟机中安装 VMware Tools 失败问题

    报错提示如下 安装程序无法自动安装Virtual Machine Communication Interface VMCI 驱动程序 必须手动安装此驱动程序 解决方法 安装以下两个补丁 1 kb4474419 2 kb4490628 按顺序
  • android 调用短信,Android实现接收短信和发送短信功能

    在学接收短信和发送短信之前 先简单介绍一下 SMS 短消息服务 SMS Short Message Service 短信息服务 是一种存储和转发服务 也就是说 短信息并不是直接从发信人发送到接收人 而是始终通过 SMS 中心进行转发 如果接
  • linux运行rs程序,【linux-基础】安装scp,rz,rs命令

    在测试中需要在两台虚拟机之间传递文件 首先想到的是scp命令 结果提示 bash scp command not found 想当然用yum install scp命令安装 结果提示 No package scp available 后来发
  • WebDriver概述

    什么是WebDriver Webdriver Selenium2 0 是一种用于Web应用程序的自动测试工具 它提供了一套友好的API Webdriver完全就是一套类库 不依赖于任何测试框架 除了必要的浏览器驱动 WebDriver AP
  • 用Python画奥运五环

    最近接触到了Python的一个有趣的库turtle 写了一个画奥运五环的程序 代码如下 用turtle模块绘画奥运五环 import turtle 设置公共属性 turtle width 10 第一个环 turtle color black
  • 华为OD机试 - 最大社交距离(Java)

    题目描述 疫情期间需要大家保证一定的社交距离 公司组织开交流会议 座位一排共 N 个座位 编号分别为 0 N 1 要求员工一个接着一个进入会议室 并且可以在任何时候离开会议室 满足 每当一个员工进入时 需要坐到最大社交距离 最大化自己和其他
  • IOS开发笔记之常用的第三方库(太多了。)

    图像 1 图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用 可显示来自手机的图片或者是网络图片 可自动从网络下载图片并进行缓存 可对图片进行缩放等操作 下载 https github com mwa
  • js-- 1-100循环

  • Linux系统中运行.sh文件的几种方法

    在Linux系统中执行 sh文件的几种方法 1 cd到 sh文件所在的目录 然后执行 xxx sh 前提 该 sh文件要有可执行的权限 chmod u x xxx sh 2 在任何路径下 输入 sh文件的绝对路径进行执行 前提 该 sh文件
  • 统计代码耗时

    二 常规方法 2 1 时间差统计 这种方式是最简单的方法 记录下开始时间 再记录下结束时间 计算时间差即可 public class TimeDiffTest public static void main String args thro
  • 安鸾之中间件系列

    声明 文中所涉及的技术 思路和工具仅供以安全为目的的学习交流使用 任何人不得将其用于非法用途以及盈利等目的 否则后果自行承担 本文转发于涂寐 s Blogs https 0xtlu github io 0x00 tomcat8弱口令 0o0
  • upx3.94手动脱壳

    工具 吾爱破解论坛Ollydbg ImportREConstructor upx3 94下载地址 https github com upx upx releases download v3 94 upx394w zip 环境 XP 还是XP
  • 换盘符cd的用法

    如果是在本盘内切换文件夹 直接使用cd 后面跟地址即可 如果是跨区切换地址 cd 后面就需要跟 d 斜杠d d就代表着跨分区切换地址 cd d d C ProgramData Anaconda3 Scripts gt cd d d d gt
  • linux之查看端口占用

    第一章 linux之帮助命令 第二章 linux命令行快捷键 第三章 linux之防火墙 第四章 linux之服务开机自启 第五章 linux之关机与重启 第六章 linux之环境变量 第七章 linux之目录操作命令 第八章 linux之
  • esp8266与stm32、手机通讯(原子云)——hal库(有代码)

    本文所讲 正点原子的wifi模块esp8266与正点原子开发板战舰V3 stm32f103zet6 及手机app通讯 esp8266分为三种工作模式 STA 8266连接到网络比如wifi 手机热点等 AP 8266作为热点 由手机连接到8
  • 规则引擎Drools使用 第二篇Drools规则引擎介绍

    Drools规则引擎介绍 drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎 可以将复杂且多变的业务规则从硬编码中解放出来 以规则脚本的形式存放在文件或特定的存储介质中 例如存放在数据库中 使得业务规则的变更不需要修