二、Drools WorkBench

news2024/11/27 4:02:26

一、WorkBench 简介

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

1. 安装方式

  • 软件安装时经常会涉及到软件版本兼容性的问题,所以需要明确各个软件的使用版本。
  • 软件环境如下:
  1. 操作系统:Windows 10 64位
  2. JDK 版本:1.8
  3. Maven 版本:3.5.4
  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"/>

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


2. 使用方式


2.1 创建空间

  • WorkBench 中存在空间和项目的概念。我们在使用 WorkBench 时首先需要创建空间(Space),在空间中创建项目,在项目中创建数据对象、规则文件等。

第一步:登录 WorkBench 后进行系统首页,点击首页中的 Design 区域进入项目列表页面:
在这里插入图片描述
如果是第一次登录还没有创建项目则无法看到项目


第二步:点击左上角 Spaces 导航链接进入空间列表页面
在这里插入图片描述


第三步:点击右上角 Add Space 按钮弹出创建添加空间窗口
在这里插入图片描述
录入空间名称,点击Save按钮则完成空间的创建,如下图:
在这里插入图片描述


2.2 创建项目

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

第一步:点击 qs 空间,进入此空间
在这里插入图片描述
可以看到当前空间中还没有项目


第二步:点击 Add Project 按钮弹出添加项目窗口
在这里插入图片描述


第三步:在添加项目窗口中录入项目名称(例如项目名称为 demo1),点击Add按钮完成操作
在这里插入图片描述
可以看到在完成项目创建后,系统直接跳转到了项目页面。要查看当前 qs 空间中的所有项目,可以点击左上角 qs 链接:
在这里插入图片描述


2.3 创建数据对象

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


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


第二步:点击 Create New Asset 按钮选择“数据对象”


第三步:在弹出的创建数据对象窗口中输入数据对象的名称,点击确定按钮完成操作
在这里插入图片描述
操作完成后可以看到如下:
在这里插入图片描述


第四步:点击“添加字段”按钮弹出新建字段窗口
在这里插入图片描述


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


2.4 创建 DRL 规则文件

第一步:在 demo1 项目页面点击右上角 Create New Asset 按钮,选择“DRL文件”,弹出创建 DRL 文件窗口
在这里插入图片描述


第二步:在添加 DRL 文件窗口录入 DRL 文件名称,点击确定按钮完成操作
在这里插入图片描述


第三步:上面点击确定按钮完成创建 DRL 文件后,页面会跳转到编辑 DRL 文件页面
在这里插入图片描述

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


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

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


2.5 创建测试场景

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


第一步:在项目页面点击 Create New Asset 按钮选择“测试场景”,弹出创建测试场景窗口
在这里插入图片描述


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


第三步:因为我们编写的规则文件中需要从工作内存中获取 Person 对象进行规则匹配,所以在测试场景中需要准备 Person 对象给工作内存,点击 “GIVEN” 按钮弹出新建数据录入窗口,选择 Person 类,输入框中输入事实名称(名称任意),如下图
在这里插入图片描述


第四步:录入事实名称后点击后面的添加按钮,可以看到 Person 对象已经添加成功
在这里插入图片描述


第五步:我们给工作内存提供的 Person 对象还需要设置 age 属性的值,点击 “添加字段” 按钮弹出窗口,选择 age 属性
在这里插入图片描述


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


第七步:点击右上角“运行测试场景”按钮进行测试
在这里插入图片描述

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


2.6 设置 KieBase 和 KieSession

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


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


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


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


2.7 编译、构建、部署

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


点击右上角“Compile”按钮可以对项目进行编译,点击“Bulid&Deploy”按钮进行构建和部署。
部署成功后可以在本地maven仓库中看到当前项目已经被打成jar包:
在这里插入图片描述
将上面的 jar 包进行解压,可以看到我们创建的数据对象 Person 和规则文件 person 以及 kmodule.xml 都已经打到 jar 包中了。


3. 在项目中使用部署的规则

前面我们已经在 WorkBench 中创建了 demo1 项目,并且在 demo1 项目中创建了数据文件、规则文件等。最后我们将此项目打成 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.qs.demo1;

/**
 * This class was automatically generated by the data modeler tool.
 */

