第2-4-7章 docker安装WorkBench-规则引擎Drools-业务规则管理系统-组件化-中台

news2024/11/27 22:44:52

文章目录

    • 8. WorkBench
      • 8.1 WorkBench简介
      • 8.2 安装方式
        • 8.2.1 传统方式安装
        • 8.2.2 docker安装drools workbench
      • 8.3 使用方式
        • 8.3.1 创建空间、项目
        • 8.3.2 创建数据对象
        • 8.3.3 创建DRL规则文件
        • 8.3.4 创建测试场景
        • 8.3.5 设置KieBase和KieSession
        • 8.3.6 编译、构建、部署
        • 8.3.7 在项目中使用部署的规则
        • 8.3.8 以上代码均在testWB项目中

8. WorkBench

全套代码及资料全部完整提供,点此处下载

8.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中。

8.2 安装方式

8.2.1 传统方式安装

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

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

  • 操作系统: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"/>

第七步:启动Tomcat并访问http://localhost:8080/kie-drools-wb,可以看到WorkBench的登录页面。使用前面在tomcat-users.xml文件中定义的用户进行登录即可

在这里插入图片描述

登录成功后进入系统首页:

在这里插入图片描述

8.2.2 docker安装drools workbench

docker pull jboss/drools-workbench-showcase:7.6.0.Final
docker run -p 8080:8080 -p 8001:8001 -d --name drools-workbench jboss/drools-workbench-showcase:7.6.0.Final

启动成功后,访问http://192.168.86.101:8080/drools-wb即可,注意版本,从某个版本开始workbench改名叫Business Central了,访问连接也变成了http://localhost:8080/business-central,注意区别。

在这里插入图片描述

  • 以下是workbench相关的账号密码:
USER        PASSWORD    ROLE
*********************************************
admin       admin       admin,analyst,kiemgmt
krisv       krisv       admin,analyst
john        john        analyst,Accounting,PM
sales-rep   sales-rep   analyst,sales
katy        katy        analyst,HR
jack        jack        analyst,IT

8.3 使用方式

8.3.1 创建空间、项目

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

  • 创建空间

    第一步:登录WorkBench后进行系统首页,点击首页中的Design区域进入项目列表页面:

在这里插入图片描述

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

第二步:点击左上角Spaces导航链接进入空间列表页面

在这里插入图片描述

第三步:点击右上角Add Space按钮弹出创建添加空间窗口

在这里插入图片描述

录入空间名称,点击Save按钮则完成空间的创建,如下图:

在这里插入图片描述

  • 创建项目

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

    第一步:点击guohaowei空间,进入此空间

在这里插入图片描述

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

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

在这里插入图片描述

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

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

8.3.2 创建数据对象

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

第一步:在guohaowei空间中点击pro1项目,进入此项目页面

在这里插入图片描述

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

在这里插入图片描述

第三步:在弹出的创建数据对象窗口中输入数据对象的名称,点击确定按钮完成操作

在这里插入图片描述

操作完成后可以看到如下:

在这里插入图片描述

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

第五步:在新建字段窗口中录入字段Id(其实就是属性名),选择类型,点击创建按钮完成操作

在这里插入图片描述

完成操作后可以看到刚才创建的字段:

在这里插入图片描述

可以点击添加字段按钮继续创建其他字段:

在这里插入图片描述

注意添加完字段后需要点击右上角保存按钮完成保存操作:

在这里插入图片描述

点击源代码按钮可以查看刚才创建的Person对象源码:

在这里插入图片描述

点击左上角pro1项目链接,可以看到当前pro1项目中已经创建的各种类型的对象:

在这里插入图片描述

8.3.3 创建DRL规则文件

第一步:在pro1项目页面点击右上角Create New Asset按钮,选择“DRL文件”,弹出创建DRL文件窗口

在这里插入图片描述

第二步:在添加DRL文件窗口录入DRL文件名称,点击确定按钮完成操作

在这里插入图片描述

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

在这里插入图片描述

可以看到DRL规则文件页面分为两个部分:左侧为项目浏览视图、右侧为编辑区域,需要注意的是左侧默认展示的不是项目浏览视图,需要点击上面设置按钮,选择“资料库视图”和“显示为文件夹”,如下图所示:
在这里插入图片描述
第四步:在编辑DRL文件页面右侧区域进行DRL文件的编写,点击右上角保存按钮完成保存操作,点击检验按钮进行规则文件语法检查
在这里插入图片描述

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

在这里插入图片描述

8.3.4 创建测试场景

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

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

在这里插入图片描述

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

在这里插入图片描述

完成测试场景的创建后,页面会跳转到测试场景编辑页面,如下图:

在这里插入图片描述

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

在这里插入图片描述

第四步:录入事实名称后点击后面的添加按钮,可以看到Person对象已经添加成功

在这里插入图片描述

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

在这里插入图片描述

