简述

drools的BRMS(业务规则管理系统)
起先叫 guvnor 然后叫 drools-workbench
从7.18版本开始叫 Business Central Workbench

Business-Central Workbench == Drools Workbench + jBPM Workbench
drools-workbench 用来管理规则
kie-server 则是运行规则的容器服务

老版本Workbench 有提供支持tomcat的war包 新版本只支持部署到wildfly中 , 还好有docker镜像,不用为wildfly的配置而分心。

docker镜像有两种jboss/business-central-workbench-showcasejboss/business-central-workbench 带 showcase 的已经配好一些默认账户了, 可直接使用(用于生产的话,还是应当单独配的)。

drools版本为 7.28.0.Final

执行脚本

把启动内存调大点 同时设置git绑定0.0.0.0网络

 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
root@sharezx:/mnt#
root@sharezx:/mnt# jopts=" -Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8 -Dorg.uberfire.nio.git.ssh.host=0.0.0.0 "
root@sharezx:/mnt#
root@sharezx:/mnt# docker run -p 8080:8080 -p 8001:8001 -e JAVA_OPTS="$jopts" -d --name drwb jboss/business-central-workbench-showcase:7.28.0.Final
e2fc905553936b8ff88033d677568fbd8b8167dc1efe2f85d3ca465b4ca82739
root@sharezx:/mnt#
root@sharezx:/mnt#
root@sharezx:/mnt#
root@sharezx:/mnt# docker logs -f drwb
Running business-central workbench on JBoss Wildfly...
JAVA_OPTS already set in environment; overriding default settings with values:  -Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8 -Dorg.uberfire.nio.git.ssh.host=0.0.0.0
=========================================================================

  JBoss Bootstrap Environment

  JBOSS_HOME: /opt/jboss/wildfly

  JAVA: /usr/lib/jvm/java/bin/java

  JAVA_OPTS:  -server  -Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8 -Dorg.uberfire.nio.git.ssh.host=0.0.0.0

=========================================================================

08:45:37,948 INFO  [org.jboss.modules] (main) JBoss Modules version 1.8.6.Final
08:45:39,524 INFO  [org.jboss.msc] (main) JBoss MSC version 1.4.3.Final
08:45:39,555 INFO  [org.jboss.threads] (main) JBoss Threads version 2.3.2.Final

。。。
略去
。。。
08:47:09,102 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0060: Http management interface listening on http://127.0.0.1:9990/management
08:47:09,102 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0051: Admin console listening on http://127.0.0.1:9990
08:47:09,102 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 14.0.1.Final (WildFly Core 6.0.2.Final) started in 92704ms - Started 860 of 1043 services (326 services are lazy, passive or on-demand)
08:47:29,341 INFO  [org.kie.workbench.common.screens.datasource.management.util.ServiceUtil] (pool-17-thread-1) Getting reference to managed bean: WildflyDataSourceProvider
08:47:29,372 INFO  [org.kie.workbench.common.screens.datasource.management.util.ServiceUtil] (pool-17-thread-1) Getting reference to managed bean: WildflyDriverProvider
08:47:30,627 INFO  [org.kie.workbench.common.screens.datasource.management.backend.DataSourceManagementBootstrap] (pool-17-thread-1) Initialize deployments task finished successfully.

在看到 successfully 时,说明启动完成
ctrl + c 退出日志查看

接着启动kie-server
这个启动比较快就不看日志了 稍等一会
curl 可看到数据正确返回

 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
root@sharezx:/mnt# docker run -p 8180:8080 -d --name kwb --link drwb:kie_wb jboss/kie-server-showcase:7.18.0.Final
978bee953f4fcc5a8bfdfae449d2ed3ea26f1525eed0c761f0d953cc5611bc35
root@sharezx:/mnt#
root@sharezx:/mnt# curl -u admin:admin http://192.168.88.3:8180/kie-server/services/rest/server/
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response type="SUCCESS" msg="Kie Server info">
    <kie-server-info>
        <capabilities>KieServer</capabilities>
        <capabilities>BRM</capabilities>
        <capabilities>BPM</capabilities>
        <capabilities>CaseMgmt</capabilities>
        <capabilities>BPM-UI</capabilities>
        <capabilities>BRP</capabilities>
        <capabilities>DMN</capabilities>
        <capabilities>Swagger</capabilities>
        <location>http://172.17.0.4:8080/kie-server/services/rest/server</location>
        <messages>
            <content>Server KieServerInfo{serverId='kie-server-978bee953f4f', version='7.18.0.Final', name='kie-server-978bee953f4f', location='http://172.17.0.4:8080/kie-server/services/rest/server', capabilities=[KieServer, BRM, BPM, CaseMgmt, BPM-UI, BRP, DMN, Swagger]', messages=null', mode=DEVELOPMENT}started successfully at Mon Nov 25 08:56:02 UTC 2019</content>
            <severity>INFO</severity>
            <timestamp>2019-10-28T08:56:02.443Z</timestamp>
        </messages>
        <mode>DEVELOPMENT</mode>
        <name>kie-server-978bee953f4f</name>
        <id>kie-server-978bee953f4f</id>
        <version>7.18.0.Final</version>
    </kie-server-info>
