规则引擎Drools使用,0基础入门规则引擎Drools(四)WorkBench控制台

news2024/11/26 12:47:58

文章目录

  • 系列文章索引
  • 八、WorkBench简介与安装
    • 1、WorkBench简介
    • 2、安装
  • 九、WorkBench使用方式
    • 1、创建空间
    • 2、创建项目
    • 3、创建数据对象
    • 4、创建DRL规则文件
    • 5、创建测试场景
    • 6、设置KieBase和KieSession
    • 7、编译、构建、部署
    • 8、在项目中使用部署的规则

系列文章索引

规则引擎Drools使用,0基础入门规则引擎Drools(一)基础入门
规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法
规则引擎Drools使用,0基础入门规则引擎Drools(三)整合springboot
规则引擎Drools使用,0基础入门规则引擎Drools(四)WorkBench控制台
规则引擎Drools使用,0基础入门规则引擎Drools(五)实战+决策表

八、WorkBench简介与安装

1、WorkBench简介

WorkBench是KIE组件中的元素,也称为KIE-WB,是Drools-WB与JBPM-WB的结合体。它是一个可视化的规则编辑器。WorkBench其实就是一个war包,安装到tomcat中就可以运行。使用WorkBench可以在浏览器中创建数据对象、创建规则文件、创建测试场景并将规则部署到maven仓库供其他应用使用。

下载地址:https://download.jboss.org/drools/release/7.6.0.Final/kie-drools-wb-7.6.0.Final-tomcat8.war

注意:下载的war包需要安装到tomcat8中。

2、安装

软件安装时经常会涉及到软件版本兼容性的问题,所以需要明确各个软件的使用版本。

本课程使用的软件环境如下:

操作系统:Windows 10 64位
JDK版本:1.8
maven版本:3.5.4
Tomcat版本:8.5
具体安装步骤:

第一步:配置Tomcat的环境变量CATALINA_HOME,对应的值为Tomcat安装目录

第二步:在Tomcat的bin目录下创建setenv.bat文件,内容如下:

CATALINA_OPTS="-Xmx512M \
    -Djava.security.auth.login.config=$CATALINA_HOME/webapps/kie-drools-wb/WEB-INF/classes/login.config \
    -Dorg.jboss.logging.provider=jdk"

第三步:将下载的WorkBench的war包改名为kie-drools-wb.war并复制到Tomcat的webapps目录下

第四步:修改Tomcat下conf/tomcat-users.xml文件

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
  <!--定义admin角色-->
  <role rolename="admin"/>
  <!--定义一个用户,用户名为kie,密码为kie,对应的角色为admin角色-->
  <user username="kie" password="kie" roles="admin"/>
</tomcat-users>

第五步:下载以下三个jar包并复制到Tomcat的lib目录下

kie-tomcat-integration-7.10.0.Final.jar
javax.security.jacc-api-1.5.jar
slf4j-api-1.7.25.jar

第六步:修改Tomcat的conf/server.xml文件,添加Valve标签,内容为:

<Valve className="org.kie.integration.tomcat.JACCValve"/>

第七步:双击startup.bat,启动Tomcat并访问http://localhost:8080/kie-drools-wb,可以看到WorkBench的登录页面。使用前面在tomcat-users.xml文件中定义的用户进行登录即可(kie/kie)
在这里插入图片描述
登录成功后进入系统首页:
在这里插入图片描述

注!本节用到的资料如下:
https://download.csdn.net/download/A_art_xiang/88561123

九、WorkBench使用方式

1、创建空间

第一步:登录WorkBench后进行系统首页,点击首页中的Design区域进入项目列表页面:
在这里插入图片描述
在这里插入图片描述

如果是第一次登录还没有创建项目则无法看到项目

第二步:点击左上角Spaces导航链接进入空间列表页面
在这里插入图片描述
在这里插入图片描述
第三步:点击右上角Add Space按钮弹出创建添加空间窗口
录入空间名称,点击Save按钮则完成空间的创建,如下图(不能用大写!):
在这里插入图片描述

