ProcessDefinition,流程定义:ui
一个流程的步骤说明。如一个请假流程、报销流程、借款流程等,是一个规则。spa
例:指针
ProcessInstance,流程实例:xml
表明流程定义的一次执行。如张三昨天按请假流程请了一次假。一个流程实例包括了全部运行阶段, 其中最典型的属性就是跟踪当前节点的指针。对象
Execution,执行:blog
通常状况下,一个流程实例是一个执行树的根节点。 排序
使用树状结构的缘由在于, 这一律念只有一条执行路径, 使用起来更简单。 业务API不须要了解流程实例和执行之间功能的区别。 所以, API里只有一个执行类型来引用流程实例和执行。接口
假设汇款和存档能够同时执行,那么主流程实例就包含了2个用来跟踪状态的子节点:事务
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.ci
使用默认的配置文件(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();
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 |
|
方法调用链
每个方法都是流程有关的一个业务操做,默认是一个独立的事务。
功能说明 |
相应的查询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(); 表示查询符合条件的记录数量