JBPM4.4_核心概念与相关API

1. 核心概念与相关APIService API

1.1. 概念:Process definition, process instance ,  execution

1.1.1. Process definition

ProcessDefinition,流程定义:ui

一个流程的步骤说明。如一个请假流程、报销流程、借款流程,是一个规则spa

例:指针

 

1.1.2. Process instance

ProcessInstance,流程实例:xml

表明流程定义的一次执行。如张三昨天按请假流程请了一次假。一个流程实例包括了全部运行阶段, 其中最典型的属性就是跟踪当前节点的指针。对象

 

1.1.3. Execution

Execution,执行:blog

通常状况下,一个流程实例是一个执行树的根节点。 排序

使用树状结构的缘由在于, 这一律念只有一条执行路径, 使用起来更简单。 业务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.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();

 

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(); 表示查询符合条件的记录数量

相关文章
相关标签/搜索