在这里插入图片描述

2、创建项目

前面已经提到,我们在WorkBench中需要先创建空间,在空间中才能创建项目。上面我们已经创建了一个空间my_drools,现在需要往此空间中创建项目。

第一步:点击my_drools空间,进入此空间
在这里插入图片描述

可以看到当前空间中还没有项目

第二步:点击Add Project按钮弹出添加项目窗口

第三步:在添加项目窗口中录入项目名称(例如项目名称为pro1),点击Add按钮完成操作
在这里插入图片描述
在这里插入图片描述

可以看到在完成项目创建后,系统直接跳转到了项目页面。要查看当前空间中的所有项目,可以点击左上角my_drools链接:
在这里插入图片描述

3、创建数据对象

数据对象其实就是JavaBean,一般都是在drl规则文件中使用进行规则匹配。

第一步:在my_drools空间中点击pro1项目,进入此项目页面
在这里插入图片描述

第二步:点击Create New Asset按钮选择“数据对象”
在这里插入图片描述
第三步:在弹出的创建数据对象窗口中输入数据对象的名称,点击确定按钮完成操作
在这里插入图片描述

操作完成后可以看到如下:
在这里插入图片描述

第四步:点击“添加字段”按钮弹出新建字段窗口

第五步:在新建字段窗口中录入字段Id(其实就是属性名),选择类型,点击创建按钮完成操作
在这里插入图片描述
完成操作后可以看到刚才创建的字段:
在这里插入图片描述
可以点击添加字段按钮继续创建其他字段:
在这里插入图片描述
注意添加完字段后需要点击右上角保存按钮完成保存操作:
在这里插入图片描述
在这里插入图片描述
点击源代码按钮可以查看刚才创建的Person对象源码:
在这里插入图片描述

点击左上角pro1项目链接,可以看到当前pro1项目中已经创建的各种类型的对象:
在这里插入图片描述

4、创建DRL规则文件

第一步:在pro1项目页面点击右上角Create New Asset按钮,选择“DRL文件”,弹出创建DRL文件窗口
在这里插入图片描述
第二步:在添加DRL文件窗口录入DRL文件名称,点击确定按钮完成操作
在这里插入图片描述

第三步:上面点击确定按钮完成创建DRL文件后,页面会跳转到编辑DRL文件页面

在这里插入图片描述

可以看到DRL规则文件页面分为两个部分:左侧为项目浏览视图、右侧为编辑区域,需要注意的是左侧默认展示的不是项目浏览视图,需要点击上面设置按钮,选择“资料库视图”和“显示为文件夹”,如下图所示:
在这里插入图片描述

第四步:在编辑DRL文件页面右侧区域进行DRL文件的编写,点击右上角保存按钮完成保存操作,点击检验按钮进行规则文件语法检查

package com.my_drools.pro1;

rule "rule_person_1"
    when
        $person:Person(age <= 6)
    then
        System.out.println("children");
end

rule "rule_person_2"
    when
        $person:Person(age > 6 && age <= 14)
    then
        System.out.println("early youth");
end

rule "rule_person_3"
    when
        $person:Person(age > 14 && age <= 35)
    then
        System.out.println("youth");
    end

rule "rule_person_4"
    when
        $person:Person(age > 35 && age <= 60)
    then
        System.out.println("middle age");
end

在这里插入图片描述

点击左上角pro1项目回到项目页面,可以看到此项目下已经存在两个对象,即person.drl规则文件和Person类:
在这里插入图片描述

5、创建测试场景

前面我们已经创建了Person数据对象和person规则文件,现在我们需要测试一下规则文件中的规则,可以通过创建测试场景来进行测试。

第一步:在项目页面点击Create New Asset按钮选择“测试场景”,弹出创建测试场景窗口

在这里插入图片描述
第二步:在弹出的创建测试场景窗口中录入测试场景的名称,点击确定完成操作
在这里插入图片描述

