编程步骤,要实现的功能有:
a> 部署流程定义。
b> 启动流程。
c> 获取任务列表。
d> 开始任务。
e> 结束任务。
其中编写流程定义和步骤a是添加流程定义到系统中;步骤b,c,d,e是使用系统中
存在的某个流程定义执行流程;步骤c,d,e是办理一个任务的过程,流程的执行就
是一次次办理任务的过程。
有两个重要的类:JbpmConfiguration和JbpmContext。JbpmConfiguration是
jBPM的相关配置信息,并有创建JbpmContext的功能,可以把JbpmConfiguration
想像成Hibernate中的Configuration与SessionFactory的结合体。使用
JbpmConfiguration.getInstance()方法创建一个JbpmConfiguration对象,这会
使用默认的jbpm配置文件:在classpath根目录中,并且名字为jbpm.cfg.xml。或
者是使用getInstance(String configFilePath)方法,用指定的配置文件构造。
Jbpm中几乎所有的操作都是通过JbpmContext完成的,可以把他想像成Hibernate
中的Session。他是通过JbpmConfiguration.createJbpmContext()方法创建的,
JbpmContext中包装有一个Hibernate的Session(通过他做的数据库操作)。使用
完JbpmContext后一定要调用他的close()方法,否则所有信息都不会持久化到数
据库当中。因为在调用JbpmConfiguration.createJbpmContext()方法时会创建一
个Hibernate的Session并开始事务;在调用JbpmContext.close()方法时会提交事
务并且关闭所关联的Session。如果在执行JbpmContext.close()之前调用方法
jbpmContext.setRollbackOnly(),则在JbpmContext.close()时会回滚事务。
** 部署流程定义
这个过程就是把流程定义的相关信息保存到jBPM的数据库中。
解析流程定义有三种方式(ProcessDefinition的静态方法):
1)解析xml文件:parseXmlResource或parseXmlInputStream和parseXmlReader;
2)是解析xml字符串:parseXmlString;
3)解析par包:parseParResource与parseParZipInputStream。
ProcessDefinition.parseXmlResource(xmlResource)接受的参数是流程定义文件
的路径,这个路径是相对于classpath的根路径的一个相对路径。
Process archive(par),流程档案文件,是一个zip文件。必须要有一个流程定
义文件,名字为processdefinition.xml,流程档案也可以包含其他的相关文件,
如processimage.jpg,gpd.xml或classes(类的字节码文件夹)等等,(流程定义
中使用到的class要放到classpath中;或者是放到流程档案的/classes文件夹中,
这样就会被流程类装载器来装载)。
流程定义不应该改变,因为预测流程变化带来的所有可能的影响是非常困难的
(或者说是不可能的)。围绕这个问题,jBPM有一个明智的流程版本机制。版本
机制允许在数据库中多个同名流程定义共存,流程实例以当时的最新版本来启动,
并且在它的整个生命周期中将保持以相同的流程定义执行。当一个新的版本被部
署,新的流程实例以新版本启动,而老的流程实例则以老的流程定义继续执行。
部署流程定义时,如果存在同名的流程定义,则版本自动累加(加1);如果不存
在,则版本为1。
在部署到jBPM数据库之后改变流程定义有很多潜在的缺陷,因此非常不鼓励这样
做。可以直接部署为一个新的版本。
** 执行流程
流程实例可以通过ProcessDefinition.createProcessInstance()方法创建,或者
是使用new ProcessInstance(ProcessDefinition pd)并传递一个流程定义来创建,
总之创建的流程实例一定是要是属于(使用)某个流程定义的。启动流程后不要
忘了使用ProcessInstance.signal()方法离开开始状态。
注意:流程定义的名字是processdefinition.xml文件中的根元素的name属性的值,
不是流程定义文件的名字!
任务列表:当前需要办理(未完成)的任务集合。可以通过TaskMgmtSession获得。
开始任务的方法为:TaskInstance.start();结束任务为:TaskInstance.end(),
TaskInstance.end(String transitionName);无参的end()方法是使用第一个
transition离开节点;第二个方法是指定完成任务后使用指定的transition离开
节点。一个任务实例只能开始和结束一次(再次开始或结束会抛异常)。
在员工填写报销单任务完成前,应把业务数据"报销金额"与流程关联起来,可以
通过设置流程变量实现。流程变量是与流程实例关联的,并且会持久化到数据库
中。不同的流程实例是互不相干的,就好比web中的session,在其中设置变量
(setAttribute)是跟其它的session中的变量无关的。
利用变量动态的设置参与者。在流程定义中指定参与者(actor-id)时,可以使
用变量,变量是以"#{"开头,以"}"结束,中间的是变量名。这里的变量引用的是
在执行流程时设置的流程变量。
流程实例有了结束时间(end!=null)就表示这个流程实例结束了。任务实例如果开
始时间不为null(start!=null),表示已经开始了,即已对其调用了start()方法;
同样在调用任务实例的end()方法时,结束时间被填充(end!=null表示任务实例
已结束)。
以下是一些实体与表的对应关系:
+-------------------+----------------------+-----------
| PO | table | 实体
+-------------------+----------------------+-----------
|ProcessDefinition |jbpm_processdefinition| 流程定义
+-------------------+----------------------+-----------
|ProcessInstance |jbpm_processinstance | 流程实例
+-------------------+----------------------+-----------
|TaskInstance |jbpm_taskinstance | 任务实例
+-------------------+----------------------+-----------
|VariableInstance |jbpm_variableinstance | 流程变量
+-------------------+----------------------+-----------
* 流程图
流程图是由node(节点)和transition(转换)组成的。每个节点都有一个类型。
每个节点(除end-state外)有1个或多个transition(转换)。每个transition
都应该有一个名字,但这不是强制性的。当transition只有一个时,可以不指定
名字,也不会有问题;但是多于1个时,应使用不同的名字来区分,以便在使用时
能够指定(区分)要使用那一个。
不管一个节点有几个transition,都只会使用其中一个离开此节点。transition
离开节点,是使用方法TaskInstance.end(String transitionName)。
如果离开节点时没有指定要使用哪个transition,则使用默认的那一个,默认的
是定义中的第一个;如果有多个transition有相同的同字,并且指定指定使用这
个名字的transition离开节点时,被使用的将是指定的名字transition列表中的
第一个。当然,这个情况,我们都应避免出现(为不同的transition 指定不同的
名字即可)。
* 变量
org.jbpm.context.exe.ContextInstance是提供流程变量服务的中央接口。
变量分为两种:流程变量和临时变量。流程变量会被持久化到数据库中;临时变
量则不会(只是在放到内存中)。
** 流程变量
变量的访问和赋值是在某一个token上进行的,缺省时,是基于root Token。
变量名的类型为java.lang.String, 支持的变量值类型参见文档10.1节。
(如果变量值是PO,则PO的id应为long型)。
每个Token(执行路线)有它自己的一套流程变量。变量的作用域和所属的Token
的生命周期一致,不同的Token上的同名变量互不影响。
** 临时变量
临时变量的值允许使用任何类型,并且临时变量同Token无关。
* Jbpm的持久化API
Jbpm中所有数据库操作的入口都是JbpmContext,这是最核心的一个类。各种的数
据库操作,JbpmContext都会委派给不同的Session(例如GraphSession,
TaskMgmtSession等)来处理。
** GraphSession
与流程图有关的数据库操作,如对流程定义和流程实例的增、删、查等操作。
** TaskMgmtSession 与任务实例有关的数据库操作,主要是任务实例的查询。
** ContextInstance
操作变量的类,可以添加或移除流程变量或临时变量,变量是就一个跟流程相关
联的key-value对。常用方法有setVariable(String key, Object value)与
getVariable(String key)。
* TaskMgmtInstance
主要是管理任务实例(TaskInstance)与角色(Swimlane)的。
分享到:
相关推荐
### jBPM 知识点详解 #### 一、jBPM 概述 jBPM 是一款开源的、纯 Java 的、轻量级的工作流引擎,它支持多种可执行流程语言,为商业流程管理(BPM)提供了一个强大的平台。jBPM 可以在任何 JavaEE 应用服务器或配置...
在《jbpm介绍》中,你可能会学习到以下关键知识点: 1. **流程建模**:jbpm支持BPMN 2.0标准,这是一种广泛接受的业务流程建模语言,允许开发者通过图形化方式设计复杂的业务流程。你可以了解到如何使用工具如...
### jBoss --JBPM介绍及应用 #### 一、引言与概述 JBoss jBPM(Job Business Process Management)是JBoss提供的一个强大的工作流引擎,它支持业务流程管理和自动化,尤其适用于Java环境中开发WS(Web Services)...
01_JBPM介绍.exe
【JBPM介绍】 JBPM(JBoss Business Process Management)是一个开源的工作流管理系统,由Red Hat公司维护,主要用于实现业务流程的自动化和管理。它提供了一种直观的流程语言,允许用户通过任务、异步等待状态、...
本文将详细介绍jbpm以及工作流的基本概念、特点和管理系统。 工作流的起源可以追溯到生产组织和办公自动化领域,其初衷是为了提高工作效率、降低成本,通过将工作分解、按规则和流程执行并进行监控。随着并行工程和...
1. **Jbpm介绍**:介绍Jbpm的起源、目标和在业务流程管理(BPM)领域的地位,解释为何选择Jbpm4.3作为开发工具。 2. **安装与配置**:详述如何在开发环境中安装Jbpm4.3,包括所需的Java环境、数据库设置以及Eclipse ...
### jBPM 白皮书:介绍 jBPM 入门 #### 一、引言与背景 在当今数字化转型的时代背景下,业务流程管理(Business Process Management,简称 BPM)成为了企业提升效率、优化流程的关键技术之一。BPM 提供了一种程序...
jbpm 数据库表介绍 jbpm 是一个基于 Java 的 workflow 引擎,用于管理和执行业务流程。jbpm 需要持久化流程部署、流程实例、任务、用户认证等信息,于是 jbpm 设计了一系列的数据库表来存储这些信息。在 jbpm 4.4 ...
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
1. **jbpm介绍**:首先,手册会介绍jbpm的核心概念和架构,包括工作流引擎、任务服务、规则引擎(可能基于Drools)以及持久化机制。此外,还会解释jbpm如何支持BPMN 2.0标准,使得流程定义更符合业界规范。 2. **...
1. **jBPM介绍**:讲解jBPM的基本概念,包括它的功能、架构以及在企业级应用中的作用。 2. **流程建模**:教授如何使用jBPM的图形化工具来设计业务流程模型,包括活动、任务、决策节点等元素的使用。 3. **流程部署*...
**JBPM介绍** JBPM是一款非常成熟且灵活的BPM(Business Process Management)解决方案,它允许开发者通过定义工作流模型来实现复杂的业务流程。JBPM的核心特性包括流程定义、流程实例管理、任务管理、规则集成、...
jbpm4.3表结构和表字段说明文档通常会详细介绍jbpm4中涉及的数据库表,包括实体如任务实例(TaskInstance)、流程实例(ProcessInstance)、工作项(WorkItem)等的表结构和字段。这些信息对于开发者来说至关重要,...
手册内容涵盖了许可证、下载、源码获取、jBPM介绍、文档内容、升级指南以及问题报告等基础知识。 **1. jBPM简介** jBPM是一个可扩展且灵活的流程引擎,能够独立运行或嵌入Java应用程序中。它支持持久执行模式,即...
#### 三、JBoss jBPM介绍 JBoss jBPM是JBoss中间件套件中的一个开源业务流程管理系统,它提供了强大的功能来支持整个BPM生命周期,包括设计、执行和监控业务流程。jBPM的主要特点包括: - **流程建模**:提供图形...
1. **jBPM介绍**:首先,手册会介绍jBPM的核心概念,包括工作流引擎、任务服务、事件处理、规则集成等,帮助读者理解jBPM的架构和工作原理。 2. **jPDL语法**:手册详细讲解了jPDL的语法规则,包括流程定义的基本...
1. **jbPM介绍**:jbPM的基本概念、架构和设计原理,以及它在业务流程管理中的作用。理解jbPM如何通过BPMN(Business Process Modeling Notation)模型来表达复杂的业务流程。 2. **安装与配置**:jbPM的下载、安装...
在`jbpm工作流引擎介绍.ppt`文件中,可能包含了对这些步骤的详细图解,展示了每个步骤如何在jbpm中建模,以及流程实例在不同阶段的变化。此外,还可能涵盖了如何配置工作流规则、如何定义和分配任务,以及如何使用...