JBPM 7.31:如何暴露自定义REST服务关闭任务并实现流程等待外部调用
在JBPM 7.31中实现自定义REST服务触发任务关闭的方案
可以,JBPM完全支持扩展自定义REST服务来处理自定义任务,同时能通过流程设计结合外部调用的方式,实现流程暂停等待外部触发后继续执行的需求。以下是具体实现步骤:
一、流程设计:添加等待触发节点
在JBPM Designer中,为流程添加一个Receive Task节点(专门用于等待外部触发的节点):
- 给节点设置唯一标识名称(比如
waitExternalTrigger) - 配置触发信号(Signal),设置信号名称(比如
completeExternalTask),流程走到该节点时会自动暂停,等待对应信号触发
二、开发自定义REST服务
JBPM基于WildFly运行,可通过JAX-RS扩展自定义REST接口,依赖JBPM核心API实现任务触发逻辑:
1. 编写REST资源类
创建JAX-RS类,暴露接口用于触发流程继续:
import org.kie.api.runtime.KieSession; import javax.inject.Inject; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; @Path("/custom/task") public class CustomTaskCompletionResource { @Inject private KieSession kieSession; @POST @Path("/complete") public Response completeTask(@QueryParam("processInstanceId") Long processInstanceId) { // 触发预设的信号,唤醒对应流程实例 kieSession.signalEvent("completeExternalTask", null, processInstanceId); return Response.ok("Process instance " + processInstanceId + " resumed successfully").build(); } }
2. 部署服务
- 将编译后的类打包成JAR文件,放入JBPM服务器的
standalone/deployments目录 - 确保服务器的JAX-RS扫描机制能识别到该资源类(可通过添加
@ApplicationPath注解的类来配置扫描范围)
三、触发流程继续
- 启动目标流程实例,确认流程停在
Receive Task节点 - 调用自定义REST接口触发流程:
curl -X POST "http://localhost:8080/jbpm-rest/custom/task/complete?processInstanceId=YOUR_PROCESS_INSTANCE_ID"
- 检查JBPM控制台,确认流程已继续执行直至结束
替代方案:使用JBPM原生API
如果不需要完全自定义逻辑,也可以直接用JBPM原生REST API:
- 触发信号:
POST /runtime/{deploymentId}/signal,传入信号名称和流程实例ID - 完成用户任务:
POST /runtime/{deploymentId}/tasks/{taskId}/complete(适用于User Task类型的等待节点)
内容的提问来源于stack exchange,提问作者Francesco Motta
相关产品推荐
相关产品推荐

