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

文章目录

  • 系列文章索引
  • 八、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)thenSystem.out.println("children");
endrule "rule_person_2"when$person:Person(age > 6 && age <= 14)thenSystem.out.println("early youth");
endrule "rule_person_3"when$person:Person(age > 14 && age <= 35)thenSystem.out.println("youth");endrule "rule_person_4"when$person:Person(age > 35 && age <= 60)thenSystem.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.jarString 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.mzph.cn/news/173341.shtml

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

相关文章

电商数据采集及数据监测的关注重点

当品牌需要做分析报告时&#xff0c;需要用到电商数据&#xff0c;所以分析的前提是数据采集&#xff0c;只有采集的数据越准确&#xff0c;分析的报告才有价值&#xff0c;同样&#xff0c;品牌在做数据监测的基础也是采集&#xff0c;如电商价格监测&#xff0c;需要采集到准…

编译器设计03-后端概述

后端处理概述 后端处理&#xff1a;中间代码生成&#xff0c;目标代码生成&#xff0c;贯穿各个阶段的优化。 后端处理犹如得出中文文章&#xff0c;当阅读完英语文章后&#xff0c;你的脑海中就有清晰的“中间代码”了&#xff0c;想写作的时候就心中有数&#xff0c;核心论…

全面探讨HTTP协议从0.9到3.0版本的发展和特点

前言&#xff1a; 最近的几场面试都问到了http的相关知识点&#xff0c;博主在此结合书籍和网上资料做下总结。本篇文章讲收录到秋招专题&#xff0c;该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮…

Ubuntu安装Vmtools (最新安装教程)

Ubuntu安装Vmtools 1. 设置root用户密码2. 切换root用户3. 安装vmools 1. 设置root用户密码 出现认证失败&#xff08;Authentication failure&#xff09;的原因有两种&#xff0c;要么是密码输入错误&#xff0c;要么是新安装的系统还没有给root设置密码&#xff0c;&#x…

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…

基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】

基于sprinmgboot实现实习管理系统的设计与实现演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;实习管理也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;…

Unity 关于Input类的使用

Input类在我们游戏开发中需要获取外设设备&#xff08;比如键盘、鼠标、游戏手柄等&#xff09;进行交互时&#xff0c;基本都会用到。 它主要有以下一些常用的方法。 1、GetKey(KeyCode key)&#xff0c;检测按键是否被按下&#xff1b; 2、GetKeyDown(KeyCode key)&#x…

基于helm的方式在k8s集群中部署gitlab - 升级(三)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署&#xff08;一&#xff09;&#xff0c;本篇重点对gitlab在k8s集群中进行升级 文章目录 1. gitlab 升级1.1 获取release1.2 下载目前版本的gitlab charts1.3 获取当前的values文件1.4 升级 2. gitlab数据库升级2.1 备份数…

SSRF漏洞防御:黑白名单的编写

文章目录 SSRF漏洞防御:黑白名单的编写黑名单的制作白名单的制作 SSRF漏洞防御:黑白名单的编写 以pikachu靶场中SSRF(crul)为例我们可以看到未做任何防御 我们查看源代码 黑名单的制作 思路: 什么内容不能访问 构造代码 $xyarray("file" > "",&q…

bmp文件操作和详解

一 BMP文件格式 BMP&#xff08;Bitmap&#xff09;是Windows操作系统中的标准图像文件格式。 由于windows操作系统的发布时机远早于Linux、Android、IOS等操作系统&#xff0c;因此windows中很多数据格式和算法的标准也是当今所有操作系统必须要兼容的标准数据结构和算法。BM…

ubuntu下载vscode并运行程序

如有帮助点赞收藏关注&#xff01; 如需转载&#xff0c;请注明出处&#xff01; 好久没有在linux下编译c代码了&#xff0c;由于换了酷炫彩灯的电脑。又要重新安装一次喽。做个记录&#xff0c;可以帮助到有需要的人&#xff0c;接下来不要错过每一个步骤。 我们一起手把手运行…

虹科方案 | 如何破解CAN与车载以太网之间数据传输和协议转换的难题?

导读&#xff1a;在车辆网络时代&#xff0c;数据传输和协议转换在通信领域中扮演着至关重要的角色。它们不仅能够实现车辆内部系统之间的互联互通&#xff0c;还支持车辆与外部网络进行通信&#xff0c;从而为驾驶者带来更智能、便捷的驾驶体验。本文将介绍CAN总线与车载以太网…

3.数据结构

3.1 数据结构分类 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图&#xff0c;它们可以从“逻辑结构”和“物理结构”两个维度进行分类。 3.1.1逻辑结构&#xff1a;线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中&#xff0c;数据按照…

大公司为什么喜欢centos系统写爬虫?

CentOS是一个基于Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建的开源操作系统&#xff0c;它受到大企业喜欢大多数因为他系统的稳定性&#xff0c;安全性以及兼容性等。可以为企业提供更多的商业支持。以我个人为例&#xff0c;公司在做爬虫数据抓取多是采…

王者小游戏作业

一、创建好文件、包、类、插入图片文件夹 二、beast包 1、Bear类 package beast; import sxt.GameFrame; public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("C:\\Users\\陆先生\\Desktop\\王者荣耀图片…

前置任务之安装jdk

已经安装过很多次了&#xff0c;但是每次安装都要搜好几次才能找到正确的&#xff0c;离大谱。 1.打开 oracle官网 https://www.oracle.com 然后切换到Java archive 下载192版本的&#xff0c;页面搜索ctrlF&#xff0c;【Java SE Development Kit】或者【jdk-8u192-windows-…

深入理解Transformer,兼谈MHSA(多头自注意力)、LayerNorm、FFN、位置编码

Attention Is All You Need——集中一下注意力 Transformer其实不是完全的Self-Attention结构&#xff0c;还带有残差连接、LayerNorm、类似1维卷积的Position-wise Feed-Forward Networks&#xff08;FFN&#xff09;、MLP和Positional Encoding&#xff08;位置编码&#xf…

ChatGPT进阶:提示工程的神秘面纱与实战指南

文章目录 一、提示工程的概念与原理二、提示工程的实践方法三、提示工程的挑战与展望四、实战案例分析总结《ChatGPT进阶&#xff1a;提示工程入门》内容简介作者简介陈颢鹏&#xff1a;李子菡&#xff1a; 目录获取方式 在人工智能领域&#xff0c;对话系统已经成为了一个热门…

C#工程中Form_xx.cs不能在设计器中查看

环境&#xff1a;VS2022 直接上图&#xff1a; 原因&#xff1a; 写了个类在Form_xx.cs中从For继承的部分类之前&#xff0c;移动到之后&#xff0c;保证窗体类是代码中的首个类即可&#xff0c;如图&#xff1a;

实战|信息泄露

0x01系统初探 通过fofa对大学进行搜索 fofa:host"edu.cn" &amp;&amp; status_code"200"在随意的翻阅查看时&#xff0c;发现访问xxx.edu.cn登录页面会优先访问登录后的页面&#xff0c;再跳转至登录页面。盲猜应该是前端校验&#xff0c;可以通过…