`
SunSteven
  • 浏览: 49080 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

 
阅读更多
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(this);//应该是删除task本身的任务
    }

    if (isSignalling()) {
      ClientExecution execution = getExecution();
      execution.signal(outcome);
//进入了ExecutionImpl的signal的方法
public void signal(String signal, Map<String, ?> parameters) {
    checkActive();
    if (getProcessDefinition().isSuspended()) {
      throw new JbpmException("process definition "+getProcessDefinition().getId()+" is suspended");
    }
    propagation = Propagation.EXPLICIT;
    if (getActivity()!=null) {
      performAtomicOperation(new Signal(signal, parameters));
//signal也是AtomicOperation子类,但是这个时候,无法通过字符串常量方式写入。
在这里面,主要执行了
activityBehaviour.signal(execution, signalName, parameters);
进入了taskActivity(是activityBehaviour的子类)的signal中。

execution.fire(signalName, activity);在这个fire中,产生了事件的原子操作
    AtomicOperation.EXECUTE_EVENT_LISTENER。
然后进入了 public void take(Transition transition) {
fire(Event.END, getActivity(), AtomicOperation.TRANSITION_END_ACTIVITY);
然后执行 TransitionTake
然后执行 TRANSITION_START_ACTIVITY


感觉在 while (! atomicOperations.isEmpty()) {
          AtomicOperation atomicOperation = atomicOperations.poll();
          atomicOperation.perform(this);
        }
处使用了递归的过程

}

    }
    else if (transition != null) {
      performAtomicOperation(AtomicOperation.TRANSITION_START_ACTIVITY);
    }
    else {
      throw new JbpmException("execution is not in a activity or in a transition");
    }
  }


//
    }
   
    if (superTask != null) {
      superTask.subTaskComplete(this, outcome);
    }


感觉:在Atomic几个子类操作的互转过程,与信号量的Perti网理论上,应该可以是类似的
分享到:
评论

相关推荐

    jbpm4.3 会签的实现

    taskService.addCandidateUser(task.getId(), "user1"); taskService.addCandidateUser(task.getId(), "user2"); // 用户user1领取并完成任务 taskService.claim(task.getId(), "user1"); taskService.complete...

    c#windows计划任务控制

    TaskDefinition taskDef = taskService.NewTask(); taskDef.RegistrationInfo.Description = "这是一个测试计划任务"; taskDef.Settings.DisallowStartIfOnBatteries = false; // 设置任务是否允许在电池模式下运行 ...

    activiti工作流实例代码

    开发人员可以通过`taskService.createTaskQuery()`创建一个查询,然后根据不同的条件(如任务状态、负责人等)过滤出待处理的任务。获取到任务后,可以使用`taskService.getTask()`方法获取任务的详细信息。 "完成...

    Activiti 学习笔记12:分配个人任务

    在Activiti的学习过程中,个人任务是流程执行中的一个重要环节。个人任务是指特定的任务指派给了流程中的某一个用户,该用户有责任完成这个任务。本篇学习笔记将深入探讨如何在Activiti中进行个人任务的分配。 一、...

    javaee_spring_jbpm:Spring mybatis Hibernate jbpm4

    完成流程操作taskService.completeTask completeTask(taskId) completeTask(taskId, variables) completeTask(taskId, outcome) completeTask(taskId, outcome, variables) 根据指定任务的ID,指定下一步的转移路径...

    jbpm4.4入门编程小例子

    taskService.complete(task.getId(), "approver", null); } ``` ### 6. 监控流程 jbpm提供了监控工具,可以查看流程实例的状态、任务分配和历史记录。这对于理解流程执行情况和优化流程非常有帮助。 ### 7. 示例...

    工作流中ServiceTask的各种方法

    ServiceTask 可以在执行过程中读取和修改流程变量。使用 `${variableName}` 表达式可以访问变量,而 `setVariable` 方法则用于设置变量值。 8. **边界事件与异常处理** ServiceTask 支持边界事件,例如错误、信号...

    jbpm jar java

    taskService.start(task.getId(), "john"); taskService.complete(task.getId()); ``` 5. **jbpm的扩展性** - **工作流服务**:jbpm可以通过服务组件接口(Service Task)与其他系统交互,如数据库、Web服务等...

    jbpm3基本资料和代码总结

    taskService.claim(task.getId(), "admin"); // 完成任务 taskService.complete(task.getId()); } ``` 以上就是jbpm3的基本知识概览,涵盖了其核心概念、功能和API的使用。通过这些,开发者可以构建出强大的业务...

    springboot集成activiti6工作流 #资源达人分享计划#

    taskService.claim(task.getId(), "currentUser"); taskService.complete(task.getId()); } } ``` 最后,为了方便监控和管理流程实例,我们可以集成Activiti提供的Actuator模块,或者使用Activiti提供的Web应用...

    dotnet-SharpTask是一个简单的代码集可与TaskScheduler服务api交互并与CobaltStrike兼容

    var task = taskService.RootFolder.RegisterTaskDefinition("MyTask", taskDefinition); ``` 5. 需要时,可以通过`Task`对象进行查询、更新或删除任务。 ```csharp var registeredTask = taskService.GetTask("My...

    SpringBoot+Activiti7

    taskService.complete(task.getId(), Collections.singletonMap("taskEntity", entity)); } } ``` **七、控制器接口** 创建SpringBoot的RESTful API控制器,提供增删改查的接口。 ```java @RestController @...

    activiti的使用

    Task task = taskService.createTaskQuery().processInstanceId(pi.getId()) .singleResult(); // 设置任务附件 taskService.createAttachment("weburl", task.getId(), pi.getId(), "163.com", "163webpage...

    activiti.zip

    taskService.complete(task.getId()); } } ``` 以上就是使用 Maven 初始化一个基于 Activiti 的项目的基本步骤。随着项目的深入,你可能需要处理更复杂的流程逻辑、集成其他服务、优化性能等。在实际应用中,...

    jbpm4.4 动态设置参与人数

    taskService.addPotentialOwner(task.getId(), userId); } ``` #### 五、注意事项 1. **流程变量的正确设置**:确保在流程执行过程中正确地设置了流程变量,并且这些变量的值能够被后续任务所使用。 2. **权限...

    springboot使用activiti工作流

    taskService.complete(task.getId()); } ``` 此外,Activiti还提供了丰富的API,例如查询历史流程实例、监控流程状态、监听器等,可以满足复杂业务场景的需求。 总之,Spring Boot结合Activiti能为企业级应用提供...

    activiti入门程序helloworld及所需整合jar包

    Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult(); taskService.complete(task.getId()); ``` 通过以上步骤,你就成功地在 Eclipse 中搭建了一个基本的 ...

    activiti_demo.rar

    taskService.claim(task.getId(), "userId"); } public void completeTask(String taskId, Map, Object&gt; variables) { taskService.complete(taskId, variables); } } ``` 7. 二级审批demo 二级审批流程通常...

    myeclipse-activiti简单例子

    taskService.complete(task.getId()); System.out.println("完成!"); } } ``` 4. **解决编译错误**: - 确保已正确导入所有必需的Activiti包。 - 添加Oracle JDBC驱动到项目的类路径中。 5. **运行测试**: ...

    JBPM配置邮件

    taskService.completeTask(taskId); ``` 总结来说,配置JBPM的邮件功能涉及到多个步骤,包括设置邮件服务配置文件,定义邮件模板,配置流程定义文件,以及在程序逻辑中正确处理流程变量。这些步骤确保了系统能在...

Global site tag (gtag.js) - Google Analytics