Workbench使用

1,创建空间和项目

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

2,创建空间

第一步:登录WorkBench后进行系统首页,点击首页中的Design区域进入项目列表页面Workbench使用_第1张图片

创建空间dream21th

Workbench使用_第2张图片

进入空间dream21th,点击新增项目

Workbench使用_第3张图片

进入到work_project项目

Workbench使用_第4张图片

3, 创建数据对象

Workbench使用_第5张图片

创建对象Student,并添加属性name

Workbench使用_第6张图片

定义两个属性name和age

Workbench使用_第7张图片

保存新建的对象

Workbench使用_第8张图片

4,创建DRL规则文件

Workbench使用_第9张图片

创建Student.drl文件校验并保存

Workbench使用_第10张图片

 

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

Workbench使用_第11张图片

5,创建测试场景

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

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

Workbench使用_第12张图片

第二步: 创建Student的fact对象

Workbench使用_第13张图片

Workbench使用_第14张图片

第三步 点击保存并运行

6创建会话

点击setting

Workbench使用_第15张图片

选择知识库和会话

Workbench使用_第16张图片

点击添加创建kb1

Workbench使用_第17张图片

创建会话

Workbench使用_第18张图片

7编译并部署

Workbench使用_第19张图片

默认部署好的文件地址

Workbench使用_第20张图片

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 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

你可能感兴趣的:(drools规则引擎)