[size=medium]★execution是一种类似有限状态机和UML状态图的东西, 用于在整个流程中流动, 将携带一些context信息, 比如当前节点.Transition通过使用take方法来将execution从一个节点传递到另一个节点.而当execution到达一个node之后, 将通过node的execute方法继续传递到下一个节点, 如果这个节点没有继续传递execution的话, 那么它将处于等待状态. 在开始节点将对新创建的execution进行初始化, 然后等待一个事件(或一个信号)来将其进行传递
★execution的传递过程是这样的:首先调用execution的event方法, 然后在event中找到leaving transition, 如果找到, 那么将通过调用transition的take方法将execution做为参数进行传递.到达一个node之后, 接着调用node的execute方法, 在execute中做相应的处理之后, 选择一个transition进入下一个node.
★action是用来在jbpm中插入业务逻辑的地方, 它一般都是跟一个event相关联, 最基本的event是node-leave和node-enter, 一般我们是在这里加入我们的业务逻辑
★可以将JbpmContext看成一个事务, 在流程运行过程中所需要的服务将包含在其中(这些服务在JbpmConfiguration中配置), 一般我们在执行完成之后将其关闭
★一般我们通过调用JbpmContext的loadXxxx方法取得的流程(任务)实例, 需要调用JbpmContext的save方法来做最后的保存, 但是如果是调用JbpmContext的xxxForUpdate方法来取得流程(任务)实例的话, 这不必调用jbpmContext.save方法, 这是因为xxxForUpdate方法将把这些实例添加到一个自动保存列表中, 这样在调用jbpmContext.close()方法的时候将自动被保存到数据库中.如loadProcessInstanceForUpdate方法:
public ProcessInstance loadProcessInstanceForUpdate(long processInstanceId) {
ProcessInstance processInstance = getGraphSession().loadProcessInstance(processInstanceId);
addAutoSaveProcessInstance(processInstance);
return processInstance;
}
而在close的时候会调用autoSave方法, 其代码如下:
void autoSave() {
if (autoSaveProcessInstances!=null) {
Iterator iter = autoSaveProcessInstances.iterator();
while (iter.hasNext()) {
ProcessInstance processInstance = (ProcessInstance) iter.next();
save(processInstance);
iter.remove();
}
}
}
★在默认情况下, jbpm在第一次调用hibernate session的时候将开启一个事务, 在jbpmContext关闭的时候结束一个事务, 而结束一个事务是commit还是rollback取决于我们在关闭前是否调用了jbpmContext.setRollbackOnly()方法, 调用则rollback, 否则为commit.
★token表示exection的执行路径, 它是一个运行时概念, 其内部维护了一个对当前节点的引用, 当流程实例创建之后, taoken(这里它被成为rootToken)也相应的被创建
★图形化的流程做为一种需求沟通手段非常直观, 而所有的底层细节则需要通过action来实现, 它也是用来实现业务逻辑的地方
★流程中的所有节点不外乎有两种职责:执行指定的java代码, 传递execution
★decision node有两种判断方式, 一种是定义在流程定义文件中, 一种是通过插入的handler java代码来做判断. 在配置文件中的判断做法是在transition中添加condition元素, 然后在condition中通过使用el表达式或者beanshell脚本来作判断返回的boolean值. 在运行的时候遍历所有的transition的condition, 当碰到第一个transition中的condition返回true则将从该路径离开当前节点, 如果都为false, 那么将从默认的transition离开当前节点.还有一种方法就是通过decision的expression属性的返回结果来指定从哪个transition离开.
★一种替代decision node的方案, 如果需要在流程外部来做判断, 那么为还可以通过state节点来处理, 首先让exection进入state节点, 这样整个流程将处于等待状态, 然后在流程外部做完处理之后, 通过调用token.signal(xxx)或者taskInstance.signal(xxx)来让流程继续执行.
★使用普通node来模拟decision node, 这里涉及到定制node的用法, 其实也很简单, 就是在actionhandler实现类中除了处理逻辑之外, 还需要做的一件事就是传播execution. 比如类似这样的做法:
public class AmountUpdate implements ActionHandler {
public void execute(ExecutionContext ctx) throws Exception {
// business logic
Float erpAmount = ...get amount from erp-system...;
Float processAmount = (Float) ctx.getContextInstance().getVariable("amount");
float result = erpAmount.floatValue() + processAmount.floatValue();
...update erp-system with the result...;
// graph execution propagation
if (result > 5000) {
ctx.leaveNode(ctx, "big amounts");
} else {
ctx.leaveNode(ctx, "small amounts");
}
}
}
同样我们还可以定义自己的fork和join节点
★Superstate是用来对node进行分组的. 而且可以被嵌套使用, 一般在复杂的流程设计中会使用到(比如流程中的node有一定的层次关系), 其好处能对进入Superstate中的任意的一个node进行统一的控制(通过独有的两个事件superstate-enter and superstate-leave), 对于到达内部node的transition写法也引入了用于表示层次关系的"/"(下级node)和".."(上级node)
★在将任务分配给具体的执行人(actor)时, 可以针对某一个taskInstance写一个AssignmentHandler, 将taskInstance的actorId设置为执行人, 如果多个taskInstance都是同一个执行者的话, 那么可以考虑swimlane, swimlane相当于权限管理中的角色, 先将taskInstance跟swimlane绑定, 然后将actor跟swinlane绑定.
★除了可以将taskInstance跟一个人绑定之外(也就是所谓的push模式), 还可以同时跟多个人绑定(也就是所谓的pull模式), 然后由这些人自己来决定谁来负责处理该taskInstance.因此我们可以得出结论一个taskInstance只能由一个人来处理
★...
jbpm表结构说明
jbpm_variableaccess中存放的是子processstate节点中定义的变量引用设置
jbpm_node则是所有流程的所有节点
...
[/size]
分享到:
相关推荐
在本篇jbpm学习笔记中,我们将深入探讨如何安装jbpm插件,配置运行环境,发布流程定义以及查看流程定义。 首先,下载jbpm的最新版本可以从官方指定的源获取,例如在SourceForge上...
通过阅读《jBPM-jPDL学习笔记.pdf》,你可以深入了解这些概念,并学会如何使用jPDL编写和部署流程定义,从而在实际项目中实现灵活、可扩展的业务流程管理。这份资料对于初学者来说是一份很好的入门指南,能够帮助...
工作流引擎jbpm学习笔记 jbpm是一个专业的工作流引擎,用于定义、管理和执行业务流程。它可以帮助我们简化工作流程的开发和维护,提高工作效率和可扩展性。 一、什么是公文流转? 公文流转是指公文在定义流转中的...
**JBPM4学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务...通过阅读“JBPM4学习笔记.doc”,可以深入学习这个系统,掌握如何利用它来设计、实现和管理企业的业务流程。
通过JBPM学习杂记,我们可以了解如何创建和配置这些元素,以及如何将它们连接起来形成一个完整的业务流程。 接着,我们需要了解jbpm的数据模型,包括实体类和持久化。jbpm的核心实体如ProcessInstance、Task、Job等...
文件"JBPM4学习笔记.doc"可能包含了博主在学习过程中整理的详细笔记,涵盖了上述所有知识点的实践经验和心得,对于理解JBPM4.3的使用和开发有着重要的参考价值。 总结,JBPM4.3的学习笔记涵盖了流程建模、执行、...
**JBPM3学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。在本文中,我们将深入探讨JBPM3的核心概念、功能和使用方法,以帮助...
在本文档中,主要讨论的是jbpm 4.4 版本的学习笔记。作者通过实践学习并整理了关于jbpm的一些关键概念和操作。 首先,流程图是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 准备...
### jBPM学习笔记_框架设计简介 #### JPDL与jBPM框架设计概述 jBPM(Java Business Process Model)是一种开源的工作流引擎,它提供了用于定义、执行和管理业务流程的功能。JPDL(jBPM Process Definition ...
jBPM(Java Business Process Management)是一款开源的工作流管理系统,用于在Java应用程序中...深入学习和掌握jBPM-jPDL,能够提升开发者在企业级应用开发中的专业技能,对于构建高效、灵活的企业信息系统至关重要。
入门材料 jbpm-jpdl 学习笔记 jbpm-jpdl 学习笔记 jbpm-jpdl 学习笔记
《jBPM-jPDL学习笔记——流程设计与控制》 在IT行业中,流程管理和自动化是企业提升效率的关键。jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理套件,它允许开发者通过定义流程定义...
【JBPM4学习笔记】 JBPM4是一款开源的工作流管理系统,它提供了强大的流程定义和执行能力,被广泛应用于企业的业务流程自动化。本学习笔记将深入探讨JBPM4的核心特性和使用方法,帮助读者掌握如何利用它来实现高效...
在jBPM-jPDL学习笔记中,你将了解到以下关键知识点: 1. **流程定义**:jPDL通过流程图中的节点(如开始节点、结束节点、任务节点、事件节点等)来描述流程的结构。这些节点之间的连线代表了流程的流转路径。 2. *...
### JBPM学习笔记 #### 一、JBPM概述 JBPM是Java Business Process Management的缩写,即Java业务流程管理,这是一个开源的工作流框架。它不仅涵盖了传统的业务流程管理(BPM)、工作流管理和服务之间的协作,还...
在本篇吉林大学的学习笔记中,我们将聚焦于JBPM,这是一个广泛使用的开源Java工作流管理系统,它提供了一整套工具和服务来支持流程的建模、部署和执行。 JBPM是Business Process Management(业务流程管理)的缩写...
jbpm3.1.4学习教程中的"jbpm开发指南"会涵盖以下关键知识点: 1. **流程定义**:如何使用BPMN创建流程图,包括开始事件、结束事件、任务、网关、事件等元素的使用。 2. **实体与数据管理**:jbpm如何处理流程中的...