- 浏览: 96606 次
- 来自: ...
最新评论
-
gongcheneric:
如果我是要在一个局域网内的某台电脑上修改其他电脑(已知电脑的I ...
java 修改系统时间 -
lijunlong:
...
java 修改系统时间 -
jljf_hh:
喔,了解一下,正好没时间研究这东西呢.哈哈
JBPM阶段性工作总结 -
yuyanshan:
你好,我也是这们做的不,不过我还不明白怎么处理任务,我是这样想 ...
会签实现
jbpm任务分配分析
任务节点的任务资源分配(负责人分配,能执行一个任务的人或者系统通称资源):
相关对象:
1. Swimlane:流程中的脚色定义.这里参照了活动图的概念
2. SwimlaneInstance:流程中角色定义实例.
3. TaskmgmtInstance:任务管理的运行时模块。它协助了ProcessInstance保管一个流程运行时的任务信息,并有一些关于任务分配管理的操作。
4. TaskNode:任务载体
5. Task:代表任务定义。静态的过程定义中的一部分
6. TaskInstance:此对象表示表示任务实例。Token进入TaskNode后会马上循坏Task中的 条件Condition(一个jbpm的脚本),一旦瞒住马上生成TaskInstance。
Jbpm的任务分配有2种模式:推模式和拉模式。其中taskInstance中的actorId :String实现了推,而pooledActors实现了拉。PooledActors中包含了数个PoolActor对象。此对象包装了一个actorid和多个taskinstance,swimlaneInstance
当token处于任务节点,会循环任务节点的task集合.生成taskInstance对象.生成对象的最后一步,就是分配资源(负责人)给各个taskInstance.原理如下:
1. 检查task是否被分配了一个swimlane对象.如果有跳到2.没有跳到5
2. 判断此任务是否位于startState,即是否是起始任务.起始任务用来启动整个流程的开始.该任务用来代替手动调用processInstance.signal();如果是起始任务将会启动身份鉴定组件来设置actorid;此任务负责人也是整个流程的发起者。
3. 如果不是起始任务.将会使用getInitializedSwimlaneInstance()方法,根据运行环境和swimlane生成一个swimlaneInstance;这是一个关于swimlaneInstance的工厂方法。
此方法大概分2步:1.以swimlane的name为key检查TaskmgmtInstance中的swimlaneInstances域是否已经包含了swimlaneInstance域,有的话直接返回。2.如果不存在角色实例,就根据swimlane生成一个角色实例.之后将调用performAssignment方法决定负责人,途径有2个: 1.外部实现assignHandler接口.并包装成一个delegation对象关联到swimlane上,2.解析actionidexpression,得到actorid注入taskinstance。解析poolactoridexpression得到poolactors并注入taskinstance。2个途径优先级关系为1〉2。
4. 经过3得到的swimlaneInstance中已经包含了负责人信息,把负责人信息用taskinstance 的方法copySwimlaneInstanceAssignment拷贝进taskinstance即完成了任务分配。
5. 如果一个task没有分配一个swimlane.那么将根据task中的资源分配信息进行分配:task和swimlane一样.都具有delegation,actoridexpression,以及poolActorIdExpression3个资源分配信息域。而taskInstance与swimlaneInstance实现了同样的资源分配接口。所以这种情况下将和3步骤中一样调用TaskmgmtInstance中的performAssignment方法。直接为taskInstance分配资源。
6.最终的设置结束之后,由于taskintance中的poolactor是3个对象的包装类,所以还要为每一个poolactor对象设置反向关联关系。关联到此taskInstance和taskInstance中的swimlaneInstance
任务分配总结:总的看来jbpm的任务分配,优先使用角色的资源分配方式。如果该任务没有关联到任何角色,才使用task上自身的资源分配方式。引入角色概念。可以在一个流程中重复使用一个角色信息。
任务实例和图执行
任务实例是参与者任务清单(tasklist)中的项目,任务实例可以作为信号,当一个信号任务实例完成时,可以发送一个信号到它的令牌继续流程执行。任务实例可以被阻塞,这意味着在任务实例完成之前相关令牌(=执行路径)不允许离开任务节点。默认情况下,任务实例是信号非阻塞的。
如果多于一个任务实例与一个任务节点关联,流程开发者可以指定任务实例的完成怎样影响流程的继续。下面是可以给任务节点的signal属性设置的值:
l last:这是默认值。当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l last-wait:当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l first:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l first-wait:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l unsynchronized:总是继续执行,不管任务是否创建和完成。
l never:执行不再继续,不管任务是否创建和完成。
任务实例可以基于运行时的计算创建,如果那样的话,需要添加一个ActionHandler到任务节点的node-enter事件,并且设置属性create-tasks=“false”。下面是这样一个动作的实现例子:
public class CreateTasks implements ActionHandler {
public void execute(ExecutionContext executionContext) throws Exception {
Token token = executionContext.getToken();
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskNode taskNode = (TaskNode) executionContext.getNode();
Task changeNappy = taskNode.getTask("change nappy");
// 现在, 相同任务的两个任务实例被创建
tmi.createTaskInstance(changeNappy, token);
tmi.createTaskInstance(changeNappy, token);
}
}
如示例所展示,任务可以在指定的任务节点中创建,它们也可以被指定到process-definition,并且从TaskMgmtDefinition获取。TaskMgmtDefinition用任务管理信息扩展了ProcessDefinition。
标识任务示例完成的API是TaskInstance.end(),你可以在end方法中指定一个转换,如果这个任务的完成会触发继续执行,则会通过指定的转换离开任务节点。
11.3 分配
流程定义包含任务节点,任务节点(task-node)包含一个或多个任务,任务作为流程定义的一部分是静态描述。在运行时,任务导致任务实例的创建,一个任务实例对应某人任务列表中的一个入口。
在Jbpm中,可以结合使用推模式和拉模式(见下文)的任务分配。流程可以计算任务的责任人,并把它推到他/她的任务清单里;或者,任务可以被分配到参与者池,这种情况下,池中的每个参与者都可以拉出任务并把它放入参与者的个人任务清单。
11.3.1 分配接口
通过接口AssignmentHandler进行任务实例分配:
public interface AssignmentHandler extends Serializable {
void assign( Assignable assignable, ExecutionContext executionContext );
}
当任务实例被创建时分配处理的实现被调用,在那时,任务实例可以被分配到一个或多个参与者。AssignmentHandler实现将调用分配方法(setActorId或setPooledActors)分配任务,可以分配一个任务实例或者一个泳道实例swimlaneInstance(=流程角色)。
public interface Assignable {
public void setActorId(String actorId);
public void setPooledActors(String[] pooledActors);
}
任务实例和泳道实例都可以被分配到一个用户或者共享参与者。分配任务实例到一个用户,调用Assignable.setActorId(String actorId);分配任务实例到候选的共享参与者,调用Assignable.setPooledActors(String[] actorIds)。
流程定义中的每个任务都可以与一个分配处理实现相关联,用来完成运行时的任务分配。
当流程中的多个任务将要分配给相同的人或者参与者组时,考虑使用泳道。
考虑到AssignmentHandler的重用,每个AssignmentHandler的使用可以在processdefinition.xml中配置。请参考“16.2 委托”了解怎样添加分配处理配置的更多信息。
任务节点的任务资源分配(负责人分配,能执行一个任务的人或者系统通称资源):
相关对象:
1. Swimlane:流程中的脚色定义.这里参照了活动图的概念
2. SwimlaneInstance:流程中角色定义实例.
3. TaskmgmtInstance:任务管理的运行时模块。它协助了ProcessInstance保管一个流程运行时的任务信息,并有一些关于任务分配管理的操作。
4. TaskNode:任务载体
5. Task:代表任务定义。静态的过程定义中的一部分
6. TaskInstance:此对象表示表示任务实例。Token进入TaskNode后会马上循坏Task中的 条件Condition(一个jbpm的脚本),一旦瞒住马上生成TaskInstance。
Jbpm的任务分配有2种模式:推模式和拉模式。其中taskInstance中的actorId :String实现了推,而pooledActors实现了拉。PooledActors中包含了数个PoolActor对象。此对象包装了一个actorid和多个taskinstance,swimlaneInstance
当token处于任务节点,会循环任务节点的task集合.生成taskInstance对象.生成对象的最后一步,就是分配资源(负责人)给各个taskInstance.原理如下:
1. 检查task是否被分配了一个swimlane对象.如果有跳到2.没有跳到5
2. 判断此任务是否位于startState,即是否是起始任务.起始任务用来启动整个流程的开始.该任务用来代替手动调用processInstance.signal();如果是起始任务将会启动身份鉴定组件来设置actorid;此任务负责人也是整个流程的发起者。
3. 如果不是起始任务.将会使用getInitializedSwimlaneInstance()方法,根据运行环境和swimlane生成一个swimlaneInstance;这是一个关于swimlaneInstance的工厂方法。
此方法大概分2步:1.以swimlane的name为key检查TaskmgmtInstance中的swimlaneInstances域是否已经包含了swimlaneInstance域,有的话直接返回。2.如果不存在角色实例,就根据swimlane生成一个角色实例.之后将调用performAssignment方法决定负责人,途径有2个: 1.外部实现assignHandler接口.并包装成一个delegation对象关联到swimlane上,2.解析actionidexpression,得到actorid注入taskinstance。解析poolactoridexpression得到poolactors并注入taskinstance。2个途径优先级关系为1〉2。
4. 经过3得到的swimlaneInstance中已经包含了负责人信息,把负责人信息用taskinstance 的方法copySwimlaneInstanceAssignment拷贝进taskinstance即完成了任务分配。
5. 如果一个task没有分配一个swimlane.那么将根据task中的资源分配信息进行分配:task和swimlane一样.都具有delegation,actoridexpression,以及poolActorIdExpression3个资源分配信息域。而taskInstance与swimlaneInstance实现了同样的资源分配接口。所以这种情况下将和3步骤中一样调用TaskmgmtInstance中的performAssignment方法。直接为taskInstance分配资源。
6.最终的设置结束之后,由于taskintance中的poolactor是3个对象的包装类,所以还要为每一个poolactor对象设置反向关联关系。关联到此taskInstance和taskInstance中的swimlaneInstance
任务分配总结:总的看来jbpm的任务分配,优先使用角色的资源分配方式。如果该任务没有关联到任何角色,才使用task上自身的资源分配方式。引入角色概念。可以在一个流程中重复使用一个角色信息。
任务实例和图执行
任务实例是参与者任务清单(tasklist)中的项目,任务实例可以作为信号,当一个信号任务实例完成时,可以发送一个信号到它的令牌继续流程执行。任务实例可以被阻塞,这意味着在任务实例完成之前相关令牌(=执行路径)不允许离开任务节点。默认情况下,任务实例是信号非阻塞的。
如果多于一个任务实例与一个任务节点关联,流程开发者可以指定任务实例的完成怎样影响流程的继续。下面是可以给任务节点的signal属性设置的值:
l last:这是默认值。当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l last-wait:当最后一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l first:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,继续执行。
l first-wait:当第一个任务实例完成时继续执行;当在节点入口处没有任务创建时,执行在任务节点等待,直到任务被创建。
l unsynchronized:总是继续执行,不管任务是否创建和完成。
l never:执行不再继续,不管任务是否创建和完成。
任务实例可以基于运行时的计算创建,如果那样的话,需要添加一个ActionHandler到任务节点的node-enter事件,并且设置属性create-tasks=“false”。下面是这样一个动作的实现例子:
public class CreateTasks implements ActionHandler {
public void execute(ExecutionContext executionContext) throws Exception {
Token token = executionContext.getToken();
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskNode taskNode = (TaskNode) executionContext.getNode();
Task changeNappy = taskNode.getTask("change nappy");
// 现在, 相同任务的两个任务实例被创建
tmi.createTaskInstance(changeNappy, token);
tmi.createTaskInstance(changeNappy, token);
}
}
如示例所展示,任务可以在指定的任务节点中创建,它们也可以被指定到process-definition,并且从TaskMgmtDefinition获取。TaskMgmtDefinition用任务管理信息扩展了ProcessDefinition。
标识任务示例完成的API是TaskInstance.end(),你可以在end方法中指定一个转换,如果这个任务的完成会触发继续执行,则会通过指定的转换离开任务节点。
11.3 分配
流程定义包含任务节点,任务节点(task-node)包含一个或多个任务,任务作为流程定义的一部分是静态描述。在运行时,任务导致任务实例的创建,一个任务实例对应某人任务列表中的一个入口。
在Jbpm中,可以结合使用推模式和拉模式(见下文)的任务分配。流程可以计算任务的责任人,并把它推到他/她的任务清单里;或者,任务可以被分配到参与者池,这种情况下,池中的每个参与者都可以拉出任务并把它放入参与者的个人任务清单。
11.3.1 分配接口
通过接口AssignmentHandler进行任务实例分配:
public interface AssignmentHandler extends Serializable {
void assign( Assignable assignable, ExecutionContext executionContext );
}
当任务实例被创建时分配处理的实现被调用,在那时,任务实例可以被分配到一个或多个参与者。AssignmentHandler实现将调用分配方法(setActorId或setPooledActors)分配任务,可以分配一个任务实例或者一个泳道实例swimlaneInstance(=流程角色)。
public interface Assignable {
public void setActorId(String actorId);
public void setPooledActors(String[] pooledActors);
}
任务实例和泳道实例都可以被分配到一个用户或者共享参与者。分配任务实例到一个用户,调用Assignable.setActorId(String actorId);分配任务实例到候选的共享参与者,调用Assignable.setPooledActors(String[] actorIds)。
流程定义中的每个任务都可以与一个分配处理实现相关联,用来完成运行时的任务分配。
当流程中的多个任务将要分配给相同的人或者参与者组时,考虑使用泳道。
考虑到AssignmentHandler的重用,每个AssignmentHandler的使用可以在processdefinition.xml中配置。请参考“16.2 委托”了解怎样添加分配处理配置的更多信息。
发表评论
-
节点描述
2008-08-07 21:59 1180对jBPM来讲,工作流由一 ... -
sample
2008-08-07 21:12 902xml配置 <start-state ... -
tasknode
2008-08-07 21:07 871同fork等一样是一种节点类型。任务节点是jbpm中一个非常重 ... -
controller
2008-07-31 20:44 922controller(控制器) \28在任务执行时,可能需要 ... -
exception-handler
2008-07-31 20:43 1846exception-handler 异常处理 jbpm异常 ... -
spring和jbpm事务一致性
2008-07-31 20:24 2834关于jbpm和spring结合的事务问题: 当JBPM使用sp ... -
知识点
2008-07-31 10:25 914Node Type ... -
ssh-jbpm发布遇到的问题
2008-07-30 10:04 15421.自己输入http://localhost:8080/ssh ... -
发布jbpm示例shipping遇到的问题
2008-07-28 18:09 10541 jstl和jsp2.0版本问题 <%@taglib ... -
jbpm解析流程定义
2008-07-27 19:25 1014jbpm解析流程定义有三种方式:1)par包static Pr ... -
Jbpm学习知识点
2008-07-26 21:32 1110如何运行Jbpm的示例程序?如何部署Jbpm?如何安装Jbp ... -
会签实现
2008-07-26 21:28 1439转载自http://tomkoo.iteye.com/blog ... -
Tomcat+mysql 配置
2008-07-26 09:24 1407JBoss JBPM 实践系列(一)--- 安装配置(Tomc ... -
业务流程设计
2008-07-26 09:01 1710转载自http://linliangyi2007.iteye. ... -
jBPM相关概念
2008-07-26 08:25 848转载自http://fndcz.iteye.com/blog/ ... -
jbpm资源
2008-07-26 07:59 832ant和发布 http://fndcz.iteye.com/ ... -
JBPM源码浅析
2008-07-26 07:40 1127转载自 http://zwchen.iteye.com/blo ... -
JBPM阶段性工作总结
2008-07-26 07:37 1540转载自http://zwchen.iteye.co ... -
eclipse的jbpm插件配置
2008-07-25 17:36 4733eclipse版本3.2.2 1. jbpm插件从jbpm-s ...
相关推荐
- **org.jbpm.task**: 任务管理模块,处理任务的分配、完成和查询。 通过阅读源码,我们可以理解流程引擎如何解析JPDL,如何构建流程执行图,以及如何在PVM上执行这些流程。同时,可以研究任务管理是如何实现的,...
用户和外部工具可以通过JBPM进行交互,支持任务的动态分配。 #### 五、总结 1. **工作量评估**:虽然引入工作流技术不会明显减少系统开发工作量,但在流程较为复杂的情况下,使用JBPM可以使项目的结构更加清晰、更...
本示例集是jbpm的一个综合应用实例,涵盖了任务列表和权限管理的重要方面,这对于理解和实践jbpm在实际工作中的应用具有极大的帮助。 首先,我们来看"我发起的任务"这个部分。在jbpm中,用户可以发起一个新的流程...
6. **任务管理**:提供了用户友好的任务分配和管理界面,便于用户跟踪和处理任务。 7. **监控与日志**:提供详细的执行日志和监控工具,方便对流程执行情况进行分析和优化。 在jbpm-3.1.2.zip压缩包中,可能包含了...
它提供了一系列的元素和指令,让开发者能够清晰地定义流程的各个阶段、任务分配、决策逻辑以及流程间的交互。在jBPM-jPDL学习笔记中,你将了解到以下关键知识点: 1. **流程定义**:jPDL通过流程图中的节点(如开始...
它能够自动处理流程中的任务分配、并发控制、异常处理等复杂逻辑。 2. 任务服务:JBPM提供了任务服务,用于管理流程中的任务,如任务创建、分配、完成和查询等。 3. 决策服务:通过与Drools(一个规则引擎)集成,...
- **任务分配**:jbpm支持根据预设规则或动态分配任务给指定用户或组。 - **任务管理**:用户可以通过jbpm提供的web界面或API查看、接受、完成任务。 - **流程监控**:提供实时的流程运行情况监控,如实例数量、...
1. **任务分配**:如何通过配置工作流定义文件(.bpmn2)来设定任务与泳道的关联,以及如何指定参与者。 2. **动态参与者**:如果参与者不是固定的,而是根据某些条件动态决定,视频可能会介绍如何使用表达式或者...
3. **任务服务**:jbPM提供了任务服务,使得用户可以参与流程,完成分配给他们的任务。任务服务通常包括任务的创建、分配、领取、完成等操作。 4. **持久化**:jbPM使用JPA(Java Persistence API)或其他持久化...
6. **任务服务**:jbpm提供了任务服务,允许用户管理任务分配、优先级设置、任务状态变更等。同时,它还支持多种工作流用户界面,如JbpmConsole或自定义的Web应用。 7. **监控和跟踪**:jbpm 4.4提供了一套强大的...
3. **工作流服务**:jbpm提供了工作流服务,包括任务分配、任务处理、任务查询等功能,使业务人员能参与到流程执行中来。 4. **持久化管理**:jbpm使用Hibernate进行数据持久化,确保流程实例和相关数据在系统重启...
用户可以查看流程实例的状态、进度,以及各个任务的处理时间等关键指标,从而分析流程的运行情况。 6. **集成与扩展**: jbpm4web作为演示项目,展示了如何将JBPM4与Web应用集成。实际开发中,它还可以与数据库、...
理解JBPM4.3中的流程管理,不仅涉及流程定义,还包括流程实例的运行、任务的分配与完成、异常处理等。通过SSH的集成,我们可以将这些复杂的业务逻辑封装起来,使得Web应用更加模块化,同时保持良好的可扩展性和维护...
例如,它可以将任务分配给特定用户或组,提供任务完成、委托、评论等操作。 4. **持久化**:JBPM利用Hibernate进行数据持久化,确保流程实例、任务和其他相关信息能够在数据库中存储和检索。 5. **规则引擎**:...
4. **任务管理**:jbpm允许用户分配和管理任务,包括任务的创建、分配、领取、完成和委托。理解任务生命周期对优化工作效率很有帮助。 5. **业务规则**:jbpm集成了Drools业务规则引擎,允许在流程中插入和执行规则...
jbpm_adapter.jar支持获取已完成任务的信息,有助于分析过去的工作流程,找出优化点或作为参考。 3. **办结任务状态**: 办结任务通常表示流程已经到达一个不可逆的终点,或者是某个阶段的终结。jbpm_adapter.jar...
在示例中,用户可以看到如何定义和启动工作流实例,以及如何在流程中进行任务分配、流转和结束。工作流的生命周期包括设计、部署、启动、执行和终止等阶段。 **示例**部分提供了实际操作的指导,包括安装配置环境、...
2. **任务服务(Task Service)**: JBPM提供了任务服务接口,用于处理任务的分配、领取、完成等操作。在销售批复流程中,每个任务的负责人可能是不同角色,如销售员、经理和财务人员。 3. **流程实例的启动与控制**...
2. **任务管理**:jbpm提供了一个任务服务,用于处理流程中的任务分配、领取、完成等操作。用户可以通过Web界面查看并处理他们的待办任务。 3. **规则引擎集成**:jbpm集成了Drools规则引擎,允许在流程中嵌入业务...
jbpm提供了灵活的任务分配策略,可以根据预定义的角色、用户或组来指定任务执行者。此外,任务可以带有相关的元数据,如优先级、截止日期等,以适应不同业务场景。 在实际应用中,jbpm还常常与规则引擎(如Drools)...