`
xiangzhengyan
  • 浏览: 126461 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

task-node 任务管理实现

    博客分类:
  • jBPM
阅读更多

一个Task instance(任务实例)可以被分配给一个actorId (java.lang.String)。所有的Task instance都被保存在数据库中的表jbpm_taskinstance里。当你想得到特定用户的任务清单时,你就可以通过一个与用户关联的actorId来查询这张表。

一个流程定义有一个TaskMgmtDefinition;一个TaskMgmtDefinition对应多个swimlane,同时对应多个task;一个swimlane有多个task,可以从TaskMgmtDefinition中通过task的名称直接获取相应的task;

swimlane对象有四个属性,分别是name(名字)、assignmentDelegation(分配代理类)、taskMgmtDefinition、tasks(Set 对应多个task),可以增加task

task对象主要的属性:taskMgmtDefinition、swimlane、assignmentDelegation、taskNode,需要注意的是swimlane和assignmentDelegation中间只是可以一个属性有值,因为它们都和任务的分配有关系。

一个流程实例有一个TaskMgmtInstance;一个TaskMgmtInstance对应多个swimlaneInstance,同时对应多个taskInstance;一个swimlaneInstance有多个taskInstance,可以从TaskMgmtInstance中直接获取相应的taskInstance;

swimlaneInstance对象主要有五个属性,分别是name、actorId、pooledActors(Set)、swimlane、taskMgmtInstance。

taskInstance对象的主要属性:name、actorId、task、swimlaneInstance、taskMgmtInstance、pooledActors。

当对任务进行分配时,一般需要实现AssignmentHandler这个接口,这个接口的方法只有一个:
void assign( Assignable assignable, ExecutionContext executionContext ) throws Exception;
一个典型的实现(把名字是'change nappy'的任务交给NappyAssignmentHandler这个类来分配)
NappyAssignmentHandler类:
public void assign(Assignable assignable, ExecutionContext executionContext) {
assignable.setActorId("papa");
}
同样,Assignable只是一个接口,它有两个方法:setActorId()和setPooledActors(),Assignable的具体实现类也是两个
swimlaneInstancehe和taskInstance。这样就不不难理解整个任务分配流程了:
1、流程进入TaskNode节点,执行TaskNode类的execute()方法,该方法首先获得TaskMgmtInstance实例,然后通过它来创建TaskInstance。taskMgmtInstance.createTaskInstance(task, executionContext);
2、在上面的createTaskInstance(task, executionContext)里,该方法调用了taskInstance.assign(executionContext)对taskInstance进行分配。
3、在assign(executionContext)方法里,首先会判断task属性里是否存在swimlane,如果有的话,这个taskInstance就会分配给swimlane指定的ActorId或 PooledActors;如果不存在,再去找task属性里 assignmentDelegation(分配代理类)通过代理类(即我们自己写的实现AssignmentHandler这个接口的类)指定ActorId或 PooledActors。

一个流程定义有一个TaskMgmtDefinition;一个TaskMgmtDefinition对应多个Actor,同时对应多个Task;
一个Actor有多个Task,可以从TaskMgmtDefinition中通过task的名称直接获取相应的task;

一个流程实例有一个TaskMgmtInstance;一个TaskMgmtInstance对应多个actorInstance,同时对应多个taskInstance;
一个actorInstance有多个taskInstance,可以从TaskMgmtInstance中直接获取相应的taskInstance;

一个TaskNode对例应多个Task

(1)对于这样的流程定义:

代码
  1. <task-node name='a'>  
  2.      <task name='laundry' />  
  3.      <task name='dishes' />  
  4.      <task name='change nappy' />  
  5.      <transition to='b' />  
  6. task-node>  

<script>render_code();</script>
只有当节点中的三个任务都完成后,流程才进入后面的节点

 

(2)对于这样的流程定义:

代码
  1. <task-node name='a' signal='first'>>  
  2.       <task name='laundry' />  
  3.       <task name='dishes' />  
  4.       <task name='change nappy' />  
  5.       <transition to='b' />  
  6.  task-node>   

<script>render_code();</script>

 

当第一个任务完成后,token就指向后面的节点

(3)对于这样的流程定义:

代码
  1. <task-node name='a' signal='never'>>  
  2.       <task name='laundry' />  
  3.       <task name='dishes' />  
  4.       <task name='change nappy' />  
  5.       <transition to='b' />  
  6.  task-node>  

<script>render_code();</script>

 

三个任务都完成后,token仍然不会指向后面的节点;需要自己手动调用processInstance.signal()
才会驱动流程到下面的节点

(4)对于这样的流程定义:

代码
  1. <task-node name='a' signal='unsynchronized'>>  
  2.       <task name='laundry' />  
  3.       <task name='dishes' />  
  4.       <task name='change nappy' />  
  5.       <transition to='b' />  
  6.  task-node>  

<script>render_code();</script>
token不会在本节点停留,而是直接到后面的节点

 

jbpm用join/fork/merge/decision也可以实现同样的功能,不过它们的实现办法不同,一个是通过
NODE来实现,一个是通过TASK来实现

 

分享到:
评论

相关推荐

    vuetasknode是一个基于Vue的任务节点图绘制插件

    `Vue-task-node` 就是这样一个专门为Vue.js框架设计的插件,它提供了便捷的方式来绘制和管理任务节点图。 ### 插件简介 `Vue-task-node` 是一款基于Vue.js的图形化组件,用于创建交互式的任务节点图。它允许开发者...

    管理系统系列--定时任务管理系统.zip

    本文将深入探讨定时任务管理系统的概念、功能、设计原则以及实现技术。 一、定时任务管理系统概述 定时任务管理系统是基于时间触发的自动执行任务的平台。它可以预设一系列任务,并按照预定的时间间隔或特定日期...

    定时任务相关技术实操-timed-task-practice.zip

    这个名为"定时任务相关技术实操-timed-task-practice"的压缩包很可能包含了一些关于如何在实际操作中设置和管理定时任务的示例代码或教程。在本文中,我们将深入探讨定时任务的核心概念、常用工具和技术,以及如何在...

    node-sass.zip

    要在Node.js项目中使用node-sass,首先需要通过npm(Node.js包管理器)进行安装: ```bash npm install --save-dev node-sass ``` 安装完成后,可以使用以下JavaScript代码来编译Sass文件: ```javascript const ...

    react-task-list

    这个项目可能包含了一个组件化、可定制的任务管理解决方案,使得用户能够创建、编辑和删除任务。 在描述中并未提供具体实现细节,但我们可以根据"TypeScript"这一标签推测,这个任务列表是用TypeScript编写的。...

    task-console:通过Node.js中的控制台执行任务管理器

    本话题主要关注如何利用Node.js实现一个任务控制台,即"task-console",这可以视为一个轻量级的任务管理器,能够帮助我们管理和调度一系列的任务。下面我们将深入探讨这个主题。 首先,我们需要了解Node.js的基础...

    task-app:Node js,MongoDB

    在"task-app-main"这个项目中,我们可以看到一个基本的任务管理应用的实现。主要包括以下几个部分: - **路由处理**:使用Express框架设置路由,处理HTTP请求,如GET和POST,与MongoDB进行数据交互。 - **视图模板...

    task-manager-api:任务管理器应用程序的API

    "task-manager-api"是一个专为任务管理器应用程序设计的API,它主要使用JavaScript语言进行开发。这个API旨在帮助开发者创建、管理和跟踪用户的工作任务,提供一套高效且灵活的接口来处理任务相关的各种操作。在深入...

    Meteor-Task-Manager:MeteorJS 任务管理器

    本篇文章将深入探讨以Meteor JS为核心构建的任务管理器——"Meteor-Task-Manager",帮助读者理解其核心概念、工作原理以及实际应用。 一、Meteor JS简介 Meteor JS是一个开源的全栈框架,它将数据库、服务器和...

    VueJS-Task-Manager:使用VueJS构建的简单trello inpsired任务管理器

    VueJS任务管理器 版本1.2.0 Trello启发了使用VueJS框架以JavaScript编写的任务管理器。 应用程序数据使用LocalStorage存储在浏览器中。 怎么跑 使用npm安装应用程序依赖项。 npm install 使用Webpack捆绑应用JS。 ...

    node-task-manager

    "Node.js任务管理器",或简称为"node-task-manager",是一款基于JavaScript开发的工具,主要用于管理和自动化一系列在Node.js环境中执行的任务。这个工具利用了Node.js的非阻塞I/O模型和强大的事件驱动特性,使得...

    task-manager-app:任务管理器应用程序,节点,mongodb,CRUD

    总的来说,`task-manager-app`是一个使用JavaScript(通过Node.js)构建的后端服务,结合MongoDB存储任务数据,实现了基本的CRUD操作,为用户提供了一个功能完备的任务管理平台。这个项目提供了一个学习和实践全栈...

    node3-task-manager

    "Node3-task-manager"是一个基于JavaScript的项目,很可能是一个任务管理器应用或库,用于处理和组织各种任务。JavaScript是Web开发中最常用的编程语言之一,尤其在前端开发中,但Node.js将其扩展到了服务器端,使得...

    js-task-manager

    "js-task-manager"是一个基于Node.js的项目,它提供了一个任务管理器应用程序,旨在帮助开发者管理和组织他们的工作流程。Node.js是JavaScript的一个运行时环境,允许我们在服务器端执行JavaScript代码,从而扩展了...

    task-api:基本任务管理器API

    "task-api:基本任务管理器API"这个项目,从标题来看,它提供了一种基础框架,允许开发者在JavaScript环境中实现任务的管理和调度。让我们深入探讨一下这个话题。 首先,JavaScript是一种广泛应用于Web开发的编程...

    ap-create-task-richardso21:由GitHub Classroom创建的ap-create-task-richardso21

    常见的JavaScript任务可能包括创建交互式的网页元素、实现数据验证、构建前端框架如React或Vue的应用,或者使用Node.js在服务器端执行JavaScript代码。 【ap-create-task-richardso21-master】这个文件名表明这是...

    gulp-task-lint:Gulp 的 Lint 任务

    2. **任务(Task)**: 任务是 Gulp 的核心部分,定义了一项特定的构建工作,如编译 CSS 或运行测试。 3. **管道(Pipe)**: 使用 `.` 方法将任务串联起来,形成一个处理文件的流水线。 ### 安装与使用 gulp-task-...

    AdaKerja-Node.js-Interview-Task

    【标题】"AdaKerja-Node.js-Interview-Task" 涉及的是一个针对Node.js开发者的面试挑战,这个任务可能包含了多个问题和项目,旨在评估候选人在JavaScript和Node.js领域的技能与经验。Node.js是基于Chrome V8引擎的...

    task-back-end

    在IT行业中,后端开发是构建应用程序不可或缺的一部分,而"task-back-end"这个项目很可能是一个专为处理任务管理的后端服务。在这个项目中,主要的技术栈是JavaScript,这是一种广泛用于前端开发,但同样也在Node.js...

    jbpm安装及使用方法

    12. jbpm的任务管理实现 一个Task instance(任务实例)可以被分配给一个actorId (java.lang.String)。所有的Task instance都被保存在数据库中的表jbpm_taskinstance里。当你想得到特定用户的任务清单时,你就可以...

Global site tag (gtag.js) - Google Analytics