1,创建空间和项目
WorkBench中存在空间和项目的概念。我们在使用WorkBench时首先需要创建空间(Space),在空间中创建项目,在项目中创建数据对象、规则文件等。
2,创建空间
第一步:登录WorkBench后进行系统首页,点击首页中的Design区域进入项目列表页面
创建空间dream21th
进入空间dream21th,点击新增项目
进入到work_project项目
3, 创建数据对象
创建对象Student,并添加属性name
定义两个属性name和age
保存新建的对象
4,创建DRL规则文件
创建Student.drl文件校验并保存
可以看到DRL规则文件页面分为两个部分:左侧为项目浏览视图、右侧为编辑区域,需要注意的是左侧默认展示的不是项目浏览视图,需要点击上面设置按钮,选择“资料库视图”和“显示为文件夹”,如下图所示:
5,创建测试场景
前面我们已经创建了Person数据对象和person规则文件,现在我们需要测试一下规则文件中的规则,可以通过创建测试场景来进行测试。
第一步:在项目页面点击Create New Asset按钮选择“测试场景”,弹出创建测试场景窗口,并创建Student的测试场景
第二步: 创建Student的fact对象
第三步 点击保存并运行
6创建会话
点击setting
选择知识库和会话
点击添加创建kb1
创建会话
7编译并部署
默认部署好的文件地址
8创建测试方法
@Test
public void test_workbench() throws Exception{
//通过此URL可以访问到maven仓库中的jar包
//URL地址构成:http://ip地址:Tomcat端口号/WorkBench工程名/maven2/坐标/版本号/xxx.jar
String url =
"http://192.168.43.141:8080/kie-drools-wb/maven2/com/dream21th/work_project/1.0.0/work_project-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();
com.dream21th.work_project.Student student = new com.dream21th.work_project.Student();
student.setAge(10);
student.setName("黎明");
session.insert(student);
session.fireAllRules();
session.dispose();
}
|
创建Stduent类,注意包名必须和workbench中一致
package com.dream21th.work_project;
import lombok.*;
import java.util.List;
/*
* @Author dream21th
**/
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private String name;
private String result;
private Integer age;
private String sex;
private List<String> subjects;
}
|
执行结果
| SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 黎明 |
执行单元测试可以发现控制台已经输出了相关内容。通过WorkBench修改规则输出内容并发布,再次执行单元测试可以发现控制台输出的内容也发生了变化。
通过上面的案例可以发现,我们在IEDA中开发的项目中并没有编写规则文件,规则文件是我们通过WorkBench开发并安装部署到maven仓库中,我们自己开发的项目只需要远程加载maven仓库中的jar包就可以完成规则的调用。这种开发方式的好处是我们的应用可以和业务规则完全分离,同时通过WorkBench修改规则后我们的应用不需要任何修改就可以加载到最新的规则从而实现规则的动态变更。
代码地址: https://gitee.com/dream21th/drools-study/tree/master/demo6