点击确定按钮后可以看到字段已经添加成功:

在这里插入图片描述

第六步:点击age属性后面的编辑按钮,弹出字段值窗口

在这里插入图片描述

第七步:在弹出的窗口中点击字面值按钮,重新回到测试场景页面,可以看到age后面出现输入框,可以为age属性设置值

在这里插入图片描述

设置好age属性的值后点击保存按钮保存测试场景

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

在这里插入图片描述

测试成功后可以查看WorkBench部署的Tomcat控制台:

在这里插入图片描述

  • docker进入容器查看日志

    docker exec -it drools-workbench /bin/bash
    
    Workbench的日志存在/opt/jboss/wildfly/standalone/log/目录
    

在这里插入图片描述

8.3.5 设置KieBase和KieSession

第一步:在pro1项目页面点击右上角Settings按钮进入设置页面

在这里插入图片描述

第二步:在设置页面选择“知识库和会话”选项

在这里插入图片描述

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

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

在这里插入图片描述

8.3.6 编译、构建、部署

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

在这里插入图片描述

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

部署成功后可以在本地maven仓库中看到当前项目已经被打成jar包:

在这里插入图片描述

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

8.3.7 在项目中使用部署的规则

前面我们已经在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.guohaowei.pro1;

import java.io.Serializable;

public class Person implements Serializable {
    static final long serialVersionUID = 1L;

