JBPM的表关系:
JBPM_ACTION action记录表
JBPM_DECISIONCONDITIONS 结果条件表
JBPM_DELEGATION 委托表
JBPM_EVENT 事件表 处理进入或者离开事件
JBPM_EXCEPTIONHANDLER 异常处理表
JBPM_ID_GROUP 用户组表
JBPM_ID_MEMBERSHIP 用户成员表 表现用户和组之间的多对多关系
JBPM_ID_PERMISSIONS 用户权限表
JBPM_ID_USER 用户表
JBPM_MODULEDEFINITION 模块定义表
JBPM_MODULEINSTANCE 模块实例表
JBPM_NODE 流程节点表
JBPM_POOLEDACTOR 汇集参与着表
JBPM_PROCESSDEFINITION 流程定义表
JBPM_PROCESSFILE 流程文件表
JBPM_PROCESSFILEBLOCK 流程文件块表
JBPM_PROCESSINSTANCE 流程实例表
JBPM_RUNTIMEACTION 运行中行为表
JBPM_SCRIPTVARIABLES 脚本变量表
JBPM_SWIMLANE 泳道表
JBPM_SWIMLANEINSTANCE 泳道实例表
JBPM_TASK 任务表
JBPM_TASKACTORPOOL 用户行为汇总
JBPM_TASKINSTANCE 任务实例
JBPM_TIMER 计时表
JBPM_TOKEN 令牌表
JBPM_TOKENVARIABLEMAP 令牌变量影射表
JBPM_TRANSITION 转换表
JBPM_VARIABLEINSTANCE 变量实例表
JBPM_VARIABLEINSTANCEBLOCK 变量实例块表
JBPM_VARIABLEMAPPING 变量影射表
流程图
流程图由节点(node)和转换(transition)组成. 在文件 processdefinition.xml中定义 . 每个节点有一个类型. 每个节点有一套离开转换. 可以给离开节点的转换一个名字来区别.
节点
每个节点有一个指定的类型. 节点类型定义当执行到达这个节点的时候将发生什么. jBPM
有一套你可以使用的预实现的节点类型.另外也有自定义节点类型,你可以编写自己的定制代码实现你自己的指定的节点行为.
节点责任
每个节点有2个主要责任: 首先,它可以执行传统java代码. 传统java代码同节点功能相关. 比如.建立一个新的任务实例, 发送一个通知, 更新数据库.其次,节点传播流程执行.
decision节点
路由节点,解决流转的路由问题。当需要在流程中根据不同条件来判断执行不同路径时,
就可以用decision节点。
state 节点
是纯粹的wait节点,除非主动的调用signal,否则一直处于等待状态;比如,和外部系统
交互,等待外部系统响应成功之后,再继续process的执行
node 节点
node节点可以让你在节点中写你自己的代码. node节点期望一个子元素动作(action), 在
执行到达这个节点时候被执行.你的action要实现ActionHandler接口。同样,在你的action里要控制流程!
事件(Event)
例如节点可产生node-enter(节点进入)事件和一个node-leave(节点离开)事件。事件是同动作(action)挂钩的. 每个时间有一个动作(action)清单.当jBPM引擎产生一个事件,动作(action)清单就会被执行.不同的节点支持的事件类型不同,是由event元素所在的node的类型决定的
不同元素支持的事件类型:
node
node-enter
node-leave
start-state
node-leave
end-state
node-enter
transition
只有一个执行转换的事件(taking a transition)
配置时不用指定类型
task
task-create
task-start
task-assign
task-end
动作(action)
一个action是一段java代码
在流程执行期间在一些事件上定义,这样会在相关事件触发时自动执行
用来引入附加的处理逻辑
可以放在node内,也可以放在events中
--可以用在多个元素之内,用来辅助当前节点完成业务逻辑
属性: class
name
ref-name
Script
使用的是beanshell脚本
可以直接使用已设置的流程变量
以下变量在Script中可以直接引用:
executionContext
token
node
task
taskInstance
提示: 能使用action的地方一般也能使用script
可用<![CDATA[ ]]>包围内容
fork
把一个执行路线分割成多个执行路线,并为每个transition(分支)建立一个子令牌(父母-子女 关系)。如果token(parent token)遇到fork节点,会自动的分裂成多个child token,此时,parent token指向fork节点,child token指向各个分支节点。每次分支的token往前移动时,都会检查是否需要在结束自己的同时也把parent token 往前移动。
join
让所有来自同一个父母的子令牌联合.
当来自同一个fork的全部令牌都进入join的时候, join就结束了. 然后join将检查父母-子女. 当所有兄弟令牌到达联合(join),父母令牌将传播(唯一的)transition. 当还有兄弟令牌活动时,联合(join)的行为将作为等待状态.
start-state 标识流程开始边界
支持事件类型:node-leave
可以包含task元素(需要在流程实例创建之前进行认证)
end-state 标识流程的结束边界
支持事件类型:node-enter
不需要transition元素
mail-node 发送邮件节点
Token
在整个流程实例运行过程中,我们可以迅速的利用token得到其当前的current state。在解决“并行”等(比如Fork)问题时,jBpm让Token对象维护了父子关系,这种关系在涉及到Fork的时候会产生。 jBpm让Token这个对象身兼了多种使命:(1)快速定位current state (2)用于fork,join算法 (3)用于告知任务执行者的任务索引。
如下代码:
//pd是process definition,pi是process instance ProcessInstance
pi = new ProcessInstance( pd );
//得到根令牌
Token token = pi.getRootToken();
//发信令
token.signal();
Token的signal方法也可以传入transition参数,这个方法把信令发送给Token,这样,令牌将被激活,并沿指定的transition离开当前的状态(如果没有指定transition,将沿缺省的transition 离开当前状态).
jbpm是怎么实现的呢?其实很简单:
1)Token记录了当前的状态(current state),只有当前的状态(或称节点)拥有该令牌2)向TOKEN发signal后,当前状态收到该signal
3)当前状态把令牌传给signal中指定的transition
4)transition收到令牌后,不强占,马上把令牌传给下个状态.
5)根据令牌的位置,流程的状态已经发生改变.
node
一个流程图由许多node和transition组成。每个node都有一种类型,这个类型决定了当流程执行到这个node时的不同行为。jbpm有一组node type可以供你选择,当然你可以定制自己node 。
node的作用
node有两个主要的作用:
1)执行java代码,比如说创建task instance(任务实例)、发出通知、更新数据库等等。很典型的就是在node 上挂上我们的action
2) 控制流程的执行:
A、等待状态
流程进入到这个node时将处于等待状态,直到一个signal 的发出
B、流程将沿着一个leaving transition越过这个node
这种情况特殊一点,需要有个action挂在这个node上(注意这个action不是event触发的!),action中将会调用到API里
executionContext.leaveNode(String transitionName),transitionName即这里的leaving transition名字。
C、创建新的执行路径
很典型的就是fork node。流程在这里会分叉,产生新的执行路径。这样就创建了新的token,每个新的token代表一个新的执行路径。注意的是,这些新的token和产生前的token是父子关系!
D、结束执行路径
一个node可以结束一条执行路径,这同样意味着相应的token的结束和流程的结束。
相关推荐
开发者可以通过指南学习到jbpm的核心概念,如流程定义语言(bpmn2.0)、工作流引擎的使用以及异常处理机制。 3. **jbpm5用户手册**: jBPM5_用户手册-中文版为开发者提供了jbpm5的详细操作指南,包括新特性和改进...
jbpm3和jbpm4是该系统的两个重要版本,提供了丰富的功能来支持流程定义、执行、监控和优化。 jbpm3作为早期版本,其用户文档详细介绍了如何配置、部署和使用jbpm系统。"JBPM3.1Help(中文).chm"可能包含了关于jbpm3...
jbPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它由Red Hat公司维护,是Java生态系统中的一个重要组件。jbPM旨在提供灵活、可扩展的流程定义和执行能力,帮助企业实现业务流程...
源码通常是开发者学习和理解软件工作原理的重要资源,通过对源码的研究,可以深入理解jbpm如何在实际项目中发挥作用,以及如何与Struts2框架进行无缝集成。而工具则可能是一些辅助开发的库、配置文件或脚本,有助于...
### jBPM 白皮书:介绍 jBPM 入门 #### 一、引言与背景 在当今数字化转型的时代背景下,业务流程管理(Business Process Management,简称 BPM)...随着 BPM 技术的发展和完善,jBPM 必将在更多领域发挥重要作用。
"JBPM用户指南.doc"文档是jbpm的重要参考资料,它详细介绍了如何使用jbpm进行流程设计、部署、执行以及相关的API使用方法。建议初学者首先阅读这份文档,理解jbpm的基本概念和操作,然后通过实际项目练习,掌握jbpm...
KieService 是 JBPM6 中的一个重要的 API,用于获取流程管理策略和资源加载源选取。KieContainer 是一个资源库和会话接口封装,提供了 KieBase、KieSession 和 StatelessKieSession 等接口。 JBPM7 基础开发是基于...
JBPM(Java Business Process Management)是一款开源的工作流管理系统,它提供了强大的业务流程建模、执行和监控能力。本文将深入探讨JBPM的工作...理解这些概念和操作,对于有效地设计、实施和维护业务流程至关重要。
#### 一、JBPM概览与重要性 JBPM,全称为Java Business Process Management,是JBoss旗下的一款强大的工作流和业务流程管理框架。它旨在帮助企业通过自动化业务流程,提高效率和灵活性。JBPM不仅支持传统的工作流...
5. **jBPM关键概念**: - **流程定义**:预先定义的业务流程逻辑。 - **流程实例**:业务的实际执行过程。 - **参与者**:执行任务的个体或系统。 - **活动(任务)**:流程中的操作节点。 - **活动实例**:...
为了全面利用jbpm-4.4,开发者需要熟悉Java编程和相关的BPM概念,同时了解如何配置和部署jbpm环境。这可能涉及设置数据库连接、配置服务器、导入项目到IDE(如Eclipse)以及编写和部署流程定义。jbpm还提供了API和...
一、jbpm核心概念 1. 工作流引擎:jbpm的核心是工作流引擎,它负责执行流程定义(BPMN 2.0 XML文件)。工作流引擎解析流程定义,根据流程实例的状态进行任务分配和流程推进。 2. 流程定义:jbpm使用BPMN 2.0标准来...
**工作流**是jbpmDemo的核心概念。它是一系列按照特定顺序执行的任务集合,这些任务通常涉及不同角色的参与。在示例中,用户可以看到如何定义和启动工作流实例,以及如何在流程中进行任务分配、流转和结束。工作流的...
**jbPM4.3中文开发手册** ...总的来说,jbPM4.3中文开发手册是学习和应用jbPM的重要资源,它详细解释了如何利用jbPM构建和管理业务流程,对于希望理解和使用jbPM的企业开发者和架构师来说,是一份不可或缺的参考资料。
2. **研究官方文档**:JBPM的官方文档是学习的重要资源,其中包含了详细的API参考、教程和常见问题解答。 3. **参与社区讨论**:加入JBPM的社区论坛或邮件列表,可以获取最新的技术动态,同时也能向经验丰富的...
jbpm 4.4是该框架的一个重要版本,它在先前版本的基础上进行了许多改进和增强。以下是jbpm 4.4的关键特性与知识点: 1. **工作流引擎**:jbpm的核心是其工作流引擎,它负责执行流程定义(BPMN 2.0格式)。这个引擎...
通过深入研究这个jbpm3.2.2入门例子,你不仅可以了解jbpm的基本概念和使用方法,还能掌握如何在实际项目中应用工作流管理,提升你的企业级应用开发能力。这个例子为你提供了一个动手实践的平台,通过运行和修改代码...
同时,JBPM还提供了监控工具,可以实时查看流程实例的状态、跟踪任务执行情况,这对于优化和调试流程至关重要。 执行流程时,我们需要了解如何启动流程实例,如何分配和领取任务,以及如何进行任务的处理和流转。在...