上一节演示了 workbench 的搭建,规则编写、规则测试、规则部署
还通过http使用了部署在kie-server中的规则
下面演示使用java客户端,调用部署在kie-server中的规则。
远程调用kie-server
fact对象
只用到一个Person类,就不配置maven的方式引入fact 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
|
package com.myspace.demo01;
/**
* This class was automatically generated by the data modeler tool.
*/
public class Person implements java.io.Serializable {
static final long serialVersionUID = 1L;
private java.lang.Integer age;
public Person() {
}
public java.lang.Integer getAge() {
return this.age;
}
public void setAge(java.lang.Integer age) {
this.age = age;
}
public Person(java.lang.Integer age) {
this.age = age;
}
}
|
发起调用
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
|
import com.alibaba.fastjson.JSONObject;
import com.myspace.demo01.Person;
import org.kie.api.KieServices;
import org.kie.api.command.Command;
import org.kie.api.command.KieCommands;
import org.kie.api.runtime.ExecutionResults;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.api.model.KieServiceResponse;
import org.kie.server.api.model.ServiceResponse;
import org.kie.server.client.KieServicesConfiguration;
import org.kie.server.client.KieServicesFactory;
import org.kie.server.client.RuleServicesClient;
import java.util.List;
public class KieServerDemo {
static RuleServicesClient ruleServicesClient;
static KieCommands commandsFactory;
static {
KieServices ks = KieServices.Factory.get();
commandsFactory = ks.getCommands();
var serverUrl = "http://192.168.88.3:8180/kie-server/services/rest/server";
KieServicesConfiguration kieServicesConfiguration = KieServicesFactory
.newRestConfiguration(serverUrl, "admin", "admin", 10000L);
kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON);
ruleServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration)
.getServicesClient(RuleServicesClient.class);
}
public static void main(String[] args) {
var kie_container_id = "demo01";
var p = new Person();
var oid = "p";
var commands = List.of(commandsFactory.newInsert(p, oid), commandsFactory.newFireAllRules(), commandsFactory.newDispose());
Command batchExecutionCommand = commandsFactory.newBatchExecution(commands);
ServiceResponse<ExecutionResults> executeResponse = ruleServicesClient.executeCommandsWithResults(kie_container_id,
batchExecutionCommand);
if (executeResponse.getType() == KieServiceResponse.ResponseType.SUCCESS) {
Person result = (Person) executeResponse.getResult().getValue(oid);
System.out.println("调用成功--" + JSONObject.toJSONString(result));
} else {
System.out.println("调用失败--" + executeResponse.getMsg());
}
System.out.println("done--------");
}
}
|
maven仓库的配置
本地在调用远程kie-server时,使用了Person类
那项目该如何依赖该fact类呢?
直接拷贝源码、或下载jar到本地、或以坐标方式引入远程jar等
方案1
fact的jar在workbench节点的maven仓库中
windows本机开发,配置本机maven从workbench节点拉取jar
需要配置两个参数 仓库地址,用户名密码
1
2
3
4
5
|
<repository>
<id>drools-m2-repo</id>
<name>drools-m2-repo</name>
<url>http://192.168.88.3:8080/business-central/maven2/</url>
</repository>
|
1
2
3
4
5
|
<server>
<id>drools-m2-repo</id>
<username>admin</username>
<password>admin</password>
</server>
|
应配置在项目的pom.xml中
或配置在maven全局配置文件 settings.xml 中
方案2
通常每个公司都有自建的maven私服
那 fact的jar 应发布到maven私服上
同时配置 workbench节点 使用该maven私服
构建部署时,kjar会被发布到该maven私服
查阅drools文档关于 workbench 的配置后
workbench 有两个存储位置 local M2 repository 、Guvnor M2 repository
可通过管理面板的菜单来调整位置( 系统设置 > artifact Repository )
local M2 repository 通常存储路径是 ${user.home}/.m2/ 该版本下docker容器中的位置为 /opt/jboss/.m2/repository
Guvnor M2 repository 由workbench中内嵌的maven仓库 该版本下docker容器中的位置为 /opt/jboss/wildfly/bin/repositories/kie/glob
Guvnor M2 repository 可由系统变量 org.guvnor.m2repo.dir 进行覆盖
分析后感觉没提供 settings.xml
的配置入口
通常的路径 ${user.home}/.m2/settings.xml
这个没测,有可能可行
暴力点的手段
由于项目本身就是maven项目,所以通过git方式把项目拉取下拉
直接修改pom.xml中的配置,达到deploy时推送到指定私服的目的
todo
文档该小节 提到的属性 kie.maven.settings.custom
貌似是针对kjar的
推测该属性或许可与插件kie-maven-plugin
https://docs.jboss.org/drools/release/7.28.0.Final/drools-docs/html_single/index.html#_settings_xml_and_remote_repository_setup
kie-server的maven配置
maven的安装目录下: $M2_HOME/conf/settings.xml
用户目录下: ${user.home}/.m2/settings.xml
系统属性指定目录下:kie.maven.settings.custom=/xx/xx/settings.xml
http://localhost:8080/business-central/maven2/
-Dorg.guvnor.m2repo.dir
结论
在工作环境倾向第二种方案
所有项目都是使用公共的共同的私服
fact单独一个jar发布
kjar以坐标方式引入fact-jar 同时也发布到私服上
如果觉着kjar中的规则数据应保密, 也可不发布到私服上
文章作者
duansheli
上次更新
2019-12-25
(325c7b3)