JBPM(三)ProcessEngine與Service API

1.獲取processEngine的方法:

a) 方法一

private ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();

b) 方法二

// 獲取單例的ProcessEngine對象,使用的是默認的配置文件(jbpm.cfg.xml)

private ProcessEngine processEngine = Configuration.getProcessEngine(); 

在 jbpm.cfg.xml 中:

<jbpm-configuration>
	  <import resource="jbpm.default.cfg.xml" />
	  <import resource="jbpm.businesscalendar.cfg.xml" />		
	  <import resource="jbpm.tx.hibernate.cfg.xml" />
	  <import resource="jbpm.jpdl.cfg.xml" />
	  <import resource="jbpm.bpmn.cfg.xml" />
	  <import resource="jbpm.identity.cfg.xml" />
</jbpm-configuration>
在 jbpm.hibernate.cfg.xml 中:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
	  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- 如果是MySQL,一定要使用org.hibernate.dialect.MySQL5InnoDBDialect方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///jbpm4_test</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">1234</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<!-- 這些映射文件是JBPM的,不能刪除!!! -->
		<mapping resource="jbpm.repository.hbm.xml" />
		<mapping resource="jbpm.execution.hbm.xml" />
		<mapping resource="jbpm.history.hbm.xml" />
		<mapping resource="jbpm.task.hbm.xml" />
		<mapping resource="jbpm.identity.hbm.xml" />
	</session-factory>
</hibernate-configuration>



2.常用的Service API(JBPM所有的操作都是通過Service完成的)

a) processEngine.getRepositoryService();//管理流程定義的相關操作(部署,查詢,刪除等)

b) processEngine.getExecutionService();//管理執行的,流程實例的管理操作,一次具體執行的信息,包括啓動、推進、刪除Execution等操作

c) processEngine.getTaskService();//管理任務的(查詢任務,辦理任務)

d) processEngine.getHistoryService();//管理歷史的數據(執行完的數據管理,主要是查詢)

3.API風格

a) 方法調用鏈.

b) 每一個方法都是流程有關的一個業務操作,默認是一個獨立的事務.

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) 這是指定firstmax的值(就是Hibernate中的Query.setFirstResult()Query.setMaxResults()

c) 如果沒有調用這個方法,代表要查詢出符合條件的所有記錄。

4, 查詢得到結果:

a) 調用方法xxQuery.list(); 表示查詢列表

b) 調用方法 xxQuery.uniqueResult(); 表示查詢唯一的結果調用方法xxQuery.count(); 表示查詢符合條件的記錄數量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章