最近由于接触到Activiti工作流引擎,因此粗读了一下它的源码。
总结了一些内容如下,这些内容一般的doc上都是没有提及的。
1. model.Activity与model.Task
Activity是模型时期对象(想想BPMN文件的那些元素),它有3个子类:CallActivity, SubProcess, Task(注意是
- org.activiti.bpmn.model.Task)
流程启动的那个活动可以理解成有一个StartEventActivity
Task有N个子类:BusinessRuleTask, ManualTask, ReceiveTask, ScriptTask, SendTask, ServiceTask, UserTask
PvmActivity是部署时期对象,ActivityImpl是它的实现类,注意ActivityImpl与Activity没有关系!获取ActivityImpl的方法:
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
ActivityBehavior很显然不是一种模型设计时期的对象
TaskActivityBehavior是一种类型的ActivityBehavior
TaskActivityBehavior是一种类型的ActivityBehavior
2. task.Task与task.TaskDefinition
model.Task是模型时期的,task.TaskDefinition是部署时期的,task.Task是运行时期的

本文深入探讨了Activiti工作流引擎的源码,重点解析了model.Activity与model.Task、task.Task与task.TaskDefinition之间的关系,以及Expression在Activiti中的应用。详细阐述了ExpressionManager如何创建和管理表达式,并列举了多种表达式用法示例。此外,还揭示了task.Task执行过程,特别是UserTask的执行步骤,包括如何根据TaskDefinition构造Task对象并计算相关属性。
最低0.47元/天 解锁文章
935

被折叠的 条评论
为什么被折叠?



