taskService.completeTask(task.getId());的执行过程分析

本文深入分析了Jbpm中`taskService.completeTask(task.getId())`的执行过程,从TaskImpl的设置到数据库交互,再到CommandService的调用,详细解释了CompleteTaskCmd中的操作,包括任务状态更新、历史事件处理、数据库会话操作以及ExecutionImpl的信号传递。整个流程涉及原子操作、活动行为和流程控制,展示了Jbpm内部任务完成的复杂逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

taskService.completeTask(task.getId());
单步跟踪下去的顺序
1、执行函数体内,得到dbid,感觉是注入到这个id去的。在taskimpl中有setdbid的方法
2、commandService.execute(new CompleteTaskCmd(taskId));
3、在CompleteTaskCmd中,public Void execute(Environment environment) throws Exception
{
//要从数据库中取数据,因为task是在进入节点的时候,产生到数据库中的

TaskImpl task = dbSession.get(TaskImpl.class, Long.parseLong(taskId));


if (outcomeSpecified) {
task.complete(outcome);
} else {
task.complete();
}
}
在Complete中
//它在历史事件中Update了historytask,主要是更新了endtime及setTransitionName

historyTaskComplete(outcome);
//在historyEvent 基类下,有taskCreate等多个子类,每个子类,都采用模板的Process的方式。说明任务在创建到结束的时候,该事件都会被启动

DbSession dbSession = EnvironmentImpl.getFromCurrent(DbSession.class, false);
if (dbSession!=null){
dbSession.delete(th
Activiti是一个基于Java的开源工作流引擎,它提供了一套完整的工作流解决方案,包括流程定义、流程实例、任务管理、表单管理等功能。下面简单介绍一下在Java中使用Activiti的步骤。 1. 引入Activiti依赖 在Java项目中使用Activiti,需要在项目的pom.xml文件中添加Activiti的依赖: ```xml <dependencies> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency> </dependencies> ``` 2. 创建流程定义 使用Activiti,首先需要定义一个流程,可以使用BPMN 2.0规范来定义流程。可以使用Activiti提供的图形化工具Activiti Modeler来创建流程定义文件,也可以手动编写BPMN 2.0文件。 3. 部署流程 在Activiti中,流程定义文件需要先进行部署才能使用。可以使用Activiti提供的API来进行流程部署。 ```java public void deployProcess() { RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deployment = repositoryService.createDeployment() .addClasspathResource("processes/leave.bpmn") .deploy(); System.out.println("流程部署ID:" + deployment.getId()); } ``` 4. 启动流程实例 在流程定义部署之后,就可以启动流程实例了。可以使用Activiti提供的API来启动流程实例。 ```java public void startProcess() { RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave"); System.out.println("流程实例ID:" + processInstance.getId()); } ``` 5. 处理任务 在流程实例启动后,就可以处理流程中的任务了。可以使用Activiti提供的API来查询待办任务,并完成任务。 ```java public void completeTask() { TaskService taskService = processEngine.getTaskService(); List<Task> tasks = taskService.createTaskQuery() .taskAssignee("张三") .list(); for (Task task : tasks) { taskService.complete(task.getId()); System.out.println("任务" + task.getId() + "已完成"); } } ``` 以上是使用Activiti在Java中实现工作流的基本步骤。当然,在实际应用中,还需要处理异常、持久化数据等一些其他问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值