bpm任务分配分析
任务节点的任务资源分配(负责人分配,能执行一个任务的人或者系统通称资源):
相关对象:
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 委托”了解怎样添加分配处理配置的更多信息。
- 浏览: 418748 次
- 性别:
- 来自: 北京
最新评论
-
masuweng:
好好好,有时间了练习下
使用Java混淆工具yguard -
shengshihouzhe:
第一个eg实现的应该是循环栅栏,不是计数器
Java Phaser使用 -
yukaizhao:
推荐一个很全的guava教程 http://outofmemo ...
google guava cache 处理 -
yanqingluo:
谢谢分享,已关注.
BTrace入门及使用实例 -
luoxiaohui_java:
谢谢分享!
这么好的文章,怎么没人回复呢。
ibm was nd websphere 集群
相关推荐
**任务分配与管理** BPM能智能地分配任务给合适的员工,根据角色、技能或工作量等因素自动调度。此外,还支持任务优先级设置、提醒通知等功能,确保任务按时完成。 #### 4. **数据集成与交换** BPM系统通常具备...
引擎能够自动处理任务分配、状态变更和数据交互,确保流程的顺畅运行。它还具备异常处理能力,能够对流程中的错误或延误进行智能应对。 **3. 业务规则管理** SoTower BPM 支持业务规则的动态管理,这意味着企业可以...
这些元素代表了业务流程中的各个步骤,比如审批、任务分配等。**决策点**可以使用内置的业务规则引擎进行智能决策,而**事件**则可以处理异常或触发特定行为。 **工作流设计**是IBM BPM中的关键部分。在这里,你...
它允许用户设计复杂的工作流,涵盖从简单的任务分配到复杂的业务事务管理。Oracle BPM包括了流程建模工具Oracle BPM Studio、流程执行引擎、流程分析工具以及企业服务总线(Enterprise Service Bus, ESB)等组件。 ...
1. 任务分配:Loushang BPM支持动态任务分配,可以根据角色、部门、条件等规则自动将任务分派给相应人员,提高工作效率。 2. 并行与串行处理:通过网关(例如并发网关和 Exclusive Gateway)实现任务并行或串行执行...
4. **工作流管理**:协调人与人之间的工作任务分配,管理任务的生命周期,包括创建、分配、完成和撤销。 5. **事件处理**:捕获和响应系统内外的事件,如订单完成、异常发生等,以便适时调整流程执行。 6. **监控...
4. **任务管理**:BSTEK BPM提供任务中心,用户可以查看待办任务、历史任务,同时支持任务分配、催办和转交等功能,便于协作和管理。 5. **监控与分析**:通过实时监控流程状态,可以获取流程执行的统计信息,如...
工作流定义为一组任务的组织,通过定义任务执行顺序、条件、任务分配和监控,以达成特定的业务目标。工作流管理联盟(WfMC)给出了官方定义,强调工作流是完全自动执行的经营过程,基于一系列规则进行文档、信息或...
2. **协作与任务管理**:IBM BPM7.5 包含了任务管理功能,使得团队成员可以分配、接收、处理和跟踪任务。它支持社交协作,如评论、@提及和文件共享,以提高工作效率。 3. **工作流引擎**:此版本包含一个强大的工作...
此外,这些代码也可以作为基础,扩展到其他图像格式或更复杂的图像处理任务。 总结,理解和掌握BPM图像操作的C语言源代码,不仅需要熟悉C语言的基本语法,还需要对位图图像文件格式有一定了解。通过实践,我们可以...
在Business Process Management...总的来说,BPM会签功能的开发是一项涉及流程设计、技术实现和用户体验的综合性任务。掌握相关知识点并结合实际需求,我们可以构建出高效、灵活的会签流程,促进企业的业务流程自动化。
- **业务任务执行**:支持对业务任务进行调度和管理,包括任务分配、任务优先级调整等功能。 3. **流程集成与扩展**: - **业务流程+业务活动集成**:将业务流程与业务活动相结合,实现更复杂的功能组合和应用。 ...
4. 流程实施:将建模好的流程和设计的表单集成到BPM平台上,设置流程规则和权限,如审批流程、任务分配等。 5. 系统测试:对整个BPM系统进行功能和性能测试,确保流程的顺畅运行。 6. 上线部署:在满足所有测试...
4. **工作流引擎**:这是BPM系统的核心,负责执行流程实例,管理任务分配,处理事件和条件,以及与其他系统集成。RATHINK BPM的工作流引擎可能会有高度可配置和可扩展的特点。 5. **报表与分析**:RATHINK BPM可能...
通过BPM,可以清晰地定义各个阶段的任务分配、工作流和决策路径,确保应急响应的高效性和可控性。 3. 应急响应协同系统架构 基于BPM的应急响应协同系统包括多个核心模块,如协同工作流设计器和应急协同工作流管理器...
然后,通过BPM工具,如建模语言(例如BPMN)来绘制和规范这些流程,确保每个步骤都有明确的定义和责任分配。 BPM开发的关键在于流程分析与设计。在分析阶段,需要对现有的钣金生产线进行详细研究,识别出瓶颈和冗余...
- **协同控制服务**: 支持团队协作,包括任务分配、进度跟踪等。 - **流程服务**: 实现工作流自动化,支持业务流程的定义和执行。 - **开发服务**: 提供开发工具和APIs,支持定制化应用的开发。 - **用户界面服务**:...
优秀的BPM系统应具备强大的管理员功能,使得内部管理员能够轻松管理和编辑业务流程,如重新分配任务、批量处理等,而无需每次都咨询外部顾问。 6. 与现有软件系统集成 BPM系统应具备与其他核心软件系统集成的能力,...
3. **任务管理**:提供任务分配、任务查询、任务完成等功能,方便用户交互。 4. **事件处理**:支持信号、消息事件,用于流程间的通信和同步。 5. **服务调用**:可以集成企业内部或外部的服务,实现流程与业务...