`
itoracja
  • 浏览: 136448 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
    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网理论上,应该可以是类似的
 
0
1
分享到:
评论

相关推荐

    javaee_spring_jbpm:Spring mybatis Hibernate jbpm4

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

    工作流中ServiceTask的各种方法

    NULL 博文链接:https://topmanopensource.iteye.com/blog/1319380

    JBPM帮助文档供大家学习

    org.jbpm.api the jBPM API, Start by creating a Configuration, build a ProcessEngine from that, and then you can find the workflow methods on the services like ExecutionService, TaskService. org.jbpm....

    工作流培训视频

    企业级的关于activiti工作流的培训视频,有关于activit的使用情况

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

    Activiti 学习笔记12:个人任务

    Activiti6.0教程例子下载

    4. TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、...

    task-service

    任务服务 任务服务是基本的RESTful任务服务。 该服务提供了一个REST API,允许调用者创建,检索,更新和删除任务。 一些核心用例是: 创建一个任务。 向用户分配任务。.../ service / user / {userId} / task

    WinServiceTask任务调度

    WinServiceTask任务调度 可以自动写好需要调用的代码,写好调用时间。

    JBPM4.4用户手册.doc

    5.7. TaskService任务服务 5.8. HistoryService历史服务 5.9. ManagementService管理服务 5.10. 查询 API 6. jPDL 6.1. process流程处理 6.2. 控制流程Activities活动 6.2.1. start启动 6.2.2. State状态节点 6.2....

    jBPM4.3用户指南

    5.7. TaskService任务服务 5.8. HistoryService历史服务 5.9. ManagementService管理服务 5.10. 查询 API 6. jPDL 6.1. process流程处理 6.2. 控制流程Activities活动 6.2.1. start启动 6.2.2. State状态节点...

    jbpm4服务接口方法汇总

    TaskService taskService=processEngine.getTaskService(); HistoryService historyService=processEngine.getHistoryService(); IdentityService identityService=processEngine.getIdentityService(); ...

    TaskService系统运行机制概要1

    摘要:1.启动触发时间采用开源的Quartz.Net项目的Cron表达式:"0012**?" 每天中午12点触发2. 多线程运行各任务,互不干扰。3. 自动监视

    jbpm4.4学习笔记

    2 工作流的过程 7 3 Jbpm4.4介绍 7 3.1工作流引擎 8 3.2jpdl 8 3.3数据库 8 3.3.1资源库和运行时表结构 8 3.3.2历史数据库表 9 3.3.3身份认证表 9 3.4jbpm.cfg.xml 9 3.5 jbpm.hibernate.cfg.xml 10 3.6logging....

    最新Activiti视频教程,包含视频、源码、IDE集成Activiti插件、Activiti-5.22.0的pdm数据库表结构文件、教程菜单

    使用TaskService设置和获取流程变量 3.局部流程变量 4.使用RuntimeService设置和获取流程变量 5.启动流程的时候设置流程变量 6.完成任务的时候设置流程变量 05 - Activiti流程控制网关 1.连线 2.排它网关 3....

    Activiti工作流笔记.chm

    2:工作流的执行过程 1 3:Activiti介绍 1 3.1:工作流引擎 2 3.2:BPMN 2 3.3:数据库(先学后看) 2 3.4:activiti.cfg.xml(activiti的配置文件) 4 3.5:logging.properties(日志处理) 5 4:准备环境 6 4.1:...

    Flowable深入浅出-14 Flowable-BPMN操作流程之任务完成

    Flowable深入浅出-14 Flowable-BPMN操作流程之任务完成,欢迎进入我的专栏第14节查看,专栏地址:https://blog.csdn.net/houyj1986/column/info/31755

    activiti-engine-5.18.0-sources.jar

    activiti-engine-5.18.0-sources.jar

    Flowable v6.4.2版本中文文档

    Flowable v6.4.2版本中文文档

    ActivitiDemo.rar

    activiti 工作流简单案例,流程引擎对象processEngine对象(所有...TaskService--任务管理 HistoryService --历史管理(执行完的数据的管理) identityService--组织机构管理 formService--一个可选服务 任务表单管理

    xmljava系统源码-Activiti:SpringBoot2.0&Activiti6.0

    中业务流程定义中的每一个执行节点被称为一个 Task,对流程中的数据存取,状态变更等操作均需要在 Task 中完成。Task Service 提供了对用户 Task 和 Form 相关的操作。它提供了运行时任务查询、领取、完成、删除以及...

Global site tag (gtag.js) - Google Analytics