流程中的任务是流程与操作者的一种交互手段,任务是Jbpm的核心。一般使用Task Node 节点定义。当在task node节点中定义了任务时,流程流转到此就会产生任务实例,等待任务实例的参与者处理完任务之后流程才继续执行。
任务实例在jbpm中主要体现在jbpm_taskinstance这个表中。任务的分配,一般一个任务产生一个实例,可以分配给一个参与者或者多个参与者,如果分配给了多个参与者,则只能由多个参与者的其中一个完成,当参与者处理完成之后,其他人将不会在自己的代办任务栏中看到这个任务实例。任务的分配一般有两种方式:
一种是Handler,即定义一个实现AssignmentHandler接口的类 重写assign方法。
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="tasknode">
<start-state name="start-state1">
<transition to="task-node1"></transition>
</start-state>
<task-node name="task-node1">
<task name="mytask">
<assignment class="com.royzhou.AssignAction"></assignment>
</task>
<transition to="end-state1"></transition>
</task-node>
<end-state name="end-state1"></end-state>
</process-definition>
自定义实现类
package com.royzhou.action;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;
public class AssignAction implements AssignmentHandler {
public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
assignable.setActorId("royzhou");//单一参与者
//assignable.setPooledActors(new String[]{"royzhou","jane"});
}
}
另外一种是swimlane方式,先定义好泳道swimlane,然后在任务中调用。(类似全局变量)具体使用如下(仍然使用前面的action类):
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="tasknode">
<swimlane name="taskassign">
<assignment class="com.royzhou.AssignAction"></assignment>
</swimlane>
<start-state name="start-state1">
<transition to="task-node1"></transition>
</start-state>
<task-node name="task-node1">
<task name="mytask" swimlane="taskassign">
</task>
<transition to="end-state1"></transition>
</task-node>
<end-state name="end-state1"></end-state>
</process-definition>
此外还有其他几种方式:expression(需要结合jpdl身份认证组件)、pooled actors、actor方式。注意:泳道只初始化一次,这是他的局限性。可以结合handler方式。
如果使用pooled actors、actor方式必须注意,不可以使用pooled actors代替actor,因为pooled actors指的是潜在参与者而actor为指定参与者。
一般任务实例的生命周期分为:task¬-create、task-assign、task-start、task-end。不过task-assign只有在任务分配的时候才会执行。一般来说执行的顺序是这样的:
task¬-createtask-assigntask-starttask-end
任务控制器taskController的作用主要是用来处理输入输出,与流程变量打交道。
<task name="mytask">
<controller>
<variable name="a" access="read,write" mapped-name="a"></variable>
<variable name="b" access="read,write,required" mapped-name="mappedb"></variable>
<variable name="c" access="read" mapped-name="mappedc"></variable>
<variable name="d" access="write"></variable>
</controller>
</task>
在上面代码中,可以看到access有三个可选值:
Read:表示任务实例初始化时会从流程实例上下文中读取key为name的变量的值进行赋值
Write:表示任务完成之后写回流程上下文,如果设置了mapped-name的话,则用mapped-name作为key写回(通过setVariable(String key,Object object)完成。)
如果没有设置mapped-name则使用name为key写回
Required:在设置了write的情况下,如果设置了required则必须将值写回流程上下文,否则会抛出异常IllegalArgumentException
任务实例变量的获取可以通过taskinstance.getVariableInstances()获取(access中有read的变量),返回的是一个Map。同样当我们为taskInstance写回变量的时候可以通过taskInstance.addVariables(Map map)来设置。(只设置access中有write的变量)
一般任务创建之后需要对任务的执行人做相应的提醒。Jbpm中有两种方式
第一种是:设置任务的notify属性,在任务分配的时候对执行人提醒,配置如下:
<task-node name="task-node1">
<task name="mytask" notify="true">
</task>
<transition to="end-state1"></transition>
</task-node>
使用这种方式时必须在jbpm.mail.template.xml文件中添加一个模版:task-assign
第二种是:设置任务的reminder属性,这种方式是任务分配完之后在duedate之后定时repeat时间对执行人提醒,需要jbpm的任务调度服务支持(必须开启jbpm任务调度服务)。
Jbpm的任务调度主要是使用一个定时器,定时扫描jbpm_job这张表,看看有没有job需要执行。
要实现jbpm的任务调度必须开启jbpm任务调度服务,代码如下:
JbpmConfiguration configuration = JbpmConfiguration.getInstance();
configuration.getJobExecutor().start();
使用reminder的配置如下:
<task name="mytask">
<reminder duedate="30 seconds" repeat="20 seconds"/>
</task>
使用这种方式时必须在jbpm.mail.template.xml文件中添加一个模版:task-reminder
上面两种设置方法都涉及到邮件发送,邮件发送的配置类似之前的mail-node节点。不多做解释。
分享到:
相关推荐
jbpm任务分配管理是BPM(业务流程管理)框架jbpm中的一个重要组成部分,它涉及到如何在流程执行过程中将任务分配给合适的参与者。jbpm是一个开源的Java库,用于建模、执行和管理业务流程,而任务分配是流程执行的...
JBPM3.2与Spring的整合主要是为了实现任务调度的功能,这在企业级应用中是非常重要的,因为它能够自动化执行定时任务,如流程启动、数据同步、报告生成等。在JBPM3.1.x版本中,通过SpringModules提供的`spring-...
这可能涉及到SMTP服务器配置、邮件模板设计以及与JBPM任务服务的集成。 最后,监控是BPM系统的重要组成部分,JBPM提供了报表和监控工具,可以帮助你查看流程实例的状态、跟踪流程执行历史、分析性能瓶颈等。你可以...
6. **jbPM任务服务(Task Service)**:处理人工作流,如任务分配、审批和协作。 7. **集成**:学习如何将JBPM与其他系统如Spring、Hibernate、EJB等集成,实现企业级应用的无缝对接。 8. **事件处理和异常管理**...
本示例集是jbpm的一个综合应用实例,涵盖了任务列表和权限管理的重要方面,这对于理解和实践jbpm在实际工作中的应用具有极大的帮助。 首先,我们来看"我发起的任务"这个部分。在jbpm中,用户可以发起一个新的流程...
jbpm4.3表结构和表字段说明文档通常会详细介绍jbpm4中涉及的数据库表,包括实体如任务实例(TaskInstance)、流程实例(ProcessInstance)、工作项(WorkItem)等的表结构和字段。这些信息对于开发者来说至关重要,...
1. **强大的控制流机制**:jBPM提供了直观的流程语言,如任务、异步通信的等待状态、定时器、自动操作等,这些元素共同构成了强大的控制流机制。 2. **低依赖性**:jBPM对企业应用的依赖性极小,可以轻松作为Java库...
4. **任务处理**:jbPM支持用户任务,即需要人工干预的任务。用户可以通过工作列表(Task List)进行任务的接收和处理。 5. **流程监控**:jbPM提供了一个Web管理控制台,可以实时查看流程实例的状态、历史记录,...
6. **任务管理**:提供了用户友好的任务分配和管理界面,便于用户跟踪和处理任务。 7. **监控与日志**:提供详细的执行日志和监控工具,方便对流程执行情况进行分析和优化。 在jbpm-3.1.2.zip压缩包中,可能包含了...
4. **任务管理**:jBPM中的任务服务允许用户交互地处理流程中的任务,包括任务的分配、领取、完成以及查询。 5. **事件处理**:系统能够监听并响应各种事件,如流程实例的开始、结束、异常等,以便进行相应的处理。...
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
- **JBPM4_TASK**:任务表,记录任务的状态、参与者等信息。 - **JBPM4_VARIABLE**:流程变量表,存储流程实例中的变量值。 6. **操作示例** - **发布流程**:使用`DEPLOY`命令将流程定义发布到系统。 - **上传...
【JBPM修改数据库教程及实例】 JBPM,全称Java Business Process Management,是一个开源的工作流管理系统,用于管理和执行业务流程。在JBPM6中,默认使用H2内存数据库进行存储,但实际生产环境中,我们通常会选择...
jbpm(Java Business Process Management)是一款开源的工作流管理系统,它为业务流程自动化提供了一套全面的解决方案。jbpm不仅支持工作流的建模、执行,还提供了监控和管理功能,使得开发者可以方便地构建和部署...
3. **持久化**:jbpm4利用JPA(Java Persistence API)进行持久化管理,可以将流程实例、任务信息等数据存储在数据库中,确保数据的安全性和可靠性。 4. **规则集成**:jbpm4集成了Drools规则引擎,可以在流程执行...
jbpm 需要持久化流程部署、流程实例、任务、用户认证等信息,于是 jbpm 设计了一系列的数据库表来存储这些信息。在 jbpm 4.4 中,主要使用的数据库表有: jbpm4_deployment jbpm4_deployment 表用于存储流程部署的...
6. **任务管理**:JBPM提供了任务服务,允许用户进行任务查询、领取、完成等操作。在Struts视图层,可以展示待办任务列表,用户交互后触发任务状态的变化。 7. **监控与优化**:JBPM提供了丰富的监控功能,如流程...
- **任务管理**:用户可以通过jbpm提供的web界面或API查看、接受、完成任务。 - **流程监控**:提供实时的流程运行情况监控,如实例数量、任务状态、执行时间等。 - **审计日志**:记录流程实例的详细历史,便于...
jbpm4web提供了一个用户友好的任务列表,让用户能够查看并处理待办任务。参与者可以完成任务、分配任务给其他人,或者对任务进行评论和附件上传等操作。 4. **流程控制**: 在jbpm4web中,用户还可以进行流程控制...