JBPM4.4_核心概念与相关API
1. 核心概念与相关API(Service API)
1.1. 概念:Process definition, process instance , execution
1.1.1. Process definition
ProcessDefinition,流程定义:
一个流程的步骤说明。如一个请假流程、报销流程、借款流程等,是一个规则。
例:

1.1.2. Process instance
ProcessInstance,流程实例:
代表流程定义的一次执行。如张三昨天按请假流程请了一次假。一个流程实例包括了所有运行阶段, 其中最典型的属性就是跟踪当前节点的指针。

1.1.3. Execution
Execution,执行:
一般情况下,一个流程实例是一个执行树的根节点。
使用树状结构的原因在于, 这一概念只有一条执行路径, 使用起来更简单。 业务API不需要了解流程实例和执行之间功能的区别。 因此, API里只有一个执行类型来引用流程实例和执行。
假设汇款和存档可以同时执行,那么主流程实例就包含了2个用来跟踪状态的子节点:

1.1. ProcessEngine与Service API
1.1.1. Configuration与ProcessEngine
Interacting with jBPM occurs through services. The service interfaces can be obtained from the ProcessEngine which is build from a Configuration. A ProcessEngine is thread safe and can be stored in a static member field.
使用默认的配置文件(jbpm.cfg.xml)生成Configuration并构建ProcessEngine:
ProcessEngine processEngine = new Configuration().buildProcessEngine();
或是使用如下代码获取使用默认配置文件的、单例的ProcessEngine对象:
ProcessEngine processEngine = Configuration.getProcessEngine();
或是使用指定的配置文件(要放到classPath下):
ProcessEngine processEngine = new Configuration().setResource("my-own-configuration-file.xml")
.buildProcessEngine();
1.1.2. jBPM Service API
jBPM所有的操作都是通过Service完成的,以下是获取Service的方式:
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
TaskService taskService = processEngine.getTaskService();
HistoryService historyService = processEngine.getHistoryService();
ManagementService managementService = processEngine.getManagementService();
各个Service的作用:
|
RepositoryService |
管理流程定义 |
|
ExecutionService |
管理执行的,包括启动、推进、删除Execution等操作 |
|
TaskService |
管理任务的 |
|
HistoryService |
历史管理(执行完的数据管理,主要是查询) |
|
IdentityService |
jBPM的用户、组管理 |
|
ManagementService |
1.1.3. API风格
方法调用链
每一个方法都是流程有关的一个业务操作,默认是一个独立的事务。
1.1.4. 查询的有关API(风格)
|
功能说明 |
相应的查询API |
|
查询“流程定义” |
ProcessDefinitionQuery processDefinitionQuery = processEngine.getRepositoryService() .createProcessDefinitionQuery(); |
|
查询“执行对象” (流程实例) |
ProcessInstanceQuery processInstanceQuery = processEngine.getExecutionService() // .createProcessInstanceQuery(); |
|
查询“任务” |
TaskQuery taskQuery = // processEngine.getTaskService()// .createTaskQuery(); |
|
查询“执行历史” (流程实例历史) |
HistoryProcessInstanceQuery historyProcessInstanceQuery = processEngine.getHistoryService() .createHistoryProcessInstanceQuery(); |
|
查询“任务历史” |
HistoryTaskQuery historyTaskQuery = processEngine.getHistoryService() .createHistoryTaskQuery(); |
以上列出的Query对象有:
1. ProcessDefinitionQuery
2. ProcessInstanceQuery
3. TaskQuery
4. HistoryProcessInstanceQuery
5. HistoryTaskQuery
这些Query对象的使用方法都是一致的,如下所示:
1, 添加过滤条件:调用其中的有关方法指定条件即可。如:
a) processDefinitionQuery.processDefinitionKey("请假")是指定查询key为”请假”的流程定义;
b) taskQuery.assignee("张三")是指定办理人为”张三”的任务。
2, 添加排序条件:
a) 调用 xxQuery.orderAsc(property),表示按某属性升序排列
b) 调用 xxQuery.orderDesc(property),表示按某属性降序排列
c) 可指定多个排序条件,就是代表第1顺序,第2顺序…等。
d) 属性名在各自的Query对象(接口)中有常量定义,如:
i. ProcessDefinitionQuery.PROPERTY_ID
ii. ProcessDefinitionQuery.PROPERTY_KEY
iii. TaskQuery.PROPERTY_NAME
iv. TaskQuery.PROPERTY_ASSIGNEE
3, 指定分页有关信息:
a) 调用方法xxQuery.page(firstResult, maxResults);
b) 这是指定first与max的值(就是Hibernate中的Query.setFirstResult()与Query.setMaxResults())
c) 如果没有调用这个方法,代表要查询出符合条件的所有记录。
4, 查询得到结果:
a) 调用方法xxQuery.list(); 表示查询列表
b) 调用方法 xxQuery.uniqueResult(); 表示查询唯一的结果
c) 调用方法xxQuery.count(); 表示查询符合条件的记录数量
JBPM4.4_核心概念与相关API的更多相关文章
- Java正则表达式中的捕获组的概念及相关API使用
要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对“()”分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次匹配中你更关心的部分 ...
- DDD战略设计相关核心概念的理解
前言 本文想再讨论一下关于领域.业务.业务模型.解决方案.BC.领域模型.微服务这些概念的含义和关系.初衷是我发现现在DDD领域建模以及解决方案落地过程中,常常对这些概念理解不清楚或者有歧义,导致我们 ...
- ElasticSearch学习笔记-01 简介、安装、配置与核心概念
一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...
- Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)
false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...
- Redux 核心概念
http://gaearon.github.io/redux/index.html ,文档在 http://rackt.github.io/redux/index.html .本文不是官方文档的翻译. ...
- Apache Shiro 核心概念
转自:http://blog.csdn.net/peterwanghao/article/details/8015571 Shiro框架中有三个核心概念:Subject ,SecurityManage ...
- kubernetes核心概念
摘抄自: https://www.cnblogs.com/zhenyuyaodidiao/p/6500720.html 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:A ...
- [转]k8s核心概念
转载自 https://blog.csdn.net/real_myth/article/details/78719244 什么是kubernetes 首先,他是一个全新的基于容器技术的分布式架构领先方 ...
- Kubernetes核心概念总结
目录贴:Kubernetes学习系列 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:APIServer.scheduler.controller manager.etcd ...
随机推荐
- Python 按当前日期(年、月、日)创建多级目录的方法
先看实际效果,现在时间2018.4.26 使用python脚本按照年月日生成多级目录,创建的目录可以将系统生成的日志文件放入其中,方便查阅,代码如下: #!/usr/bin/env python #c ...
- Punycode转中文
package cn.cnnic.ops.udf; public class GetChineseFromPunycode { static int TMIN = 1; static int TMAX ...
- tomcat8源码之架构解析
Catalina:与开始/关闭shell脚本交互的主类,因此如果要研究启动和关闭的过程,就从这个类开始看起. Server:是整个Tomcat组件的容器,包含一个或多个Service. Service ...
- DOS下运行C++程序配置
闲来无事,想想C++是否一样能用dos来,编译运行程序呢,于是上网搜搜结果喜人,详见 http://blog.csdn.net/xiaoqinpeng/article/details/6556843 ...
- TextBox控件设置ReadOnly=true后台取不到值三种解决方法(转)
当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下当TextBo ...
- winform文本框不能粘贴、复制和屏蔽右键
有3个常用方法 1.MouseMove事件中,使选不中 private void textBox3_MouseMove(object sender, MouseEventArgs e) { if (t ...
- Accumulator
Accumulator简介 Accumulator是spark提供的累加器,顾名思义,该变量只能够增加. 只有driver能获取到Accumulator的值(使用value方法),Task只能对其做增 ...
- Phalcon学习-model
Model:表与表之间的关系:hasOne 一对一( $fields, $referenceModel, $referencedFields : 当前表中的字段, 对应关系模型, 对应关系模型中表的字 ...
- hibernate不调用save也保存上了
List<Instrument> insts = instService.search(search); if (insts.size() == 1) { Instrument inst ...
- javascript 复制与粘贴操作
<script language="javascript"> function readTxt() { alert(window.clipboardData.getDa ...