public class Person implements java.io.Serializable {

    static final long serialVersionUID = 1L;

    private java.lang.String id;
    private java.lang.String name;
    private int age;

    public Person() {
    }

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

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

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

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

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

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

    public Person(java.lang.String id, java.lang.String name, int 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:8088/kie-drools-wb/maven2/com/qs/demo1/1.0.0/demo1-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/627217.html

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

相关文章

基于jsp+mysql+Spring+mybatis+Springboot的Springboot实现的就业信息管理平台

运行环境: 最好是java jdk 1.8&#xff0c;我在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以&#xff0c;如果编译器的版本太低&#xff0c;需要升级下编译器&#xff0c;不要弄太低的版本 tomcat服务器环…

教你如何使用自定义测试(Minium)进行微信小程序自动化测试

目录 前言&#xff1a; 一、 编写用例 基本操作 处理小程序API 处理小程序原生控件 数据驱动 二、 执行用例 本地执行 云测服务测试 三、 最佳实践 四、总结 前言&#xff1a; 微信小程序自动化测试是保障小程序质量的重要手段&#xff0c;Minium是一个可为微信小程…

kafka 对 java NIO 的封装

说明 本文基于 kafka 2.7 编写。author JellyfishMIX - github / blog.jellyfishmix.comLICENSE GPL-2.0 java NIO 组件 几个 java NIO 的组件。 Buffer: 缓冲区。这是一个接口&#xff0c;kafka 用它的 ByteBuffer 实现类&#xff0c;配合 SocketChannel 实现读写操作。读…

区块链产业快速发展 和数集团开启区块链应用新时代

UTONMOS区块链游戏要来了。 就在5月底&#xff0c;UTONMOS品牌所属公司上海和数集团在泰国发布了【神念无界】系列的多款国际版链游&#xff0c;包括【神念无界-源起山海】、【北荒传奇】、【神宠岛】、【神农园】等区块链游戏。 以【神念无界-源起山海】为例&#xff0c;其是…

Web、容器化 Native、小程序跨平台!三种跨平台方案对比

前端码农工作几年&#xff0c;从一家公司跳到另一家公司&#xff0c;永远逃不掉的是跨平台需求。除了本身应用在多平台上架的需求之外&#xff0c;资源有限恐怕是最大的原因&#xff0c;跨平台方案确实可以减少重复开发工作&#xff0c;降低成本和节省时间&#xff1b;而且掌握…

从开源到云原生,时序数据库 TDengine 六年回顾精彩纷呈

2023 年 6 月 6 日&#xff0c;涛思数据旗下时序数据库&#xff08;Time Series Database&#xff09; TDengine 迎来六周年庆典&#xff0c;并于北京保利国际广场T2举办了主题为“TDengine 6th Anniversary&#xff1a;Back to The Future”的庆典活动&#xff0c;设置了「TDe…

《Contrastive Learning for Unpaired Image-to-Image Translation》

Contrastive Learning for Unpaired Image-to-Image Translation 1. 摘要2. 介绍3. 相关工作3.1 图像转换、循环一致性3.2 关系保持3.3 深度网络嵌入中的感知相似性3.4 对比表示学习 4. 方法 原文及代码链接 https://github.com/taesungp/contrastive-unpaired-translation 1.…

API之Apifox和Postman工具该如何抉择?

目录 前言 一.功能列表对比 &#xff08;一&#xff09;接口设计与文档管理功能 &#xff08;二&#xff09;接口调试功能对比 &#xff08;三&#xff09;接口mock功能 &#xff08;四&#xff09;接口测试功能 二.团队协作功能 三.Apifox 没有的功能 四.产品价格 前…

代码随想录算法训练营第五十二天|300.最长递增子序列|674. 最长连续递增序列|718. 最长重复子数组

LeetCode300.最长递增子序列 动态规划五部曲&#xff1a; 1&#xff0c;dp[i]的定义&#xff1a;本题中&#xff0c;正确定义dp数组的含义十分重要。dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度。为什么一定表示 “以nums[i]结尾的最长递增子序” &#xff0c…

FP独立站卖家怎么解决收款问题?挑选支付公司有何关注点?

2023年是充满希望又充满挑战的一年。这一年&#xff0c;新冠肺炎疫情恢复&#xff0c;经济慢慢复苏&#xff0c;对做跨境电商的卖家来说是个不错的机遇&#xff1b;但由于chatgpt人工智能的出现&#xff0c;F牌网站被检测出来的几率大大提高……让F牌独立站卖家最头疼的是&…

使用iTerm2打造ssh神器

在日常工作中&#xff0c;经常要通过ssh连接远程服务器&#xff0c;每次连接都输入密码&#xff0c;会比较麻烦。 在Window系统上&#xff0c;我习惯使用xshell管理连接&#xff0c;非常方便。 在MacOS系统上&#xff0c;没有xshell&#xff0c;而一些类似xshell的工具中&#…

vue+elementui+nodejs美容院理发店产品网上商城管理系统0ffvo

在当前的信息化管理浪潮下&#xff0c;我国的各行业不断转向信息化&#xff0c;现代化的高效管理模式。研发新一代美发管理系统&#xff0c;使一直沿袭传统的美发管理模式而产生的管理效率较低&#xff0c;经营管理水平相对滞后等现象得以改善&#xff1b;而这种新型的美容美发…

红外人体感应灯单片机开发方案

近来&#xff0c;红外人体感应灯受到了居家人们关注和喜爱。为此&#xff0c;宇凡微推出了一款低成本红外人体感应灯单片机方案。红外人体感应灯可应用于走廊、床边、楼梯、衣柜等地方&#xff0c;提供柔和照明作用。人来即亮&#xff0c;人走即灭&#xff0c;不受强光影响睡眠…

[游戏开发][Unity]Assetbundle下载篇(7)获取运行时(边玩边下)下载列表

啥是运行时下载清单&#xff1f;现在大多数手游都会有一个边玩边下功能&#xff0c;会提示用户是否开启下载&#xff0c;要XXX流量&#xff0c;如果你下载完了&#xff0c;可能还会有奖励。 疑问&#xff1a;为何要有边玩边下功能&#xff1f; 解答&#xff1a;为了发包的包体…

常见的五种HDMI接口类型,你知道多少?

高清多媒体接口&#xff08;High Definition Multimedia Interface&#xff09;简称HDMI&#xff0c;是一种全数字化视频和声音发送接口&#xff0c;可以 同时发送未压缩的视频及音频信号 &#xff0c;且发送时采用同一条线材&#xff0c;大大简化了系统线路的安装难度&#xf…

java SSM 网上拍卖myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM 网上拍卖系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和 数据库&#xff0c;系统主要采用B…

[STJson]一个.Net开源json解析库

创作背景 项目地址: https://debugst.github.io/STJson 在开发过程中难免会遇到需要处理json的时候&#xff0c;但是.Net中自带的库似乎有点一言难尽啊。最后虽然找到了Newstonsoft.Json感觉还不错&#xff0c;但是还是觉得有些不如意的地方&#xff0c;它的功能虽然强大但是…

C语言:编写代码实现,模拟用户登录情景,并且只能登录三次

题目&#xff1a; 编写代码实现&#xff0c;模拟用户登录情景&#xff0c;并且只能登录三次。 只允许输入三次密码&#xff0c; 如果密码正确则提示登录成功&#xff0c; 如果三次均输入错误&#xff0c;则退出程序。 思路&#xff1a; 总体思路&#xff1a; &#xff08;一&a…

MIAOYUN“一云多芯”解决方案获评2023西部信创优秀解决方案

6月7日&#xff0c;由工业和信息化部电子第五研究所主办的“2023西部信息技术应用创新产业生态大会” 在重庆成功举办。会上&#xff0c;2023年西部地区信息技术应用创新优秀解决方案汇编正式发布&#xff0c;成都元来云志科技有限公司&#xff08;简称“MIAOYUN”&#xff09;…

现代化 Android 开发:基础架构

作者&#xff1a;古哥E下 Android 开发经过 10 多年的发展&#xff0c;技术在不断更迭&#xff0c;软件复杂度也在不断提升。到目前为止&#xff0c;虽然核心需求越来越少&#xff0c;但是对开发速度的要求越来越高。高可用、流畅的 UI、完善的监控体系等都是现在的必备要求了。…