Flowable-升级为7.0.0.M2-第四节

本文讨论了flowable-ui包的改动,包括流程设计器移除、act_de_model表的去留、JobManager类的调整以及与springcloud的集成变化。作者提供了使用bpmnjs实现的替代方案,以适应Flowable全部流程组件的维护需求。

flowable-ui的包被去掉了

也就是说流程设计器不能用了

act_de_model的表去掉了

保存模板的表没有了,只提供部署流程,发起,任务等功能,模板维护没有了

AbstractMessageBasedJobManager类去掉了

如果重写job的方式需要重新定义AbstractMessageBasedJobManager,参看6.8.0的源码即可。

集成springcloud的版本

 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-alibaba-dependencies</artifactId>
     <version>2022.0.0.0-RC2</version>
     <type>pom</type>
     <scope>import</scope>
 </dependency>
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-dependencies</artifactId>
     <version>2022.0.3</version>
     <type>pom</type>
     <scope>import</scope>
 </dependency>

适配全部Flowable流程组件的bpmnjs实现

为了适配flowable的全部组件,这边实现了一整套的流程模板维护的bpmnjs的实现。
Flowable-plus

<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="ebusiness"> <process id="P20250928204358654ZZNJ1" name="发钱流程1个审批节点3" isExecutable="true"> <extensionElements> <flowable:eventListener class="com.zcy.ebusiness.flow.engine.listeners.FlowProcessEventListener"/> </extensionElements> <startEvent id="root" name="发起人[36348]"/> <userTask id="mg3nw0f6vgu6o" name="发钱审批人[86167]" flowable:assignee="${mg3nw0f6vgu6o_assignee_temp}"> <extensionElements> <flowable:taskListener event="create" class="com.zcy.ebusiness.flow.engine.listeners.ApprovalCreateListener"/> </extensionElements> <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="${multiInstanceHandler.resolveAssignee(execution)}" flowable:elementVariable="mg3nw0f6vgu6o_assignee_temp"> <completionCondition>${multiInstanceHandler.completionCondition(execution)}</completionCondition> </multiInstanceLoopCharacteristics> </userTask> <serviceTask id="approve_service_task_mg3nw0f6vgu6o" name="发钱审批人[86167]_服务任务" flowable:class="com.zcy.ebusiness.flow.engine.service.ApproveServiceTask"/> <endEvent id="end" name="结束节点[25804]"> <terminateEventDefinition/> </endEvent> <sequenceFlow id="sq-id-0ca6c6f47b9847888fb8a30da797405c-4501143" name="连线[keBfw]" sourceRef="mg3nw0f6vgu6o" targetRef="approve_service_task_mg3nw0f6vgu6o"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${12==12}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="sq-id-35059340de4b43c59773939a1cadfb5e-8768595" name="发起人[36348]->发钱审批人[86167]" sourceRef="root" targetRef="mg3nw0f6vgu6o"/> <sequenceFlow id="sq-id-5459b684c4bd45a4819a442bca366c23-9413053" name="发钱审批人[86167]->结束节点[25804]" sourceRef="approve_service_task_mg3nw0f6vgu6o" targetRef="end"/> <startEvent id="sid-897b0f47-b788-426f-820b-8c4e4a2f3c0f"/> <userTask id="sid-bdc53a55-6164-40b3-a02f-d119c91d5cb1"/> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_P20250928204358654ZZNJ1"> <bpmndi:BPMNPlane bpmnElement="P20250928204358654ZZNJ1" id="BPMNPlane_P20250928204358654ZZNJ1"> <bpmndi:BPMNShape id="shape-95ff912a-bb5d-4bbe-b4d2-fae99747caa5" bpmnElement="sid-897b0f47-b788-426f-820b-8c4e4a2f3c0f"> <omgdc:Bounds x="-455.0" y="-235.00002" width="30.0" height="30.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="shape-a236d354-3eec-4316-b349-cc8b86bbe27a" bpmnElement="sid-bdc53a55-6164-40b3-a02f-d119c91d5cb1"> <omgdc:Bounds x="-370.0" y="-260.0" width="100.0" height="80.0"/> </bpmndi:BPMNShape> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions> flowable 版本是 7.0.0 ,springboot 版本 是 3.4.3 上面是 flowable xml 流程图 , 但是在进行 taskService.complete(taskParamDto.getTaskId(), taskParamDto.getParamMap()); 完成审批任务时报错 报错的地方是 execution 是null: protected void setLoopVariable(DelegateExecution execution, String variableName, Object value) { execution.setVariableLocal(variableName, value); } 错误日志: 2025-09-29 09:55:02.158 ERROR 12644 --- [ XNIO-1 task-2] c.z.e.c.s.h.GlobalBizExceptionHandler : 全局异常信息 ex=Cannot invoke "org.flowable.engine.delegate.DelegateExecution.setVariableLocal(String, Object)" because "execution" is null java.lang.NullPointerException: Cannot invoke "org.flowable.engine.delegate.DelegateExecution.setVariableLocal(String, Object)" because "execution" is null at org.flowable.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior.setLoopVariable(MultiInstanceActivityBehavior.java:558) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior.leave(ParallelMultiInstanceBehavior.java:296) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior.internalLeave(ParallelMultiInstanceBehavior.java:233) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior.leave(ParallelMultiInstanceBehavior.java:174) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.bpmn.behavior.AbstractBpmnActivityBehavior.leave(AbstractBpmnActivityBehavior.java:60) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.bpmn.behavior.UserTaskActivityBehavior.trigger(UserTaskActivityBehavior.java:326) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.bpmn.behavior.MultiInstanceActivityBehavior.trigger(MultiInstanceActivityBehavior.java:325) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.agenda.TriggerExecutionOperation.run(TriggerExecutionOperation.java:59) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.common.engine.impl.AbstractEngineConfiguration.lambda$new$0(AbstractEngineConfiguration.java:170) ~[classes/:7.0.0] at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:130) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:114) ~[flowable-engine-7.0.0.jar:7.0.0] at org.flowable.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:72) ~[flowable-engine-7.0.0.jar:7.0.0]
10-01
Flowable 7.0.0和Spring Boot 3.4.3环境下,使用`taskService.complete`完成审批任务时出现`execution`为`null`的空指针异常,可从以下几个方面排查并解决: ### 检查任务是否存在 在调用`taskService.complete`方法之前,需要确保任务是存在的,若任务不存在,则可能会导致`execution`为`null`。 ```java import org.flowable.task.api.Task; import org.flowable.task.api.TaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class ApprovalService { @Autowired private TaskService taskService; public void completeTask(String taskId) { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task != null) { taskService.complete(taskId); } else { System.out.println("任务不存在,任务ID:" + taskId); } } } ``` ### 检查流程实例状态 确保流程实例处于活动状态,若流程实例已经结束或者被挂起,可能会导致`execution`为`null`。可以通过查询流程实例的状态来进行判断。 ```java import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class ProcessInstanceService { @Autowired private RuntimeService runtimeService; public boolean isProcessInstanceActive(String processInstanceId) { ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId) .singleResult(); return processInstance != null && !processInstance.isEnded(); } } ``` ### 检查数据库数据完整性 数据库中的数据可能存在损坏或者不完整的情况,这可能会导致`execution`为`null`。可以检查数据库中`ACT_RU_EXECUTION`表和`ACT_RU_TASK`表的数据是否完整,确保任务和执行实例之间的关联关系正确。 ### 检查流程定义和部署 确保流程定义和部署是正确的,若流程定义存在错误,可能会导致执行实例无法正常创建或者关联。可以通过以下代码检查流程定义是否存在: ```java import org.flowable.engine.RepositoryService; import org.flowable.engine.repository.ProcessDefinition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class ProcessDefinitionService { @Autowired private RepositoryService repositoryService; public boolean isProcessDefinitionExists(String processDefinitionId) { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionId(processDefinitionId) .singleResult(); return processDefinition != null; } } ``` ### 检查事务管理 确保在调用`taskService.complete`方法时,事务管理是正确的。若事务管理不当,可能会导致数据不一致,从而引发`execution`为`null`的异常。可以使用Spring的`@Transactional`注解来确保事务的一致性。 ```java import org.flowable.task.api.TaskService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class TransactionalApprovalService { @Autowired private TaskService taskService; @Transactional public void completeTaskTransactional(String taskId) { taskService.complete(taskId); } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值