    private String id;
    private 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://192.168.86.101:8080/kie-drools-wb/maven2/com/guohaowei/pro1/1.0.0/pro1-1.0.0.jar";
    String url ="http://192.168.86.101:8080/drools-wb/maven2/com/guohaowei/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("admin");
    resource.setPassword("admin");
    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修改规则后我们的应用不需要任何修改就可以加载到最新的规则从而实现规则的动态变更。

8.3.8 以上代码均在testWB项目中

在这里插入图片描述

全套代码及资料全部完整提供,点此处下载

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

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

相关文章

Intel PAUSE 指令变化如何影响 MySQL 的性能

导读 x86、arm指令都很多&#xff0c;无论是应用程序员还是数据库内核研发大多时候都不需要对这些指令深入理解&#xff0c;但是 Pause 指令和数据库操作太紧密了&#xff0c;本文通过一次非常有趣的性能优化来引入对 Pause 指令的理解&#xff0c;期望可以事半功倍地搞清楚 C…

微服务线上问题排查困难?不知道问题出在哪一环?那是你还不会分布式链路追踪

咱们以前单体应用里面有很多的应用和功能&#xff0c;依赖各个功能之间相互调用&#xff0c;使用公共的代码包等等&#xff0c;排查问题&#xff0c;使用类似于 gdb/dlv 工具或者直接查看代码日志&#xff0c;进行定位和分析 但是现在我们基本上都是微服务架构了&#xff0c;将…

Node.js 入门教程 20 查看 npm 包安装的版本 21 安装 npm 包的旧版本

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程20 查看 npm 包安装的版本21 安装 npm 包的旧版本20 查看 npm 包安装的版本 若要查看所有已安装的 npm 软件包&#xff08…

JetpackCompose Navigation导航快速上手

Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转 这是完整的结构&#xff08;忽略掉红线划过的那个包&#xff09; 编写欲跳转的两个页面 编写 Demo1 页面 子页面使用多个 composable 组件相组合的方法一一装配起来 Demo1m…

【博客543】golang pprof性能调试:寻找cpu瓶颈

golang pprof性能调试&#xff1a;寻找cpu瓶颈 1、引入pprof进行性能调试 在代码中加入&#xff1a; import _ "net/http/pprof"go func() {http.ListenAndServe("0.0.0.0:8899", nil) }()示例&#xff1a;为冒泡排序加入pprof debug package mainimpo…

月薪2万的大数据职位,为什么必须学习Python?

前言 马云说&#xff1a;“未来最大的资源就是数据&#xff0c;不参与大数据十年后一定会后悔。”毕竟出自wuli马大大之口&#xff0c;今年二月份我开始了学习大数据的道路&#xff0c;直到现在对大数据的学习脉络和方法也渐渐清晰。 我们先来看一下数据分析相关职位现在的薪…

Cys(Npys)-(Arg)₉,H2N-C(Npys)-RRRRRRRRR-OH

可渗透细胞的非精氨酸酰胺&#xff0c;可以很容易地偶联到负载分子上&#xff0c;例如通过马来酰亚胺-硫醇偶联。 编号: 126721中文名称: Cys(Npys)-(Arg)₉英文名: Cys(Npys)-(Arg)₉单字母: H2N-C(Npys)-RRRRRRRRR-OH三字母: H2N-Cys(Npys)-Arg-Arg-Arg-Arg-Arg-Arg-Arg-Arg-…

多肽标签TC tag,H2N-CCPGCC-OH

编号: 168488中文名称: 多肽标签TC tag英文名: TC tag单字母: H2N-CCPGCC-OH三字母: H2N-Cys-Cys-Pro-Gly-Cys-Cys-COOH氨基酸个数: 6分子式: C19H32N6O7S4平均分子量: 584.75精确分子量: 584.12等电点(PI): 9.13pH7.0时的净电荷数: 3.85平均亲水性: -1疏水性值: 1.33来源: 人工…

Vision Transformer

Vision Transformer 将Transformer应用于CV领域。 不了解Transformer的先去看下&#xff1a;一文看懂Transformer 对比Transformer&#xff0c;ViT的特殊之处不多。因为作者说了他们想要做“尽量少的改动”将Transformer直接应用于图像领域 论文下载地址&#xff1a;https:…

留学Paper写作需要怎么正确引用?

1.MLA文献引用格式的基本描述&#xff1a;文学类Paper通常使用MLA&#xff08;Modern Language Association&#xff09;格式。作者在正文中用括号夹注的形式注明参考文献的简要出处&#xff0c;即&#xff08;作者姓氏页码&#xff09;。 Ancient writers attributed the inve…

小学生python游戏编程arcade----坦克换色

小学生python游戏编程arcade----坦克换色前言坦克换色1、RGB颜色1.1 RGB1.2 PIL 模块中的image1.3 效果图![在这里插入图片描述](https://img-blog.csdnimg.cn/f533a0bed98f4b49a462a2f056c35786.png)#### 1.4 代码实现1.5 总结2、RGB转换为HSV2.1 RGB2.2 HSV2.3 python RGB 转…

《前端框架开发技术》HTML+CSS+JavaScript 制作个人简历模板

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

23、Mybatis查询功能4(查询结果为一个map集合(多条数据))

Mybatis查询功能4&#xff08;查询结果为一个map集合&#xff08;多条数据&#xff09;&#xff09; 可以用Lsit集合接收可以用MapKey注解设置键&#xff08;用一个唯一标识&#xff09;第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a;

我的第一个Servlet程序,并理解浏览器和代码如何关联在一起

目录 Servlet 第一个Servlet程序 1.创建项目 maven是什么 如何创建maven项目 2.引入Servlet依赖 找到库中maven代码 3.创建目录结构 4.编写代码 理解注解Webserlet 5.打包程序 生成war包 6.部署程序 7.验证程序 二.理解浏览器发的请求是怎么和自己写的代码建立联…

景联文智能标注平台将数据处理效率提升十倍以上!数据精准度最高可达99%

目前主流的机器学习方式是以有监督的深度学习方式为主&#xff0c;这对标注数据有着强较依赖性需求&#xff0c;未经标注处理过的原始数据多以非结构化数据为主&#xff0c;这些数据难以被机器识别和学习。这就需要标注员借助数据标注工具对数据进行标注。 使用高效率的标注工具…

如何知道你的Linux内核占用的内存大小?

如何知道你的Linux内核占用的内存大小&#xff1f;1、代码段等2、kernel heap2.1、kmalloc2.2、vmalloc3、进程的页表4、内核占用内存大小总和1、代码段等 内核所需的代码段、bss段&#xff0c;内核栈等。 / # dmesg | grep Memory Memory policy: Data cache writealloc M…

springboot使用mybatis

springboot使用mybatis 本文目录springboot使用mybatis引入maven依赖新增数据库配置创建数据库表实体类编写mapper接口层通过xml文件mapper中直接使用注解编写mapper.xmlIDEA创建mybatis的xml文件parameterType启动类controller调用引入maven依赖 <dependency><groupI…

视频转音频怎么转?来试试这三个方法

如今我们可以看到有一些人会把电影/电视变成听电影/电视&#xff0c;相信大家都会感觉很不可思议吧&#xff01;电影/电视不是用来看的吗&#xff1f;听就没办法享受到那种视觉上的震撼了&#xff0c;其实不然&#xff0c;听电影/电视也是一种别样的享受&#xff0c;特别是对有…

看完这篇还不懂MySQL的MVCC机制算我输

前言 MySQL中大名鼎鼎的MVCC机制想必大家都有所耳闻吧&#xff0c;虽然在平时MySQL使用过程中基本上用不到&#xff0c;但是面试中出场率十分高&#xff0c;而且作为架构师的你也是需要知道它的工作机制。那么你对MVCC机制了解多少呢&#xff1f;MVCC机制是用来干嘛的呢&#…

使用 Clion (cmake) 开发FreeRTOS

这里使用的是 f4071. 先用STM32CubeMX 建立一个可以运行的stm32项目&#xff0c;toolchain选择 SW4STM322. 官网下载源码www.freertos.org我这里下载的是FreeRTOSv202112.00.zip 解压缩后得到需要以下几个文件夹或档案FreeRTOS/Source下的所有的 .c 档案FreeRTOS/Source/includ…