完成测试场景的创建后,页面会跳转到测试场景编辑页面,如下图:
在这里插入图片描述
第三步:因为我们编写的规则文件中需要从工作内存中获取Person对象进行规则匹配,所以在测试场景中需要准备Person对象给工作内存,点击“GIVEN”按钮弹出新建数据录入窗口,选择Person类,输入框中输入事实名称(名称任意),如下图
在这里插入图片描述
第四步:录入事实名称后点击后面的添加按钮,可以看到Person对象已经添加成功
在这里插入图片描述
第五步:我们给工作内存提供的Person对象还需要设置age属性的值,点击“添加字段”按钮弹出窗口,选择age属性
在这里插入图片描述
点击确定按钮后可以看到字段已经添加成功:
在这里插入图片描述

第六步:点击age属性后面的编辑按钮,弹出字段值窗口
在这里插入图片描述
第七步:在弹出的窗口中点击字面值按钮,重新回到测试场景页面,可以看到age后面出现输入框,可以为age属性设置值
在这里插入图片描述
在这里插入图片描述
设置好age属性的值后点击保存按钮保存测试场景

第八步:点击右上角“运行测试场景”按钮进行测试

在这里插入图片描述

在这里插入图片描述
测试成功后可以查看WorkBench部署的Tomcat控制台:
在这里插入图片描述

6、设置KieBase和KieSession

第一步:在pro1项目页面点击右上角Settings按钮进入设置页面
在这里插入图片描述

第二步:在设置页面选择“知识库和会话”选项
在这里插入图片描述

第三步:在弹出的知识库和会话页面点击“添加”按钮进行设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

第四步:设置完成后点击右上角保存按钮完成设置操作,可以通过左侧浏览视图点击kmodule.xml,查看文件内容
在这里插入图片描述
在这里插入图片描述

7、编译、构建、部署

前面我们已经在WorkBench中创建了一个空间my_drools,并且在此空间中创建了一个项目pro1,在此项目中创建了数据文件、规则文件和测试场景,如下图:
在这里插入图片描述

点击右上角“Compile”按钮可以对项目进行编译,点击“Bulid&Deploy”按钮进行构建和部署。

部署成功后可以在本地maven仓库中看到当前项目已经被打成jar包:
在这里插入图片描述

在这里插入图片描述

将上面的jar包进行解压,可以看到我们创建的数据对象Person和规则文件person以及kmodule.xml都已经打到jar包中了。

8、在项目中使用部署的规则

前面我们已经在WorkBench中创建了pro1项目,并且在pro1项目中创建了数据文件、规则文件等。最后我们将此项目打成jar包部署到了maven仓库中。本小节就需要在外部项目中使用我们定义的规则。

第一步:在IDEA中创建一个maven项目并在pom.xml文件中导入相关坐标

<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>7.10.0.Final</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

第二步:在项目中创建一个数据对象Person,需要和WorkBench中创建的Person包名、类名完全相同,属性也需要对应

package com.mydrools.pro1;

import java.io.Serializable;

public class Person implements Serializable {
    static final long serialVersionUID = 1L;
    private String id;
    private String name;
    private Integer age;

    public Person() {
    }

