[] taskService.completeTask(task.getId());的执行过程分析_iteye_3791的博客-程序员秘密

技术标签: 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网理论上,应该可以是类似的
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_3791/article/details/82167641

智能推荐

写了全局异常捕获,,,,,没有被捕获到_写了统一异常为什么捕获不到_苍穹之跃的博客-程序员秘密

今天重新开了模块,写了自定义断言和枚举接口等等,,swagge测试接口时,,,,出现SpringBoot捕获的非自定义异常,很奇怪,,难道我的全局异常捕获没起作用???,明明已经写了最大异常捕获,,,即使无法精确捕获,,,也不可能逃逸到SpringBoot自带的异常捕获中啊。原因:其实已经被捕获了,,,是捕获后的处理逻辑报异常,导致出现未被捕获的假象。...

javascript - 个人笔记汇总_weixin_30861459的博客-程序员秘密

1. onSubmit = "return function ()";2. &lt;input type="text" name="fname" required&gt;3.var obj = JSON.parse(text); //JavaScript 内置函数 JSON.parse() 将字符串转换为 JavaScript 对象  JSON.stringify()//用于将值转换...

Python selenium cookie 的操作_城市中的小泥鳅的博客-程序员秘密

语法: 1.获取所有的cookie:driver.get_cookies() 2.添加cookie:ass_cookie(cookie值)案例:# 1.导入seleniumfrom selenium import webdriverfrom time import sleep# 2.打开谷歌浏览器driver = webdriver.Chrome()# 3.打开网...

BSON的介绍及BSON与JSON的区别_ximeneschen的博客-程序员秘密

参考百科说明:BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称、对表示方法,支持内嵌的文档对象和数组对象,具有轻量性、可遍历性、高效性的特点,可以有效描述非结构化数据和结构化数据。BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和BinData类型。这是一个简单的BSON结构体,..

matlab2012b函数问题,2012b运行step函数出错,求解!_weixin_39534121的博客-程序员秘密

该楼层疑似违规已被系统折叠隐藏此楼查看此楼因为你的是精简了的吧,没有step这个函数,给你一个:function [yout,x,t] = step(a,b,c,d,iu,t)ni = nargin;no = nargout;if ni==0,eval(*exresp(**step**)*)returnenderror(nargchk(2,6,ni));% Determine which syn...

随便推点

html div中元素垂直居中,HTML/CSS:div水平与元素垂直居中(2)_weixin_39603823的博客-程序员秘密

单个div水平居中:设置margin的左右边距为自动div水平和垂直居中,text-align和vertical-align不起作用,因为标签div没有这两个属性,所以再css中设置这两个值不能居中的效果代码:HTMLCSS#parent {margin: 0 auto;}多个div水平居中:设置display的属性为inline-block多个div水平居中,text-align和vertica...

unix网络编程中的unp.h_weixin_34301307的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

PIE-engine机器学习监督分类_与风共舞true的博客-程序员秘密

1.监督分类又称训练场地法,训练分类法是以建立统计识别函数为理论基础,依据典型样本训练方法进行分类,根据已知训练区提供的样本,通过选择特征参数,求出特征参数作为决策规则,建立判别函数对各待分类影像进行的图像分类。分有 正态贝叶斯分类、支持向量机分类、随机森林分类、K最近邻分类、决策树分类1)正态贝叶斯分类 Normal Bays Classifier可以处理特征值是连续数值的分类问题,核心对象是pie.Classifier.normalBayes2)支持向量机分类 Supprot Vector

F110自动付款相应的表_conglai6004的博客-程序员秘密

REGUS Acounts blocked by payment proposal:行项目被autopayment proposal 所以item被block, 再做付款的时候就不会出现那个open itemREGU...

hdu 6712 sakura_orzqqqqqqq的博客-程序员秘密

公式的话官方题解已经非常详细,这里就不再写公式了,大致推导为n步有x+y步是j,k两维移动,有n-x-y步是在i轴上移动。 在x+y的两维中,有y步是在y轴上移动,x步在x轴上移动。然后算上C(n,x+y)*C(x+y,x)*t1^(x/p)*t2(y/p)。就是每个点的贡献。这题卡常卡的太恶心了。#include"bits/stdc++.h"using namespace std;ty...

Recyclerview实现下拉列表_孜燃的博客-程序员秘密

1.先导包    compile 'com.android.support:recyclerview-v7:25.3.0'2.主布局<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res

推荐文章

热门文章

相关标签