</response>
root@sharezx:/mnt#

执行脚本-整理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
docker pull jboss/business-central-workbench-showcase:7.28.0.Final
docker pull jboss/kie-server-showcase:7.28.0.Final


jopts=" -Xms2048m -Xmx2048m -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8 -Dorg.uberfire.nio.git.ssh.host=0.0.0.0 "


docker run -p 8080:8080 -p 8001:8001 -e JAVA_OPTS="$jopts" -d --name drwb jboss/business-central-workbench-showcase:7.28.0.Final
docker logs -f drwb


docker run -p 8180:8080 -d --name kwb --link drwb:kie_wb jboss/kie-server-showcase:7.18.0.Final
curl -u admin:admin http://192.168.88.3:8180/kie-server/services/rest/server/

web面板的账号

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

使用规则管理平台

访问管理平台 http://192.168.88.3:8080/business-central/

输入账户 密码 admin admin 点击 design 点击默认空间 MySpace

创建工程

点击创建 右侧的 Add Project 创建 demo01 工程

创建规则

  • 先创建fact
    点击 Add Asset 选择 数据对象 名称为 Person 软件包默认 com.myspace.demo01 点击 确定

进入 Person的编辑界面 点击 添加字段 设置 id = age 类型为 Integer 点击 创建

fact编辑完毕 点击右上方的 保存 按钮 在保存按钮的最右侧有个叉叉 ,点击叉叉 回到工程目录

  • 创建drl规则文件
    点击 Add Asset 选择 DRL文件 名称为 hello 点击 确定

设置规则内容为

1
2
3
4
5
6
7
8
package com.myspace.demo01;

rule "hello"
when 
  ps: Person()
then
  ps.setAge(22);
end

然后同上一步一样
保存 点叉叉

创建测试

点击 Add Asset 选择 Test Scenario(Legacy) 名称为 test01 点击 确定

点击 GIEVN 弹出对话框 填写事实名称为 p 再点旁边的添加

点击 EXPECT 弹出对话框 点击第二行 事实值 p 右侧的 添加 按钮

然后可以看到 Person 'p' 有下列值 点击这段文字 弹出对话框 选择age 按确定

在新出现的 age 等于后面输入框中填入 5 点击右上方的 运行测试场景 可以看到出现了爆红的警告 并且提示实际结果为22

调整期望结果为22 再次运行 则通过 点击保存 和 叉叉 至此 测试结束

工程的构建部署

在工程标题 demo01下面 有个 资产 选项 资产的最右侧 点击 设置

可看到 General Settings 下面有个git 的url 为 ssh://0.0.0.0:8001/MySpace/demo01 这就是该项目的git仓库地址

如果clone到本地 可发现该项目就是个maven项目

1
git clone http://admin:admin@192.168.88.3:8080/business-central/git/MySpace/demo01

构建

继续看管理平台的工程
点击构建旁的下拉箭头,点击 Build & Install 提示成功后 点击右上角问号❓和药箱之间的 设置 按钮 点击 Artifacts

可以看到刚刚的项目已经构建发布到其maven仓库了

部署

回到demo01项目页面 点击 部署 在提示 部署成功后 点击左上方Menu菜单旁的下拉箭头 选择 部署一栏的 执行服务器

可以看到 kie-server-978bee953f4f 是kie-server的一个节点 也就是最开始启动的 kwb 容器

第二列 DEPLOYMENT UNITS 下方 可看到之前的部署单元 demo01_1.0.0-SNAPSHOT

通过http请求也能查询到部署单元

1
curl -H "Content-Type:application/json" -u admin:admin http://192.168.88.3:8180/kie-server/services/rest/server/containers

远程调用

发起请求

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
curl -H "Content-Type:application/json" -u admin:admin -X POST --data '{
  "lookup" : null,
  "commands" : [ {
    "insert" : {
      "object" : {"com.myspace.demo01.Person":{"age" : null}},
      "out-identifier" : "p",
      "return-object" : true,
      "entry-point" : "DEFAULT",
      "disconnected" : false
    }
  }, {
    "fire-all-rules" : {
      "max" : -1,
      "out-identifier" : null
    }
  }, {
    "dispose" : { }
  } ]
}'  'http://192.168.88.3:8180/kie-server/services/rest/server/containers/instances/demo01'


响应结果为

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
  "type" : "SUCCESS",
  "msg" : "Container demo01 successfully called.",
  "result" : {
    "execution-results" : {
      "results" : [ {
        "value" : {"com.myspace.demo01.Person":{
  "age" : 22
}},
        "key" : "p"
      } ],
      "facts" : [ {
        "value" : {"org.drools.core.common.DefaultFactHandle":{
  "external-form" : "0:1:1922407796:1922407796:1:DEFAULT:NON_TRAIT:com.myspace.demo01.Person"
}},
        "key" : "p"
      } ]
    }
  }
}

可以看到person的age 被更新成了 22 测试成功