jBPM4.4 : ProcessDefinition/ProcessInstance/
Execution/Task 关系和区别
ProcessDefinition:
这个最好理解,就是流程的定义,也就相当于规范。
ProcessDefinition 也有 id,这个 id 是 {key}-{version} 在部署过程中,会把一个 id
分配给流程定义。 这个 id 的格式为{key}-{version}, key 和 version 之间使用连字
符连接。 如果没有提供 key, 会在名字的基础自动生成。 生成的 key 会把所有
不是字母和数字的字符替换成下划线。
ProcessInstance:
这个也比较好理解,就是流程的一个实例。
在系统中,也有一个 ProcessInstance 的 Id key 可以用来创建流程实例的 id,格式为
{process-key}.{execution-id}。 如果没有提供用户定义的 key,数据库就会把主键
作 为 key 。 用 Java 来 讲 : ProcessDefinition 就 是 代 码 中 的 一 个 类 , 而
ProcessInstance 就是把这个类 new 了出来,创建了一个实例;
Execution:
目前这个还比较难以理解。
在 jBPM 官方上是这么说的:http://jboss.org/jbpm 写道
Each execution of a process definition is called a process instance. 每一个流程定义的实
施,被成为 process instance。这个只讲了 ProcessDefinition 与 ProcessInstance 之间
的关系。在 ExecutionService 中,start 的是 ProcessInstance。
在 ProcessInstance 的 JavaDoc 中 把 ProcessInstance 和 Execution 区 别 讲了 出 来 :
ProcessInstance 的 Javadoc 写道
a process instance is one execution of a process definition. One process instance can have
many concurrent executions. Executions are structured in a tree of which the
ProcessInstance is the root.
一个 Process Instance(流程实例)是一个 ProcessDefinition(流程定义)的执行;
一 个 Process Instance ( 流 程 实 例 ) 可 以 有 许 多 同 时 执 行 的 步 骤 ( concurrent
executions)执行步骤组成了以 ProcessIntance(流程实例)为根节点(root)的结
构化树
在 文 档 中 , 关 于 ExecutionId 和 ProcessId , 在 介 绍 的时 候 有 这 么 一 句 : http://
www.family168.com/tutorial/jbpm4.0/html/services.html 写道有时 execution id 和流程
实例 id 是不同的, 当一个节点中使用了定时器,execution id 中就会使用额外的后
缀, 这就会导致当我们通过 execution id 查询时, 这个节点不会出现在结果列表中。
实际操作下来也是如此:*.刚开始的时候,ExectionId 与 ProcessId 是相同的;*.如
果流程执行中,每时刻只有一个步骤(是否可以说任务)在处理,则 ExectionId 和
ProcessId 是相同的,*.但是当同一时刻有多个任务要处理,譬如上述的定时器、或
者 进 入 fork/join 流 程 , 这 个 时 候 ExectionId 和 ProcessId 就 不 同 。 可 以 理 解 为