- 浏览: 957552 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (385)
- 搜索引擎学习 (62)
- 算法 (1)
- 数据库 (15)
- web开发 (38)
- solr开发 (17)
- nutch 1.2 系统学习 (8)
- cms (1)
- 系统架构 (11)
- linux 与 unix 编程 (16)
- android (15)
- maven (1)
- 关注物流 (1)
- 网址收集 (1)
- 分布式,集群 (1)
- mysql (5)
- apache (1)
- 资料文档备份 (7)
- 上班有感 (0)
- 工作流 (15)
- javascript (1)
- weblogic (1)
- eclipse 集成 (1)
- JMS (7)
- Hibernate (1)
- 性能测试 (1)
- spring (6)
- 缓存cache (1)
- mongodb (2)
- webservice (1)
- HTML5 COCOS2D-HTML5 (1)
- BrowserQuest (2)
最新评论
-
avi9111:
内陷到android, ios, winphone里面也是随便 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
avi9111:
呵呵,做不下去了吧,没有第二集了吧,游戏是个深坑,谨慎进入,其 ...
【HTML5游戏开发】二次开发 BrowserQuest 第一集 -
excaliburace:
方案3亲测完全可用,顺便解决了我其他方面的一些疑问,非常感谢
spring security 2添加用户验证码 -
yuanliangding:
Spring太强大了。
Spring Data JPA 简单介绍 -
小高你好:
什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?
JBPM TASK
1) 任务分配给单个用户
org.jbpm.examples.task.assignee的例子修改一下其中的jpdl文件,代码如下:
<? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskAssignee" xmlns ="http://jbpm.org/4.3/jpdl" > <!-- 开始节点 --> < start g ="20,20,48,48" > < transition to ="review" /> <!-- 节点启动后转入name为review的节点 --> </ start > <!-- 任务节点 --> < task name ="review" assignee ="#{owner}" g ="96,16,127,52" > <!-- #{}中的参数表示变量名,此处的变量名为owner --> < transition to ="wait" /> <!-- 节点执行后转入name为wait的节点 --> </ task > <!-- 等待节点 --> < state name ="wait" g ="255,16,88,52" /> </ process >
部署完流程后,启动流程实例并分配给owner=HanDou的用户:
Map < String, Object > variables = new HashMap < String, Object > (); variables.put( " owner " , " HanDou " ); ProcessInstance processInstance = executionService.startProcessInstanceByKey( " TaskAssignee " , variables);
通过流程实例ID,查找用户为HanDou的任务:
String pid = processInstance.getId(); List < Task > taskList = taskService.findPersonalTasks( " HanDou " );
用户执行当前任务:
taskService.completeTask(taskList.get(0).getId());
2) 任务处理器
org.jbpm.examples.task.assignmenthandler的例子,jpdl文件源码如下: <? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskAssignmentHandler" xmlns ="http://jbpm.org/4.3/jpdl" > < start g ="20,20,48,48" > < transition to ="review" /> </ start > < task name ="review" g ="96,16,127,52" > <!-- 配置处理器类为org.jbpm.examples.task.assignmenthandler.AssignTask --> < assignment-handler class ="org.jbpm.examples.task.assignmenthandler.AssignTask" > <!-- 配置AssignTask类中的属性assignee --> < field name ="assignee" > <!-- 配置AssignTask类中的属性assignee 的值为HanDou --> < string value ="HanDou" /> </ field > </ assignment-handler > < transition to ="wait" /> </ task > < state name ="wait" g ="255,16,88,52" /> </ process >
流程发布启动流程实例后,节点流转到review,调用
org.jbpm.examples.task.assignmenthandler.AssignTask类的assign()方法,将传入的
assignee的值HanDou作为任务的候选人分配,类AssignTask必须实现AssignmentHandler接口,重写
assign(Assignable assignable, OpenExecution execution)方法。
其源码如下:
public class AssignTask implements AssignmentHandler { private static final long serialVersionUID = 1L ; String assignee; public void assign(Assignable assignable, OpenExecution execution) { assignable.setAssignee(assignee); } }
3) 任务分配给群组用户
org.jbpm.examples.task.candidates包中的例子:
<? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskCandidates" xmlns ="http://jbpm.org/4.3/jpdl" > < start g ="20,20,48,48" > < transition to ="review" /> </ start > < task name ="review" candidate-groups ="sales-dept" g ="96,16,127,52" > <!-- 通过candidate-groups 将任务分配为sales-dept(销售部门) --> < transition to ="wait" /> </ task > < state name ="wait" g ="255,16,88,52" /> </ process >
在流程实例发布时通过org.jbpm.api. IdentityService对象创建群组与用户之间的关系,如测试用例中:
// 创建一个sales-dept组 String dept = identityService.createGroup( " sales-dept " ); // 创建一个用户,参数为(userId,givenName,familyName) identityService.createUser( " johndoe " , " John " , " Doe " ); // 创建一个用户与群组间关系,参数为(userId,groupId,role) identityService.createMembership( " johndoe " , dept, " developer " ); 测试类的测试方法注释: public void testGroupCandidateAssignment() { // 启动流程TaskCandidates ProcessInstance processInstance = executionService.startProcessInstanceByKey( " TaskCandidates " ); // 查询群组任务 ,调用方法findGroupTasks( String userId) List < Task > taskList = taskService.findGroupTasks( " johndoe " ); Task task = taskList.get( 0 ); // 将任务委派给johndoe,成为johndoe的assigned任务 taskService.takeTask(task.getId(), " johndoe " ); // 处理完毕后群组任务为空 taskList = taskService.findGroupTasks( " johndoe " ); assertEquals( 0 , taskList.size()); // 查询 johndoe的assigned任务 taskList = taskService.findPersonalTasks( " johndoe " ); task = taskList.get( 0 ); // johndoe 处理任务 taskService.completeTask(task.getId()); }
注意点:当群组任务在没有调用taskService# takeTask方法之前,调用taskService#findGroupTasks(userId)是查询不到代办任务的,只有将任务委派给某个用户之后这个用户才可处理任务。
4) 任务分配之泳道
以3)的jpdl文件为例,添加泳道的定义(加粗斜体部分),详细如下:
<? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskCandidates" xmlns ="http://jbpm.org/4.3/jpdl" > <!-- 定义泳道,将任务委派给群组sales-dept --> < swimlane name ="sales representative" candidate-groups ="sales-dept" /> < start g ="20,20,48,48" > < transition to ="review" /> </ start > < task name ="review" swimlane ="sales representative" <!-- 通过swimlane将任务指向name为sales representative的泳道定义-- > g="96,16,127,52"> <!-- 通过candidate-groups 将任务分配为sales-dept(销售部门) --> < transition to ="wait" /> </ task > < state name ="wait" g ="255,16,88,52" /> </ process >
当流程定义在jpdl文件定义完毕后,其处理过程同3)的Java类的调用和处理。
5) 任务分配并传递参数
在任务分配的同时,实际需求中往往需要添加其他的参数,比如和任务相关的业务数据,可以通过流程实例ID与业务数据的某标识ID关联,业务数据存入业务数据表,jbpm数据存入jbpm数据表中;与流程相关的参数,还可以通过jBPM的API设置参数。
在org.jbpm.examples.task.variables.包中的测试用例TaskVariablesTest类中有:
Map < String, Object > variables = new HashMap < String, Object > (); variables.put( " category " , " big " ); variables.put( " dollars " , 100000 ); Execution execution = executionService.startProcessInstanceByKey( " TaskVariables " , variables);
这段是在启动一个流程时,同时传入参数variables(Map可以保存多个变量的键值对),同时,在jbpm的API中,taskService#getVariableNames(taskId)方法用于获取任务ID为taskId的任务变量集合(SET)。
variables = taskService.getVariables(taskId, variableNames);//这个方法获取的是变量的HashMap对象。
发表评论
-
jbpm4 数据库结构关系图 JBPM数据库分析
2012-02-08 18:29 5413持久化基础知识 ... -
【转】JBPM深入解析之变量设计
2012-02-08 18:21 1050在流程的流转的过程中,很多时候我们需要根据不同的实际情况传入一 ... -
jbpm4.4之待处理任务 【转】
2012-01-17 17:05 2684jbpm4中已有获取待指定用户处理的任务的方法,如下: ... -
【转】jBPM4:ForEach的使用--动态设置参与人数
2012-01-03 21:49 1880流程确定的情况下,有时候完成一个步骤人数不确定,在任务发布 ... -
jbpm4任务列表分页显示【转】
2011-12-29 18:23 1569关键时刻发现我并不会,于是下定决心研究一下,发现jbpm4 ... -
jbpm 4 工作流会签的理解
2011-12-22 16:41 1738理解步骤: 1 用一个任 ... -
解决jbpm4.4和spring多数据源的问题【转】
2011-12-22 14:05 1441采用官方的解决方案,在单数据源下没 ... -
JBPM4.4中的退回和取回的功能实现 【转】
2011-12-22 11:19 3397在JBPM4.4中,退回功能很容易明白,就是执行到当前任务时, ... -
jbpm4.4整合自己的用户体系 【转】
2011-12-20 18:03 1265虽然jbpm4中已经有用户体系,但实际项目中也会有自己的用户体 ... -
工作流之时间管理【转】
2011-12-17 10:39 1190现在我们来看工作流的 ... -
JBPM4.4 撤销任务/回退任务/自由流【转】
2011-12-16 15:53 3225JBPM4.4任务撤销操作/回退操作/自由流 详细操作看注释。 ... -
JbpmUtil 工具类分享 (jbpm4.x工作流)
2011-12-14 12:50 2306/** * */ package com.zwl. ... -
【转】JBPM4 - TaskService
2011-12-13 12:53 1205TaskService的主要目的是 ... -
工作流开始学习
2011-12-01 13:33 1013开始学习。。。 同事给了一个 实例 整合ssh2 + ...
相关推荐
jbpm 是一个开源的工作流管理系统,它主要用于设计、执行和管理业务流程。在这个系统中,jPDL(jbpm Process Definition Language)是用于定义流程的元数据语言,类似于 BPMN(Business Process Modeling Notation)...
JBPM_TASK JBPM_TASK FK_TASK_PROCDEF PROCESSDEFINITION_ 一个流程可能有多个task JBPM_MODULEDEFINITION JBPM_MODULEDEFINITION FK_MODDEF_PROCDEF PROCESSDEFINITION_ 一个流程可能处在很多的模块(模块概念不...
JBPM4 中 ProcessDefinition、ProcessInstance、Execution、Task 关系和区别 ProcessDefinition 是流程的定义,也可以理解为流程的规范。它有一个 id,这个 id 的格式为 {key}-{version},其中 key 和 version 之间...
在jbpm4中,processDefinition、processInstance和Task是三个非常关键的概念,它们构成了流程管理的基础。 1. **ProcessDefinition**: ProcessDefinition是流程的蓝图,它定义了一个流程的结构和行为。它包含了...
用户可以通过工作列表(Task List)进行任务的接收和处理。 5. **流程监控**:jbPM提供了一个Web管理控制台,可以实时查看流程实例的状态、历史记录,以及执行过程中的各种统计信息。 ### 三、jbPM 3.2 主要特性 ...
- **JBPM4_TASK**:任务表,记录任务的状态、参与者等信息。 - **JBPM4_VARIABLE**:流程变量表,存储流程实例中的变量值。 6. **操作示例** - **发布流程**:使用`DEPLOY`命令将流程定义发布到系统。 - **上传...
【jbpm5完整的例子】是针对企业业务流程管理(Business Process Management, BPM)的一个实践教程,其中涵盖了jbpm5框架的多个核心功能和用法。jbPM是一个开源的工作流管理系统,它提供了强大的流程定义、执行和监控...
- **工作流服务**:jbpm可以通过服务组件接口(Service Task)与其他系统交互,如数据库、Web服务等。 - **事件驱动**:支持事件处理,如错误处理、信号触发等,增强了流程的灵活性。 - **规则与流程结合**:通过...
描述用eclipse部署JBPM服务,以及用xfire将JBPM服务发布成webservice。一、下载JBPM包并解压。。。。
jPDL的XML元素包括但不限于:`<process>`(定义整个流程)、`<start>`(流程的起点)、`<end>`(流程的终点)、`<task>`(用户任务)、`<action>`(执行特定动作)、`<sequenceFlow>`(流程流转)和`<decision>`...
2. **任务服务**:jbpm-human-task.jar处理与人类参与者交互的任务,如分配任务、完成任务、查询任务等。它与工作流引擎协同工作,确保流程中的任务能被正确处理。 3. **规则服务**:jbpm-bpmn2-drools.jar和jbpm-...
6. **jbpm-human-task-mina-5.4.0.Final.jar** 和 **jbpm-human-task-hornetq-5.4.0.Final.jar**:这两个组件分别与Apache MINA(一个网络应用程序框架)和HornetQ(一个高性能的消息中间件)集成,提供了任务通知和...
- **任务(Task)**:工作流程中的一个活动或操作,可以分配给特定用户或角色执行。 - **节点(Node)**:流程图中的各个步骤,包括开始节点、结束节点、任务节点、决策节点等。 - **泳道(Swimlane)**:用以...
newTask.setDescription("This is a new task created in JBPM."); dbSession.insert(newTask); // 更新任务的状态 TaskImpl updatedTask = dbSession.findTaskById(newTask.getId()); updatedTask.setStatus...
- **JBPM4_TASK**:保存需要人工参与的Activity信息。 总之,jBPM为开发者提供了一套全面的工具集,用于设计、实施和监控业务流程。它通过图形化流程定义、灵活的数据管理和强大的API,帮助企业实现流程自动化,...
除此之外,jbpm还提供了工作流服务(Task Service),用于管理任务的生命周期,包括分配、领取、完成等操作。同时,jbpm提供了事件服务(Event Service)来处理流程中的事件,比如监听特定的流程事件并触发相应的...
3. **jbpm-human-task**:这部分源代码专注于处理与人类参与者交互的任务。jbpm5支持定义任务分配规则,如分配给特定用户或用户组,以及任务的创建、接收、完成和委托。 4. **jbpm-gwt**:这部分源代码涉及到jbpm5...
- **JBPM_TASK**:任务表,记录所有任务的信息。 - **JBPM_TASKACTORPOOL**:任务参与者关系表,记录任务与用户的关联关系。 - **JBPM_TASKINSTANCE**:任务实例表,记录每个任务的具体执行情况。 4. **其他支持...
jbpm-human-task-5.1.0.Final.jar jbpm5
3. **任务管理(Task Management)**:JBPM4.3支持任务分配、接收、完成和转移。在示例中,你会了解到如何通过工作项管理器(Work Item Manager)处理任务,以及如何与用户交互。 4. **数据库存储(Database ...