内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kmyhy/article/details/90171030
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kmyhy/article/details/90171030
Kie Server 提供了 REST API,这些 API 是以 http://localhost:8080/kie-server/services/rest
开始的 API。
API 文档: https://www.jbpm.org/api-docs/kie-server/paths.html ,Swagger 文档地址: http://localhost:8080/kie-server/docs
业务中心(Business Central)也提供了类似的 API,端点地址以 http://localhost:8080/business-central/rest
开始。你可以使用这两套 API 中的任意一种,也可以两者一起使用。Swagger 文档地址: http://localhost:8080/kie-server/docs
这些 API 的访问方式十分简单,直接通过浏览器或者 postman 访问 API 端点地址即可。
jBPM 使用 Basic Auth 进行登录认证,如果使用 postman 的话,请设置 Authorization 为 Basic Auth。
kie-remote-client API
要在 java 中使用 REST API,需要引入 kie-remote-client 包,目前最新版本是 7.18.0 Final。
<dependency>
<groupId>org.kie.server</groupId>
<artifactId>kie-server-client</artifactId>
<version>${runtime.version}</version>
</dependency>
启动流程
对远程 API 调用的方法都封装在 KieServerCalls 类中。KieServerCalls 同时会保存一些服务器相关的参数,比如远程服务器地址、容器 id、服务器管理员登录账号和密码。要启动流程实例,首先需要构造一个 KieServerCalls 对象,并通过它的构造方法来指定这些参数:
KieServerCalls kieServerCalls = new KieServerCalls(SERVER_URL, CONTAINER_ID,ADMIN_USER, ADMIN_PWD);
然后构造流程实例变量:
Map<String, Object> params = new HashMap<String, Object>();
params.put("applicant", "zhangsan1");
...
然后在启动流程时传入流程实例变量:
Long processInstanceId = kieServerCalls.startProcess(CONTAINER_ID,PROCESS_ID,params);
startProcess 方法启动了流程实例:
public Long startProcess(String containerId, String processId, Map<String, Object> params) {
ProcessServicesClient processClient = kieServicesClient.getServicesClient(ProcessServicesClient.class);
Long processInstanceId = processClient.startProcess(containerId, processId, params);
System.out.println("processInstanceId: " + processInstanceId);
return processInstanceId;
}
可以看到,通过远程 API 启动流程实例和之前稍有不同。首先需要构建一个 KieServicesConfiguration 对象,用这个对象设置一些必要参数,比如用户名密码。然后用这个对象创建一个 KieServicesClient(这两个对象在构造方法中初始化)。然后通过 KieServicesClient 获取服务,比如 processService,然后再用 processService 启动流程 —— 注意,启动流程时传入了流程变量。
远程 API 有许多类都以 Client 结尾。
查询待办
然后是查询待办:
List<TaskSummary> tasks = kieServerCalls.findTasksAssignedAsPotentialOwner(userId, pwd);
它调用了 kieServerCalls 的 findTasksAssignedAsPotentialOwner 方法:
public List<TaskSummary> findTasksAssignedAsPotentialOwner(String user, String password) {
KieServicesConfiguration configuration = KieServicesFactory.newRestConfiguration(kieServerUrl, user, password);
configuration.setMarshallingFormat(MarshallingFormat.JAXB);
KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(configuration);
UserTaskServicesClient taskClient = kieServicesClient.getServicesClient(UserTaskServicesClient.class);
List<TaskSummary> tasks = null;
try {
tasks = taskClient.findTasksAssignedAsPotentialOwner(user, 0, 10);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Tasks: " + tasks + "; tasks.size() = " + tasks.size());
return tasks;
}
远程 API 在调用时需要对用户身份进行验证,所以参数中需要传入用户名和密码。这里的用户和启动流程时的用户不是同一个,启动流程时使用的是管理员用户 krisv,而查询待办时使用的用户是普通用户,比如 zhangsan1。
这里的用户,比如 zhangsan1 和 krisv,必须是在业务中心(workbench)中真实存在的用户。
因为用户名密码是通过 KieServicesConfiguration 来设置的,所以这里需要重新 new 一个 KieServicesConfiguration,并设置新的用户名和密码。然后用这个设置创建新的 KieServicesClient,才能查询到 zhangsan1 的待办。如果你共用类的 configuration 对象和 kieServicesClient 去查询待办,那么只能查到空列表。
办理任务
处理节点任务时,通常需要准备输出参数:
Map<String, Object> outParams = new HashMap<String, Object>();
outParams.put("applicantSubmit_out", true);// 设置任务的输出变量。
然后调用 completeTask 完成任务:
kieServerCalls.completeTask(userId,pwd,tasks.get(0).getId(),outParams);
completeTask 方法定义如下:
public void completeTask(String user, String password, Long taskId, Map<String, Object> params) {
KieServicesConfiguration configuration = KieServicesFactory.newRestConfiguration(kieServerUrl, user, password);
configuration.setMarshallingFormat(MarshallingFormat.JAXB);
KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(configuration);
UserTaskServicesClient taskClient = kieServicesClient.getServicesClient(UserTaskServicesClient.class);
System.out.println("Complete task: " + taskId);
taskClient.startTask(containerId, taskId, user);
taskClient.completeTask(containerId, taskId, user, params);
}
同理,办理任务时也需要验证用户名密码,因为每次办理任务时,很可能不会是同一个用户,因此也只能使用新的 configuration 和 servicesCliet 进行办理。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【每日笔记】【Go学习笔记】2019-01-04 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-02 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-07 Codis笔记
- Golang学习笔记-调度器学习
- Vue学习笔记(二)------axios学习
- 算法/NLP/深度学习/机器学习面试笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
逆向工程核心原理
[韩] 李承远 / 武传海 / 人民邮电出版社 / 2014-4-25 / 109.00元
本书十分详尽地介绍了代码逆向分析的核心原理。作者在Ahnlab 研究所工作多年,书中不仅包括其以此经验为基础亲自编写的大量代码,还包含了逆向工程研究人员必须了解的各种技术和技巧。彻底理解并切实掌握逆向工程这门技术,就能在众多IT 相关领域进行拓展运用,这本书就是通向逆向工程大门的捷径。 想成为逆向工程研究员的读者或正在从事逆向开发工作的开发人员一定会通过本书获得很大帮助。同时,想成为安全领域......一起来看看 《逆向工程核心原理》 这本书的介绍吧!