其实本来我也是打算使用Tomcat来部署Workbench的,但是在网上看了几篇文章,超级繁琐的配置、各种版本。实在看不下去了索性就直接使用Docker来部署了。本次部署的版本是最新稳定版,对应drools的7.14.0.Final版本。

1. 拉取镜像

1
docker pull jboss/drools-workbench-showcase:latest

镜像文件比较大,870多M,可能需要一些时间,不要着急。

2. 配置

镜像拉取完毕后首先通过以下命令启动

1
docker run  -p 8080:8080 -p 8001:8001 -d --name drools-workbench jboss/drools-workbench-showcase:latest

进入容器

1
docker exec -it 容器id /bin/bash

Workbench的日志存在/opt/jboss/wildfly/standalone/log/目录

我们现在要做的是进入/opt/jboss/wildfly/standalone/configuration目录,打开standalone-full-drools.xml文件新增一条配置

1
<property name="org.uberfire.nio.git.dir" value="/opt/jboss/wildfly/mygit"/>

然后退出容器之后重启一下容器

1
docker restart 容器id

紧接着你就可以去浏览器访问了:ip:8080/drools-wb

3. 构建规则文件

使用默认用户名密码admin登陆系统,在欢迎页选择新建一个projects

按照如下操作创建一个项目

接着呢,进入drools-test项目,点击屏幕右方的Add Asset按钮。我在这里为大家演示一下下方的三个如何操作,剩下就要靠你自己去探索了。

  1. 软件包,这个是跟Java中的package一样的,上方input是包名,下方是上级包名,我在这里创建一个一个包entity,全路径是cn.org.zhixiang.entity

  2. 数据对象,这个数据对象其实就是Java中的实体类了,我们这里创建一个名为Dog的对象,然后进入这个数据对象就会发现有一个添加字段的按钮可以供我们添加各种字段,然后左侧的源代码可以让我们直观的感受到创建之后的对象到底为何物。我在这里为Dog添加了name和age属性

  3. 向导型规则模板,这个就是我们的规则对象,创建一个规则对象hello,进入hello之后有一个事是必须注意的,我们想引用刚才创建的Dog对象,得先去数据对象标签页新建一个条目,选择类型是cn.org.zhixiang.entity.Dog.然后在会的model标签页,如果你看了前两篇文章的话我想你一定知道该如何操作。我在这里是这样操作的:

    其实源码就跟我第一篇文章写的HelloWord差不多

  4. 接下来就可以构建了
    回到这个项目的主页,单击build按钮,然后再单击Deploy按钮,这个jar包就被发布到了WorkBench的maven仓库里,我们可以通过访问如下地址来得到这个jar包

1
ip:8080/drools-wb/maven2/cn/org/zhixiang/drools-test/0.0.1/drools-test-0.0.1.jar

4. Java获取规则文件

规则文件既然已经发布了,那么接下来就是Java出场的时候了。

  1. 创建一个实体Dog,这里注意的是包名、类名还有属性都要与上方在Workbench创建的保持一致。
  2. 创建DroolsApplicationWorkBenchTests测试类
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
@RunWith(SpringRunner.class)
public class DroolsApplicationWorkBenchTests {
@Test
public void testWorkbench() {
String url = "http://ip:8080/drools-wb/maven2/cn/org/zhixiang/drools-test/0.0.1/drools-test-0.0.1.jar";
KieServices kieServices = KieServices.Factory.get();
KieRepository kieRepository = kieServices.getRepository();
UrlResource resource = (UrlResource) kieServices.getResources().newUrlResource(url);
resource.setBasicAuthentication("enabled");
resource.setPassword("admin");
resource.setUsername("admin");
InputStream is = null;
try {
is = resource.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
KieModule kieModule = kieRepository.addKieModule(kieServices.getResources().newInputStreamResource(is));
KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());
KieSession kieSession = kieContainer.newKieSession();
Dog dog = new Dog();
dog.setName("大黄");
kieSession.insert(dog);
kieSession.fireAllRules();
}
}

执行完测试方法以后你的控制台打印出了大黄出场四个字么?