    public String getId() {
        return this.id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return this.age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Person(String id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

第三步:编写单元测试,远程加载maven仓库中的jar包最终完成规则调用

@Test
public void test1() throws Exception{
    //通过此URL可以访问到maven仓库中的jar包
    //URL地址构成:http://ip地址:Tomcat端口号/WorkBench工程名/maven2/坐标/版本号/xxx.jar
    String url = 
    "http://localhost:8080/kie-drools-wb/maven2/com/my_drools/pro1/1.0.0/pro1-1.0.0.jar";
    
    KieServices kieServices = KieServices.Factory.get();
    
    //通过Resource资源对象加载jar包
    UrlResource resource = (UrlResource) kieServices.getResources().newUrlResource(url);
    //通过Workbench提供的服务来访问maven仓库中的jar包资源,需要先进行Workbench的认证
    resource.setUsername("kie");
    resource.setPassword("kie");
    resource.setBasicAuthentication("enabled");
    
    //将资源转换为输入流,通过此输入流可以读取jar包数据
    InputStream inputStream = resource.getInputStream();
    
    //创建仓库对象,仓库对象中保存Drools的规则信息
    KieRepository repository = kieServices.getRepository();
    
    //通过输入流读取maven仓库中的jar包数据,包装成KieModule模块添加到仓库中
    KieModule kieModule = 
    repository.
        addKieModule(kieServices.getResources().newInputStreamResource(inputStream));
    
    //基于KieModule模块创建容器对象,从容器中可以获取session会话
    KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());
    KieSession session = kieContainer.newKieSession();Person person = new Person();
    person.setAge(10);
    session.insert(person);
​
    session.fireAllRules();
    session.dispose();
}

执行单元测试可以发现控制台已经输出了相关内容。通过WorkBench修改规则输出内容并发布,再次执行单元测试可以发现控制台输出的内容也发生了变化。

通过上面的案例可以发现,我们在IEDA中开发的项目中并没有编写规则文件,规则文件是我们通过WorkBench开发并安装部署到maven仓库中,我们自己开发的项目只需要远程加载maven仓库中的jar包就可以完成规则的调用。这种开发方式的好处是我们的应用可以和业务规则完全分离,同时通过WorkBench修改规则后我们的应用不需要任何修改就可以加载到最新的规则从而实现规则的动态变更。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257627.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EM32DX-C1【分布式io】

1设备类型&#xff1a; 电压&#xff1a;DC24V 输入16点 输出16点雷赛 EM32DX-C1 模块是一款基于 ASIC 技术的高性能、高可靠性的 CANopen 总线数字 量输入输出扩展模块&#xff0c;具有 16 路通用输入接口和 16 路通用输出接口。输入输出接口均采用光 电隔离和…

JavaScript 的初步学习上篇

JavaScript 的介绍 JavaScript 之父 布兰登 . 艾奇 (Brendan Eich) ,1995 年, 用 10 天时间完成 JavaScript 的设计. JavaScript 和 Java 的关系 两者之间就像老婆和老婆饼的关系,即毫无关系, JavaScript 最初的名字叫LiveScript,为了蹭 Java 热度,才改名为 JavaScript.JavaScr…

《洛谷深入浅出基础篇》P4913 【深基16.例3】二叉树深度

上链接&#xff1a; P4913 【深基16.例3】二叉树深度 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4913#submit 上题干&#xff1a; 题目描述 有一个 n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号&#xff08;均不超过 n&am…

什么是磁矩?磁矩与磁通的关系

物质的磁性来源于原子中的电子磁矩 物质由原子构成&#xff0c;而原子是由原子核和电子组成的。在原子中&#xff0c;电子因绕原子核运动而具有轨道磁矩&#xff1b;电子因自旋具有自旋磁矩&#xff0c;原子的磁矩主要来源于电子磁矩&#xff0c;这是一切物质磁性的来源。 磁…

NX二次开发UF_CURVE_ask_line_data 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_line_data Defined in: uf_curve.h int UF_CURVE_ask_line_data(tag_t line, UF_CURVE_line_p_t line_coords ) overview 概述 Returns the coordinates of a line w…

基于C#实现块状链表

在数据结构的世界里&#xff0c;我们会认识各种各样的数据结构&#xff0c;每一种数据结构都能解决相应领域的问题&#xff0c;当然每个数据结构&#xff0c;有他的优点&#xff0c;必然就有它的缺点&#xff0c;那么如何创造一种数据结构来将某两种数据结构进行扬长避短&#…

AntDB数据库,通信行业20年变迁的见证者

2000年至今&#xff0c;通信行业发展已过了20多年。面对通信行业巨大的数据信息&#xff0c;数据库在行业发展中发挥了巨大的作用&#xff0c;AntDB数据库便是其中较为知名的一款数据库。在通信行业快速发展的阶段&#xff0c;打破国外产品与技术垄断是产业发展的重点与难点。面…

一个基于.NET Core开源、跨平台的仓储管理系统

前言 今天给大家推荐一个基于.NET Core开源、跨平台的仓储管理系统&#xff0c;数据库支持MSSQL/MySQL&#xff1a;ZEQP.WMS。 仓储管理系统介绍 仓储管理系统&#xff08;Warehouse Management System&#xff0c;WMS&#xff09;是一种用于管理和控制仓库操作的软件系统&…

SAP创建ODATA服务-Structure

SAP创建ODATA服务-Structure 1、创建数据字典 进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project&#xff0c;事务码&#xff1a;SEGW&#xff0c;点击Create Project 按钮 Gateway service Project分四个部分&#xff1a…

RocketMq 主题(TOPIC)

RocketMq是阿里出品&#xff08;基于MetaQ&#xff09;的开源中间件&#xff0c;已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现&#xff0c;十万级数据吞吐量&#xff0c;ms级处理速度&#xff0c;分布式架构&#xff0c;功能强大&#xff0c;扩展性强。 官方…

【C++高阶(五)】哈希思想--哈希表哈希桶

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:C从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习C   &#x1f51d;&#x1f51d; 哈希结构 1. 前言2. unordered系列容器3. 哈希概…

FreeRTOS深入教程(软件定时器源码分析)

文章目录 前言一、软件定时器结构体二、软件定时器的工作机制三、创建软件定时器四、启动软件定时器五、软件定时器如何知道什么时候被调用总结 前言 除了有硬件定时器&#xff0c;还有软件定时器&#xff0c;那么这篇文章将带大家学习一下软件定时器是如何工作的&#xff0c;…

金鸣表格文字识别客户端输出项该如何选择?

智能布局&#xff1a;根据提交的图片自动设置输出的打印纸张大小和方向&#xff0c;其中表格识别默认为A4纵向&#xff0c;勾选“合并”可将N张图片批量识别成一个文件、一个表。 表格识别&#xff1a; excel&#xff1a;输出可编辑的excel。 word&#xff1a;输出可编辑的w…

express习惯养成小程序-计算机毕设 附源码 32209

习惯养成小程序的设计与实现 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;习惯养成小程序被用户普遍使…

虾皮买手号怎么弄的

想要拥有虾皮买手号&#xff0c;可以使用shopee买家通系统进行自动化注册&#xff0c;这款软件目前支持菲律宾、泰国、马来西亚、越南、巴西、印度尼西亚等国家使用。 软件注册流程简单方便&#xff0c;首先我们需要先准备好手机号&#xff0c;因为现在注册虾皮买家号基本上都是…

TechSmith Camtasia2024中文版简单好用的视频处理软件

TechSmith Camtasia 2024中文版是由techsmith公司推出的一款简单好用的视频处理软件&#xff0c;它集视频录制与视频后期处理为一体&#xff0c;用户可以使用软件来进行屏幕录制&#xff0c;其中包括了影像、音效、鼠标移动的轨迹、解说声音等任何模式下的电脑屏幕状态&#xf…

IIP3参数的含义

IIP3参数的含义 三阶交调频率分量 混频器的输入端的总输入信号通常由射频输入&#xff08;载波被调制信号&#xff09;和本振组成。以输入总信号由3个正弦信号为例&#xff0c;输入端的总输入信号为&#xff1a; u u 1 cos ⁡ ω 1 t u 2 cos ⁡ ω 2 t u 3 cos ⁡ ω 3 …

COMP2121 Discrete Mathematics

COMP2121 Discrete Mathematics 需要可WeChat: zh6-86

国产1433D/E/F/H手持式信号发生器,可覆盖到50GHz

1433D/E/F/H信号发生器 1433系列信号发生器是中电科思仪科技股份有限公司专为外场测试设计的一款手持式仪器&#xff0c;具有连续波信号输出、频率/幅度/脉冲多种调制、大动态范围幅度调节、步进/列表扫描等功能&#xff0c;采用8.4寸大屏幕液晶及电容触摸屏一体化设计&#xf…