`
zybing
  • 浏览: 455842 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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官方上是这么说的:

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就不同。
    可以理解为Execution为执行路径,当同时有几个路径在执行,ExecutionId就和ProcessId不同了
  • 而且:Execution是ProcessInstance的基类

具体的表现就是

// get execution service
ExecutionService executionService = processEngine.getExecutionService();

// get current execution through processId
Execution execution = executionService.findExecutionById(processId);
// get a task query 
TaskQuery tq = taskService.createTaskQuery();
// get current task
List<Task> taskList1 = tq.executionId(execution.getId()).list();
List<Task> taskList2 = tq.processInstanceId(processId).list();

上述的程序,如果在一般时候,taskList1,和taskList2是一样的。

但是当进入fork/join流程,这个时候executionId已经更改,

   taskList1取不到任何任务,taskList2能取回任务

 

 

Task

    Task简单,就是当前要做的工作。

JavaDoc中 写道
a runtime task. In contrast to HistoryTask, a Task only represents the runtime state of a task and hence it will be deleted after it is completed.
分享到:
评论

相关推荐

    JBPM4中ProcessDefinition、ProcessInstance、Execution、Task关系和区别

    JBPM4 中 ProcessDefinition、ProcessInstance、Execution、Task 关系和区别 ProcessDefinition 是流程的定义,也可以理解为流程的规范。它有一个 id,这个 id 的格式为 {key}-{version},其中 key 和 version 之间...

    jbpm4.4学习笔记

    5.5ProcessDefinition 16 5.6ProcessInstance 16 5.7Execution 17 6 管理流程定义 18 6.1设计流程定义文档 18 6.1.1图片 18 6.1.2jpdl.xml文件 18 6.2部署流程定义 19 6.3删除流程定义 20 6.4查询流程定义 21 6.5...

    jbpm4.4源代码阅读第一季发布(共3个视频)

    其基于Business Process Execution Language for Java (BPEL) 和Java Business Activity (JBA) 规范,提供了图形化的流程建模工具,使得非技术人员也能参与流程设计。jBPM4.4版本是该系统的中期迭代,包含了丰富的...

    jbpm安装及使用方法

    2)第二层:node、processDefinition、Transition、Task 它们都继承自GraphElement (1)processDefinition表示流程定义(implements NodeCollection),它有下面的属性:name、version、nodes、startState。nodes表示流程...

    javaee三大框架整合宅急送项目lib包

    ProcessDefinition processDefinition = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processInstance.getProcessDefinitionId()).uniqueResult(); return ...

    jbpm3.2.3 源码

    jbpm3.2.3基于Java语言,采用了Maven构建系统,其架构设计分为几个主要模块:流程定义(process definition)、流程执行(process execution)、任务管理(task management)、事件处理(event handling)以及持久...

    jbpm工作流管理系统

    流程定义 (Process Definition) 流程定义是指通过定义一组有序的步骤来完成特定任务或业务目标的过程。在JBPM中,流程定义通常采用图形化方式表示,基于UML活动图来构建。这种定义方式使得业务人员能够更容易理解...

    activiti笔记1

    - ProcessDefinition: 对应`act_re_procdef`,代表流程定义。 - ProcessInstance: 对应`act_ru_execution`,代表流程实例。 - Task: 对应`act_ru_task`,代表任务。 【使用网页版流程设计器】 要使用Activiti的...

    activiti-学习第一天

    - **ProcessDefinition** 对应 `act_re_procdef` 表。 - **ProcessInstance** 对应 `act_ru_execution` 表。 - **Task** 对应 `act_ru_task` 表。 #### 九、使用网页版流程设计器 为了更直观地设计流程,可以使用...

Global site tag (gtag.js) - Google Analytics