JBPM 7.17 学习笔记(10)REST API

栏目: 后端 · 前端 · 发布时间: 7年前

内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 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 进行办理。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

An Introduction to Probability Theory and Its Applications

An Introduction to Probability Theory and Its Applications

William Feller / Wiley / 1991-1-1 / USD 120.00

Major changes in this edition include the substitution of probabilistic arguments for combinatorial artifices, and the addition of new sections on branching processes, Markov chains, and the De Moivre......一起来看看 《An Introduction to Probability Theory and Its Applications》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换