- 浏览: 456068 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (233)
- 技术日志 (87)
- portal (7)
- jBPM/Activiti (34)
- Roller学习 (18)
- Java基础、网站开发 (19)
- 收藏URL (4)
- UML (3)
- linux操作 (7)
- 工作环境准备 (8)
- Mina (15)
- tomcat (8)
- Mylyn (3)
- sina网站 (2)
- 规则引擎 (3)
- 工作记录 (11)
- html(5) (9)
- 手机开发 (3)
- oracle (26)
- 常用的 (2)
- maven (8)
- hadoop (0)
- xml (7)
- 错误解决 (5)
- linux (1)
- c# (2)
- c++ (1)
- node.js (1)
- 银行业务知识 (1)
- Java调试 (0)
最新评论
-
tomcatmeng:
请问候选用户是怎样task自己的任务,看网上说先根据任务id先 ...
jBPM4.4:ForEach的使用--动态设置参与人数 -
maoweiwer:
友情提醒:如果是在MYSQL下创建数据库,则还需要更改\jbp ...
jBPM4.4: 创建数据库表 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
ganjiang:
有点疑惑,请lz指点,1.那个“deployId”不知是那个i ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤
最新的流程实例 -- ByKey
下面是为流程定义启动一个新的流程实例的最简单也是 最常用的方法:
ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL");
上面service的方法会去查找 key为ICL的最新版本的流程定义, 然后在最新的流程定义里启动流程实例。
当key为ICL的流程部署了一个新版本, startProcessInstanceByKey方法会自动切换到最新部署的版本。
原来已经启动的流程,还是按照启动时刻的版本执行。
指定流程版本 -- ById
换句话说,你如果想根据特定的版本启动流程实例, 便可以使用流程定义的id启动流程实例。如下所示:
ProcessInstance processInstance = executionService.startProcessInstanceById("ICL-1");
使用key
我们可以为新启动的流程实例分配一个key(注意: 这个key不是process的key,而是启动的instance的key ), 这个key是用户执行的时候定义的,有时它会作为“业务key”引用。 一个业务key必须在流程定义的所有版本范围内是唯一的 。通常很容易在业务流程领域找到这种key。 比如,一个订单id或者一个保险单号。
ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", "CL92837"); // 2个参数: // 第一个参数processkey,通过这个key启动process的一个实例 // 第二个参数为这里所说的实例key(instance key)
key可以用来创建流程实例的id, 格式为{process-key}.{execution-id}。 所以上面的代码会创建一个id为 ICL.CL92837的流向 (execution)。
如果没有提供用户定义的key,数据库就会把主键作为key。 这样可以使用如下方式获得id:
ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL"); String pid = processInstance.getId();
最好使用一个用户定义的key。特别在你的应用代码中,找到这样的key并不困难。提供给一个用户定义的key, 你可以组合流向的id,而不是执行一个基于流程变量的搜索 - 那种方式太消耗资源了 。
使用变量
当一个新的流程实例启动时就会提供一组对象参数。 将这些参数放在variables变量里, 然后可以在流程实例创建和启动时使用。
Map<String,Object> variables = new HashMap<String,Object>(); variables.put("customer", "John Doe"); variables.put("type", "Accident"); variables.put("amount", new Float(763.74)); ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL", variables);
启动instance总结一下 :
启动instance,必须要知道processdefinition的信息:processdefinition可以通过2种方式获取:
- ByKey:通过ProcessKey,启动该Process的最新版本
- ById: 通过Process的ID,启动该Process的特定的版本
其他的参数:其余还可以在启动Instance的时候,给流程2个参数:
- InstanceKey:这个instanceKey必须在整个流程定义的所有范围版本中唯一,如果用户不给于提供,系统也会自己生成;
- 一个Map<String, ?>表: 启动流程时候给予的变量信息
执行等待的流向
当使用一个state
活动时,执行(或流程实例)
会在到达state的时候进行等待,直到一个signal
(也叫外部触发器)出现。
signalExecution
方法可以被用作这种情况。
执行通过一个执行id
(字符串)来引用。
在一些情况下,到达state的执行会是流程实例本身。 但是这不是一直会出现的情况。在定时器和同步的情况, 流程是执行树形的根节点。所以我们必须确认你的signal作用在正确的流程路径上。
获得正确的执行的比较好的方法是给state活动分配一个事件监听器, 像这样:
<state name="wait"> <on event="start"> <event-listener class="org.jbpm.examples.StartExternalWork" /> </on> ... </state>
在事件监听器StartExternalWork
中,你可以执行那些需要额外完成的部分。
在这个事件监听器里,你也可以通过execution.getId()
获得确切的流程id。
那个流程id,在额外的工作完成后,
你会需要它来提供给signal操作的:
executionService.signalExecutionById(executionId);
这里有一个可选的(不是太推荐的)方式,来获得流程id,
当流程到达state
活动的时候。
只可能通过这种方式获得执行id,如果你知道哪个jBPM API调用了之后,
流程会进入state
活动:
// assume that we know that after the next call // the process instance will arrive in state external work ProcessInstance processInstance = executionService.startProcessInstanceById(processDefinitionId); // or ProcessInstance processInstance = // executionService.signalProcessInstanceById(executionId); Execution execution = processInstance.findActiveExecutionIn("external work"); String executionId = execution.getId();
要注意上面的解决方式和应用逻辑联系(太)紧密 通过使用真实业务结构的知识。
说明:
上面这一段,没有看明白,需要在后面了解Instance的处理的时候,包括了解jPDL后,编写实际例子的时候重新理解
发表评论
-
jBPM4.4+SpringSecurity用户合并到自己体系中来
2011-12-30 10:53 3518jbPM4.4中的用户: 见:http://zybin ... -
从JBPM4以后的走向
2011-12-23 09:47 2087从JBPM4以后, 原来jBPM的设计师Tom Baeye ... -
jBPM4.4:查找任务完成过程
2011-08-29 11:50 2683在jBPM中,历史的任务,通过historyService可以 ... -
【jBPM】jbpm怎么获取下一个节点的任务定义,注意不是任务实例。
2011-08-27 06:19 3439http://jbpm.group.iteye.com/gro ... -
jBPM4:在Listen中使用Spring的Bean
2010-12-07 10:23 1885jBPM和Spring结合,在spring中配置了大量的Bea ... -
jBPM4:sub-process
2010-11-16 10:03 1842看了一下sub-process, ... -
jBPM4.4:配置(包括和Spring的整合,和Hibernate配置)
2010-11-08 14:50 5270jBPM4.4,获取ProcessEngine是通过Confi ... -
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤
2010-10-29 11:17 5866流程执行时,有时候需要看一下当前的工作卡在哪一步了,对于熟悉流 ... -
jBPM4:接在现有的系统上,需要更换用户体系
2010-10-08 17:59 2376在现有的应用上,接入jBPM,要修改的就是jBPM的用户体系。 ... -
jBPM4.4:ForEach的使用--动态设置参与人数
2010-09-13 14:34 7709流程确定的情况下,有时候完成一个步骤人数不确定,在任务发布的时 ... -
jBPM4.4:动态创建连接
2010-09-02 18:23 2375参考了这篇文档的思路: http://man1900.ite ... -
jBPM4.4:完成任务的几种方法
2010-09-02 13:46 1762开始了一个Process,需要完成任务,完成任务有以下几种方法 ... -
jBPM4.4:ProcessFactory和ProcessDefinitionBuilder
2010-08-31 15:44 1585在文档中,有例子可以 ... -
jBPM4.4:在看开发指南之前总结一下
2010-08-31 10:08 2143jBPM4.4: 源头是Config ... -
jBPM4.4 -- 深入了解数据库结构、关系
2010-08-27 17:13 2893重新深入了解jBPM4.4的数据库表、以及之间的关系: ... -
jBPM4.4: 动态创建执行路径 -- 类似与会签等
2010-08-25 16:23 6487工作场景: 有一项任务需要完成,不同的部门领导根据实际情况,有 ... -
jBPM4.4:ProcessDefinition/ProcessInstance/Execution/Task关系和区别
2010-08-24 16:06 9945ProcessDefinition : 这 ... -
jBPM4.4:分配任务的几种方式
2010-08-24 11:19 3361在jBPM中,分配任务可以有几种方式: 按照分配对象,可以分 ... -
jBPM4.4:获取现有的流程
2010-08-19 16:50 1532通过repositoryService, 获取一个Proces ... -
jBPM4.4:创建一个流程的实例
2010-08-19 13:42 3036发布了流程后,创建一个实例,进行执行。 ProcessEng ...
相关推荐
JBPM4.4 是一款强大的工作流管理系统,用于构建和管理业务流程。在这个系统中,有几个核心的对象和服务,它们构成了JBPM的核心功能。 1. **ProcessEngine对象**:ProcessEngine 是整个jbpm的核心,它是从 ...
3 Jbpm4.4介绍 7 3.1工作流引擎 8 3.2jpdl 8 3.3数据库 8 3.3.1资源库和运行时表结构 8 3.3.2历史数据库表 9 3.3.3身份认证表 9 3.4jbpm.cfg.xml 9 3.5 jbpm.hibernate.cfg.xml 10 3.6logging.properties 10 4 准备...
JBPM4.4是JBoss Business Automation Platform中的一个版本,专注于业务流程管理(BPM)。本文将详细介绍在JBPM4.4中进行的一些基本操作,包括安装插件、发布流程模板、创建流程实例、理解流程的signal操作、任务...
### JBPM 4.4 API 示例详解 JBPM(JBoss Business Process Management)是一个开源的工作流和业务流程管理(BPM)解决方案,基于Java技术,提供了丰富的API来管理和执行业务流程。本文将深入探讨JBPM 4.4的API示例...
### jBPM 4.4版本更新概览与关键特性 #### 一、jBPM 4.4发行说明及文档资源 jBPM(Java Business Process Model)是一款开源的工作流引擎,它允许用户设计、执行和管理业务流程。jBPM 4.4版本的发行说明提供了一...
jBPM 4.4 API Packages org.jbpm.api the jBPM API, Start by creating a Configuration, build a ProcessEngine from that, and then you can find the workflow methods on the services like ExecutionService,...