Activiti源码浅析:Activity与Task
来源:互联网 发布:万网域名续费退款 编辑:程序博客网 时间:2024/06/10 01:03
最近由于接触到Activiti工作流引擎,因此粗读了一下它的源码。
总结了一些内容如下,这些内容一般的doc上都是没有提及的。
1. model.Activity与model.Task
public static ActivityImpl getActivity(ProcessEngine processEngine, String processDefId, String activityId){ProcessDefinitionEntity pde = (ProcessDefinitionEntity) ((RepositoryServiceImpl) processEngine.getRepositoryService()).getDeployedProcessDefinition(processDefId);return (ActivityImpl) pde.findActivity(activityId);}
ActivityImpl.getActivityBehavior()可以获取到对应的ActivityBehavior
TaskActivityBehavior是一种类型的ActivityBehavior
2. task.Task与task.TaskDefinition
而TaskDefinition.getCandidateGroupIdExpressions()返回的是Set<Expression>
TaskDefinitiongetTaskDefinition()
另外有助于理解的是UserTaskParseHandler的executeParse()方法,它通过解析生成ActivityImpl对象和TaskDefinition对象:
protected void executeParse(BpmnParse bpmnParse, UserTask userTask) { ActivityImpl activity = createActivityOnCurrentScope(bpmnParse, userTask, BpmnXMLConstants.ELEMENT_TASK_USER); activity.setAsync(userTask.isAsynchronous()); activity.setExclusive(!userTask.isNotExclusive()); TaskDefinition taskDefinition = parseTaskDefinition(bpmnParse, userTask, userTask.getId(), (ProcessDefinitionEntity) bpmnParse.getCurrentScope().getProcessDefinition()); activity.setProperty(PROPERTY_TASK_DEFINITION, taskDefinition); activity.setActivityBehavior(bpmnParse.getActivityBehaviorFactory().createUserTaskActivityBehavior(userTask, taskDefinition)); }
3. Expression
Activiti使用UEL处理表达式。表达式可以用在很多场景下,比如Java服务任务,执行监听器,任务监听器和条件流。
ExpressionManager.createExpression()用以生成Expression
ProcessEngineConfigurationImpl.getExpressionManager()用以返回ExpressionManager
表达式的值(来自于用户手册)
Value expression:解析为值。默认,所有流程变量都可以使用。所有spring bean(spring环境中)也可以使用在表达式中。 一些实例:
${myVar}${myBean.myProperty}
Method expression:调用一个方法,使用或不使用参数。当调用一个无参数的方法时,记得在方法名后添加空的括号(以区分值表达式)。 传递的参数可以是字符串也可以是表达式,它们会被自动解析。例子:
${printer.print()}${myBean.addNewOrder('orderName')}${myBean.doSomething(myVar, execution)}
注意这些表达式支持解析原始类型(包括比较),bean,list,数组和map。
在所有流程实例中,表达式中还可以使用一些默认对象:
execution
:DelegateExecution
提供外出执行的额外信息。task
:DelegateTask
提供当前任务的额外信息。注意,只对任务监听器的表达式有效。authenticatedUserId
:当前登录的用户id。如果没有用户登录,这个变量就不可用。
4. task.Task的执行过程
假设是一个UserTask,
task.Task的execute()会
调用它的activityBehavior.execute(execution);
UserTaskActivityBehavior.execute()会根据TaskDefinition构造Task对象
注意这个过程中,会对Task的受托人、候选组、候选用户等Expression进行getValue()的计算
最后,Task的信息保存入库
- Activiti源码浅析:Activity与Task
- Activiti源码浅析:Activity与Task
- Task与Activity详解
- Task 与 Activity 详解
- Task 与 Activity 详解
- Task与Activity详解
- Task与Activity详解
- Activity与Task学习
- Activity与Task
- activity与task
- Activiti源码浅析:Activiti的活动授权机制
- Activiti源码浅析:Activiti的活动授权机制
- Activiti源码浅析:Activiti的活动授权机制
- Activiti源码跟踪之Task表单操作GetTaskFormCmd
- android之activity与task
- task与activity的关系
- 安卓activity与task
- Activity源码浅析-DecorView
- Hibernate基础知识
- USACO Postal Vans 解题报告
- JAVA异常处理
- Android学习笔记1——android应用的原理
- Java笔记——2
- Activiti源码浅析:Activity与Task
- shell怎么读取网页内容
- FLUENT运行出错
- perl有什么模块可以添加DNS域名吗?
- Mantle
- android开发中,比较常用的11个命令集锦
- 让ckeditor 在线编辑器 不过滤html,head,title
- 跨机房实时大量小文件同步方案
- 互联网乱世之下 一将功成万骨枯