任务分派和组织建模是jBPM工作流引擎中两个重要的模块。作为一个设计出色,结构清晰的工作流引擎,jBPM在这两个模块的设计和实现上都有其值得学习的地方。
1. 任务分派
任务分派是所有工作流引擎都要支持的一个重要功能模块。其主要功能是管理任务的创建和分派。
1.1. 任务和任务实例
任务(task)是流程定义的组成部分,它定义了在流程运行期间如何创建和分配任务实例。在jBPM中,任务是可以定义在任务节点(task-node)和流程定义(process-definition)中的。
任务实例(taskInstance)在被创建后会被分配给一个用户。jBPM中使用actorId (java.lang.String)作为用户的标识。所有创建好的任务实例都会存储在数据表JBPM_TASKINSTANCE中。用户可以在JBPM_TASKINSTANCE表中使用actorId进行查询,就能够得到相应人员的任务列表。
1.2. 泳道和泳道实例
泳道(swimlane)是一个流程定义的元素。它用来支持在流程定义中将多个任务分配给同一个或者一组用户的功能。
在流程运行时,当第一次遇到任务实例分配给一个泳道的时候,引擎会创建相应的泳道实例(swimlaneInstance),并计算对应的用户,其后所有分配给这个泳道的任务实例都会分配给相同的用户。
1.3. 任务分派模式
jBPM的任务分派有两种模式,分别是推(push)模式和拉(pull)模式。
推模式是在任务分派的时候,直接将任务实例分派给一个指定的用户,任务实例进入这个用户的个人任务列表中。
拉模式是将任务实例分派给一组用户,这个任务实例会出现在组所有用户的组任务列表中。组用户需要首先将任务实例拉到自己的个人任务列表中才能够执行此任务。当有一个组用户取出了任务实例后,引擎就会将该任务实例从其他的组用户的组任务列表中去除。
1.4. 任务分派数据模型
PooledActor是pooledActors集合的元素的类型。
每个TaskInstance和SwimlaneInstance都可以分派给一个用户或者一组用户。如果分配一个用户,那么这个任务实例就直接进入了该用户的个人任务列表,如果分配给一组用户,那么这个任务实例就处于这一组用户的组任务列表中。
1.5. 任务分派接口
jBPM通过接口AssignmentHandler实现任务分派。
public interface AssignmentHandler extends Serializable {
void assign( Assignable assignable, ExecutionContext executionContext );
}
任务在定义的时候指定对应的AssignmentHandler接口实现类。引擎在创建任务实例的时候会调用接口中的assign方法。其实现应该调用参数assignable的方法对任务进行分派。
TaskInstance和SwimlaneInstance实现了接口Assignable。
public interface Assignable {
public void setActorId(String actorId);
public void setPooledActors(String[] pooledActors);
}
调用Assignable.setActorId(String actorId)方法可以将一个任务实例分派给一个用户,调用Assignable.setPooledActors(String[] actorIds)方法可以将一个任务实例分派给一组用户。
2. 组织建模
工作流引擎的组织建模问题一直都是一个难以统一解决的问题。不同应用背景,其组织模型会千差万别,因此jBPM采用了以非常简单的组织模型,并且能够非常容易的让使用者替换使用自己的组织模型。
jBPM为了能够将组织模型与引擎核心模块相分离,在引擎中只使用最基本的人员模型,而不使用任何其他的组织模型,其人员模型也只是使用一个String类型的actorId作为标识来进行任务分派。
2.1. 默认组织模型
jBPM提供了一个默认的组织模型,其对应的类为identity包和子包下面。使用的时候生成一个独立的identity的jar包,可以单独部署。
其中User代表一个用户或者能够提供某种服务的实体。Group代表一种可以有隶属管理的组织,比如组,公司,部门等。Membership表示user和group之间多对多的关系。所有的这些都从Entity类继承而来。
如果用户使用jBPM自带的默认组织模型,那么在使用jPDL(jBPM自己的工作流建模语言)定义流程的时候,还可以使用任务分派的扩展定义。
2.2. 组织建模的可替换性
如果用户需要在应用中使用自己的组织模型,那么在部署jBPM的时候,只要从它的hibernate.cfg.xml文件中去掉User,Group,Membership三个类对应的配置项,这样就可以在部署的时候不需要jBPM.identity包了。
在每个任务分派类(实现了AssignmentHandler接口的类)的 void assign( Assignable assignable, ExecutionContext executionContext )方法中,只需要根据用户自己组织模型计算得到最终的任务执行人,然后以任务执行人的Id作为参数调用assignable.setAcotrId(String)或者assignable.setPoolActors(String[]),就可以将任务实例分派给指定的人员了。
<转:http://blog.csdn.net/dust_bug/archive/2007/04/11/1559844.aspx>
分享到:
相关推荐
jbpm demo是一个基于jbpm(Java Business Process Management)框架的示例项目,它...通过分析和运行jbpmTest项目,你可以深入理解jbpm如何在实际场景中处理工作流,以及如何定制和扩展其功能以适应不同的业务需求。
4. **任务分配与协作**:jbpm支持任务(Task)的概念,可以根据流程定义自动分派任务给相应的角色或用户。用户可以通过任务列表接收、处理任务,并与其他参与者进行协作。 5. **数据集成**:jbpm允许与企业其他系统...
jbpm4.0的任务服务支持任务的分配、领取、完成和退回。它可以根据预设的工作流规则将任务分派给合适的参与者,同时提供任务交互接口,方便用户与任务进行交互。 六、事件处理 jbpm4.0支持事件处理,包括流程内部...
综上所述,jbpm工作流开发涉及流程建模、实例管理、任务处理、异常处理等多个方面,开发者需要熟练掌握这些概念和技能,才能有效地利用jbpm进行业务流程的自动化设计和实施。通过不断的学习和实践,可以提高对jbpm的...
JBPM(Java Business Process Management)是一款开源的工作流管理系统,主要用于业务流程的建模、部署、执行和监控。在JBPM3.2版本中,表初始化是系统设置的重要环节,而流程发布则是将设计好的流程模型投入实际...
jbpm内核中的调度机制负责对流程实例中的任务进行排序和分派,确保流程按预定的逻辑执行。执行机制则负责按照过程定义的规定,实际驱动任务的执行。这些机制保证了流程的正确流转,同时也提供了足够的灵活性,以应对...
在该系统中,每个角色都有特定的任务和权限,通过JBPM的工作流定义,可以清晰地定义这些角色间的交互和任务流转。例如,当客户申请贷款时,系统会根据预设的工作流规则,自动将请求分发给相应的柜员进行初步审核,...
JBPM(Java Business Process Management)是一款开源的工作流管理系统,它提供了一套完整的流程建模、执行和监控解决方案。JBPM 5.0是该系统的一个重要版本,它引入了诸多新特性以提升流程管理的效率和灵活性。...
工作流技术是组织内部自动化处理任务和流程的一种方法,它涉及任务分配、审批、跟踪以及管理业务过程。在Java环境中,工作流技术可以利用各种框架和库来实现,以提高企业的效率和协作能力。本篇文章将对Java实现工作...
业务流程管理(Business Process Management, BPM)和业务任务管理(Business Task Management, BTM)是企业信息化领域中的重要概念,特别是在Java开发环境中有着广泛应用。BPM系统旨在优化和自动化企业的业务流程,...