本文所有源码:https://github.com/shiyujun/drools

本文出自http://zhixiang.org.cn/,转载请保留

Drools规则引擎入门指南(三)——使用Docker部署Workbench的更多相关文章

  1. Drools规则引擎入门指南(一)

    最近项目需要增加风控系统,在经过一番调研以后决定使用Drools规则引擎.因为项目是基于SpringCloud的架构,所以此次学习使用了SpringBoot2.0版本结合Drools7.14.0.Fi ...

  2. Drools规则引擎入门指南(二)

    本篇博客主要讲解Drools常用的属性以及函数 属性 首先我们在resources\rules文件夹下创建一个Property.drl,还有一个DroolsApplicationPropertyTes ...

  3. Drools规则引擎

    一.简介 Drools is a Business Rules Management System (BRMS) solution. It provides a core Business Rules ...

  4. Drools规则引擎-如果判断某个对象中的集合是否包含指定的值

    规则引擎集合相关处理 在实际生产过程中,有很多关于集合的处理场景,比如一个Fact对象中包含有一个集合,而需要判断该集合是否包含某个值.而Drools规则引擎也提供了多种处理方式,比如通过from.c ...

  5. Drools规则引擎-如果Fact对象参数为null如何处理

    问题场景 在技术交流群(QQ:715840230)中有同学提出这样的问题: 往kiesession里面传入fact,如果不做输入检查fact里面有些字段可能是null值.但是如果在外面做输入检查,规则 ...

  6. Drools 规则引擎应用

    规则引擎-drools 1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 .... ...

  7. Drools 规则引擎应用 看这一篇就够了

    1 .场景 1.1需求 商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分 ...... 1.2传统做法 1 ...

  8. Drools 规则引擎环境搭建

    一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drool ...

  9. SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

    本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...

随机推荐

  1. rabbitmq 启动报错 Failed to get nic info

    这个报错 基本搜索不到什么有效信息 解决办法: hostnamectl set-hostname xxx.local # 先把rabbitmq进程杀掉$ ps -ef | grep rabbitmq ...

  2. swift 自动布局设置 tableview 的 tableHeaderView 的高度

    class headerView: UIView { var whiteView = UIView().then { $.backgroundColor = UIColor.red } overrid ...

  3. 简单的StringBuffer实现

    package com.letv.test.base; import java.util.Arrays; public class StringBuffer { private char[] valu ...

  4. node.js 线程调试配置

    { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linki ...

  5. Django使用第三方模块django-password-reset重置密码

    网上关于django第三方模块django-password-reset重置密码的几篇博客有一个严重的bug 见博客:https://blog.csdn.net/qq_42820268/article ...

  6. Blog Part I

    写随笔是不可能写的,这辈子都不可能写的. ——https://music.163.com/song?id=5039077 ============ Blog?不,并不擅长,毕竟Blog不是Novel, ...

  7. C++数论板题(弹药科技):Lengendre定理和欧拉函数

    弹药科技 时间限制: 1 Sec 内存限制: 128 MB 题目描述 经过精灵族全力抵挡,精灵终于坚持到了联络系统的重建,于是精灵向人类求助, 大魔法师伊扎洛决定弓}用博士的最新科技来抗敌. 伊扎洛: ...

  8. 星星打分,今天我们就用Jq代码来实现,看看究竟是如何实现的 其中有两个重要的事件mouseenter和mouseleave效果如下图

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> <met ...

  9. 学习Acegi应用到实际项目中(9)- 实现FilterInvocationDefinition

    在实际应用中,开发者有时需要将Web资源授权信息(角色与授权资源之间的定义)存放在RDBMS中,以便更好的管理.事实上,一般的企业应用都应当如此,因为这样可以使角色和Web资源的管理更灵活,更自由.那 ...

  10. 2019.03.26 bzoj4447: [Scoi2015]小凸解密码(线段树)

    传送门 题意简述:咕咕咕 思路:考虑预处理出bbb数组,然后每次改动aaa都只会对第iii和i+1i+1i+1这两个位置产生影响,于是可以用线段树来维护bbb数组. 现在求答案的方法是断环为链,倍增整 ...