Drools可视化规则编辑器之WorkBench

WorkBean是一个可视化的规则编辑器。它其实就是一个war包,安装到tomcat中就可以运行。使用WorkBench可以在浏览器中创建数据对象、创建规则文件、创建测试场景并将规则部署到maven仓库提供其他应用使用。

WorkBench下载

下载地址

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

WorkBench安装

第一步:把下载的war包解压放到tomcat 的webapps下,并将名称改为kie-drools-web.war

第二步:把drools相关的jar下载好放到lib下(3个jar)

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

第三步:配置tomcat的环境变量CATALINA_HOME,对应的值为tomcat的安装目录,在tomccat的bin目录下创建setenv.bat文件

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

第四步:修改配置文件,

新增角色和用户名:修改tomcat下conf/tomcat-users.xml文件

1
2
3
4
5
6
7
8
9
10
<?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>

注意:conf/tomcat-users.xml保存时要用UTF-8编码方式

jacc配置:修改tomcat下conf/server.xml文件,添加value标签,内容为:

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

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

登录页

登录后进入主页面

首页

WorkBench使用

创建项目

进入主页,点击Design中的projects链接,进入项目管理界面

创建项目1

点击【Add Project】进行添加项目

创建项目2

填写项目名称以及Maven相关内容完成项目创建

创建项目3

包创建

点击创建好的项目,进入主界面,点击【Add Asset】,

包创建1

选择【软件包】,

包创建2

创建数据对象存放的com.lhb.order_rules.fact,所有资源都是通过【Create New Asset】进行创建,后面不在赘述

包创建4

数据对象创建

选择【数据对象】进行Fact的创建,首先创建Order对象

创建数据对象1

创建数据对象2

点击【添加字段】为当前对象添加字段,设置字段类型及描述

添加字段

添加字段amout

添加字段amout

添加字段score

添加字段score

字段添加完成后,可以点击【源代码】查看生成的对象是否符合自己的要求,如果符合,点击【保存】即可

点击保存,查看源码

创建DRL规则文件

对象定义完成后,我们来创建一个简单的规则,同样创建Asset,选择【DRL文件】

点击【Add Asset】

选择【DRL规则文件】

创建score-rules.drl

填写drl文件信息

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

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

image-20220710121923944

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

规则文件

场景测试

规则编写完毕后,需要测试通过才可以发布生产,在workbench中,测试也是可以通过配置完成的

点击【Add Asset】,选择【测试场景】

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

测试场景

添加所依赖的数据对象,并配置测试条件于期望结果

新建条目

添加条目

因为我们编写的规则文件中需要从工作内存中获取Order对象进行匹配,所以在测试场景中需要准备Order对象给工作内存,点击【GIVEN】列下的【INSTANCE1】,在右侧的”Test Tools”弹窗中,选择Order类,选择Order类中要测试的字段amount,最后点击【添加】。如下图:

image-20220710152937910

设置amount的值

image-20220710154119680

测试入参已经设置好,接下来还需要设置测试结果输出期望值,点击【EXPECT】列的【INSTANCE2】,在右侧的弹窗中选择Order,并且选择Order类中的score字段,最后点击【添加】

设置期望值

设置期望值中的score值为0

设置score值为0

设置完后,点击【执行】按钮,进行测试

执行测试

测试结果

测试结果

规则发布

规则发布前,需要先配置KieBase与KieSession,也就是配置kmoudule.xml文件,在workbench里面,kmodule.xml文件也是通过界面配置,然后自动生成的。

进入项目主页

点击【order-rules】进入项目主页

点击项目主页的【设置】按钮,在选择【KIE bases*】

设置KIE base

进入配置界面,即可配置,对规则进行灵活的分组,提高规则的可复用性

image-20220710164408544

添加kieSession

点击【build&install】进行构建和安装

构建安装

点击【Deploy】进行发布

发布规则

发布成功后,会在本地maven仓库中生成对应的jar包

在项目中使用部署的规则

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

1
2
3
4
5
6
7
8
9
10
11
<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>

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package com.lhb.order_rules.fact;

public class Order {
private Integer amout;//订单原价金额
private Integer score;//积分

public Integer getAmout() {
return amout;
}

public void setAmout(Integer amout) {
this.amout = amout;
}

public Integer getScore() {
return score;
}

public void setScore(Integer score) {
this.score = score;
}

@Override
public String toString() {
return "Order{" +
"amout=" + amout +
", score=" + score +
'}';
}
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.lhb.test;


import com.lhb.order_rules.fact.Order;
import org.drools.core.io.impl.UrlResource;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.KieRepository;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import java.io.InputStream;

public class TestWorkBench {
@Test
public void test1() throws Exception{
//通过此URL可以访问到maven仓库中的jar包
//URL地址构成:http://ip地址:Tomcat端口号/WorkBench工程名/maven2/坐标/版本号/xxx.jar
String url =
"http://localhost/kie-drools-wb/maven2/com/lhb/order-rules/1.0.0/order-rules-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();

Order order = new Order();
order.setAmout(1000);
session.insert(order);

session.fireAllRules();
session.dispose();
}
}

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信