内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 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/深度学习/机器学习面试笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
数据结构与问题求解
韦斯 / 清华大学出版社 / 2011-8 / 89.50元
《数据结构与问题求解(Java语言版)(第4版)》是专为计算机科学专业的两个学期课程而设计的,从介绍什么足数据结构开始,继而对高级数据结构与算法进行分析。《数据结构与问题求解(Java语言版)(第4版)》以独特的方式,清晰地将每种数据结构的接口与其实现分离开来,即将如何使用数据结构与如何对数据结构编程相分离。《数据结构与问题求解(Java语言版)(第4版)》从抽象思维和问题求解的角度出发,为数据结......一起来看看 《数据结构与问题求解》 这本书的介绍吧!