引擎内核所关注的是一个非常“抽象”层面的问题,而不同引擎关注的“一套完整的执行环境”。或者我们可以这么来说,引擎内核的职责是非常“精简”的:确保流程按照既有的定义,从一个节点运行到另一个节点,并正确执行当前节点。
总的来说,引擎内核主要关注四个方面的问题:
(1) 流程定义问题:不是说如何图形化的定义流程,而是如何用一套定义对象,来诠释所定义的流程。
(2) 流程调度问题:提供什么的机制,可以确保流程能够处理复杂的“流程图结构”,诸如串行、并行、分支、聚合等等,并在这复杂结构中确保流程从一个节点运行到另一个节点。
(3) 流程执行问题:当流程运行到某个节点的时候,需要一套机制来解决:是否执行此节点,并如何执行此节点的问题,并维持节点状态生命周期。
(4) 流程实例对象:需要一整套流程实例对象来描述流程实例运行的状态和结果。
现在这里从技术角度来分析jbpm3的优点,简单罗列几个大家都容易看见的:
(1) jbpm的模型是采用UML Activity Diagram的语义,所以便于开发人员理解流程。
(2) jbpm提供了可扩展的Event-Action机制,来辅助活动的扩展处理。
(3) jbpm提供了灵活的条件表达式机制,来辅助条件解析、脚本计算的处理。
(4) jbpm提供了可扩展的Task及分配机制,来满足复杂人工活动的处理。
(5) 借助hibernate的ORM的优势,jbpm能够很容易支持多种数据库。
process的本质就是“节点”和“有向弧”,当然你也可以说是Node和Link,或者Node和Transition,或者Activity和Transition等等之类的。jBpm采用的是Node和Transition来表示“节点”和“有向弧”。
对于一个节点来说,从定义角度,其只关心几个事情:
(1) 这是个什么类型的节点。这个节点可能是start state,也可能是一个task node,或者是一个fork。
(2) 这个节点的转入Transition和转出Transition。
ExecutionContext是一个“执行环境”,对context这个概念应该比较熟悉了,它关联了Transition、Node、Token、ProcessInstance、TaskInstance、Task等对象。通过这个“执行环境”,我们就能取得这些对象。
记住两个重要的机制:过程调度机制和执行机制。
过程调度机制是保证token是如何正确的从一个节点流转到下一个节点的。具体怎么流转呢?
可以通过两种方式:
一是通过processInstance的signal()方法。
总结:
Token.signal(Transition)
--> Node.leave(ExecutionContext,Transition)
--> Transition.take(ExecutionContext)
--> Node.enter(ExecutionContext)
--> Node.execute(ExecutionContext)
二是通过taskInstance的end操作。
而执行机制是为提供一个运行机制,来保证节点的“正确执行”。
jBpm内核结构与实例对象:
在流程执行时候流程变量包含上下文信息. 流程变量同java.util.Map相似映射名字到值,值可能是个java对象 . 流程变量被永久化作为流程实例的一部分。
// 从流程实例中为流程变量获得上下文实例
ContextInstance contextInstance =
processInstance.getContextInstance();
// 我们准备设置一些流程变量在流程实例上下文中
contextInstance.setVariable("amount", new Integer(500));
// 访问变量通过contextInstance.
assertEquals(new Integer(500), contextInstance.getVariable("amount"));
jBPM工作流引擎和组织模型是分开的,一种用来计算参与者表达语言总是受限的. 因此,你不得不指定AssignmentHandler的实现来计算任务的参与者。
<task name='change nappy'>
<assignment class='org.jbpm.tutorial.taskmgmt.NappyAssignmentHandler' />
</task>
节点同转换相比有超过一个事件类型(event type)转换(transition)只有一个事件,节点有enter-node和 leave-node 事件。
<state name='s'>" +
" <event type='node-enter'>" +
" <action class='org.jbpm.tutorial.action.MyActionHandler' />" +
" </event>" +
" <event type='node-leave'>" +
" <action class='org.jbpm.tutorial.action.MyActionHandler' />" +
" </event>" +
" <transition to='end'/>" +
" </state>
JBPM持久化
contextSession跟jbpmContext的关系?
因为JBPM是使用hibernate来持久化,所以必须得到session,我们在用的时候通常会把获得session的过程通过配置到JBPM里,把session跟JBPM结合起来,用jbpmContext就可以了。
上下文同流程变量有关.流程变量是同流程实例相关的key-value对 维护信息. 因为上下文必须保存在数据库中,将会稍微约束使用。
org.jbpm.context.exe.ContextInstance 作为提供流程变量服务的中央接口. 你可以从ProcessInstance 获得ContextInstance。
每个执行路线(参看: 令牌) 有它自己的一套流程变量. 变量请求总是在令牌上发生. 流程实例有令牌树 (参看 面向图的程序设计 ). 当请求一个变量没有指明令牌, 那么默认的令牌是根令牌.
当在令牌上设置不存在变量,那么变量就在根令牌root-token上被建立 .这就是说每个变量默认就是整个流程范围. 如果想建立一个令牌的局部变量,必须显式的使用API:
ContextInstance.createVariable(String variableName, Token token);
当需要与JBPM数据库交互时,即我们需要从JBPM数据库中查找数据时,都是使用XXXSession的方法,常用的如:taskMgmtSession,注意它跟taskMgmtInstance的区别,后者从名字上看就知道是一个实例,说明是用来创建任务实例的,即创建taskInstance的,相反,taskMgmtSession就是从JBPM数据库中查询某个参与者拥有的任务实例。其他的接口也有类似的规则。
通俗的理解,泳道是任务实例的集合。一个分配handler实现在任务实例建立的时候被调用. 在这个时候,任务实例可以分配给一个或多个参与者. AssignmentHandler 实现可以调用 Assignable 方法(setActorId或 setPooledActors )来分配任务. 可分配的要么是一个 TaskInstance 或者 SwimlaneInstance (= 流程角色).我们可以把任务实例或者泳道分配给参与者。
但是具体怎么分配呢?
分配任务实例和分配swimlance实例到参与者的数据模型如下。每个 TaskInstance 有actorId和一组被缓存的参与者:
分享到:
相关推荐
工作流引擎jbpm学习笔记 jbpm是一个专业的工作流引擎,用于定义、管理和执行业务流程。它可以帮助我们简化工作流程的开发和维护,提高工作效率和可扩展性。 一、什么是公文流转? 公文流转是指公文在定义流转中的...
jbpm学习笔记主要涵盖了jbpm(Java Business Process Management)的多个方面,包括Signavio的使用和配置、jBPM数据库的安装、Graphical Process Designer(GPD)的安装以及jBPM在Eclipse环境中的配置。以下是这些...
在本篇jbpm学习笔记中,我们将深入探讨如何安装jbpm插件,配置运行环境,发布流程定义以及查看流程定义。 首先,下载jbpm的最新版本可以从官方指定的源获取,例如在SourceForge上...
通过JBPM学习杂记,我们可以了解如何创建和配置这些元素,以及如何将它们连接起来形成一个完整的业务流程。 接着,我们需要了解jbpm的数据模型,包括实体类和持久化。jbpm的核心实体如ProcessInstance、Task、Job等...
**JBPM3学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了对业务流程的建模、部署、执行和监控的能力。在本文中,我们将深入探讨JBPM3的核心概念、功能和使用方法,以帮助...
### jBPM学习笔记_框架设计简介 #### JPDL与jBPM框架设计概述 jBPM(Java Business Process Model)是一种开源的工作流引擎,它提供了用于定义、执行和管理业务流程的功能。JPDL(jBPM Process Definition ...
在本篇吉林大学的学习笔记中,我们将聚焦于JBPM,这是一个广泛使用的开源Java工作流管理系统,它提供了一整套工具和服务来支持流程的建模、部署和执行。 JBPM是Business Process Management(业务流程管理)的缩写...
在本文档中,主要讨论的是jbpm 4.4 版本的学习笔记。作者通过实践学习并整理了关于jbpm的一些关键概念和操作。 首先,流程图是jbpm设计流程的核心,它包含了一系列的流程元素。在提到的订购流程中,主要包括以下...
入门材料 jbpm-jpdl 学习笔记 jbpm-jpdl 学习笔记 jbpm-jpdl 学习笔记
【JBPM4.3 学习笔记】 JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于设计、执行和管理业务流程。JBPM4.3是JBPM的一个重要版本,它提供了强大的流程建模、执行和服务集成能力,是...
在开始jBPM-jPDL的学习之前,首先要搭建一个合适的运行环境。系统平台通常要求Java运行环境(JRE或JDK),因为jBPM是基于Java的。安装包通常包括jBPM的核心库、示例项目以及相关的开发工具。对于部署,可以将jBPM...
通过jBPM-jPDL学习笔记,你可以系统地学习如何使用jPDL设计和实施业务流程,掌握jbpm的核心概念和技术。无论是对于开发人员还是业务分析师,这份资料都将极大地提升你在工作流管理领域的专业技能。
【JBPM4学习笔记】 JBPM4是一款开源的工作流管理系统,它提供了强大的流程定义和执行能力,被广泛应用于企业的业务流程自动化。本学习笔记将深入探讨JBPM4的核心特性和使用方法,帮助读者掌握如何利用它来实现高效...
### JBPM学习笔记 #### 一、JBPM概述 JBPM是Java Business Process Management的缩写,即Java业务流程管理,这是一个开源的工作流框架。它不仅涵盖了传统的业务流程管理(BPM)、工作流管理和服务之间的协作,还...
一.配置Spring相关文件: 42 二、配置Hibernate相关文件: 44 三、整合需要jbpm提供的jar包: 44 17 HelloWorld 45 Xml: 45 Code: 45 18 从数据库中取出xml文件和png图片 48 19 向页面输出图片 49 20 页面显示图片 ...
**JBPM4学习笔记** JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、执行和监控的能力。JBPM4是该系统的一个重要版本,它引入了许多增强功能,使得开发者和业务分析师...
jbpm3.1.4是其历史版本之一,虽然现在有更高级的版本,但对于学习工作流基础概念和原理,这个版本仍然具有很高的价值。 首先,我们要理解jbpm的核心概念。jbpm提供了流程定义的语言(BPMN,Business Process Model ...