上一篇簡單記錄了工作流的概念,以及對Activiti5進行了簡單介紹,生成了23張數據庫表。
這一篇記錄下Activiti的幾個核心API
引擎API(圖例)一. ProcessEngine
-
在Activiti中最核心的類,其他的類都是由他而來。
-
最簡單的創建方式(Activiti流程引擎是通過acitiviti.cfg.xml文件進行配置的。注意,這不適用於使用Spring構建流程引擎的情況。)
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- 使用配置文件(activiti.cfg.xml)
<!-- 數據庫配置文件 --> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activitims?useUnicode=true&characterEncoding=utf8"></property> <property name="jdbcUsername" value="srtc"></property> <property name="jdbcPassword" value="srtc"></property> <!-- 沒有表創建表 --> <property name="databaseSchemaUpdate" value="true"></property> </bean>
/** * 功能: 使用配置文件.<br/> * date: 2014年12月15日 下午2:37:26 <br/> * * @author [email protected] */ @Test public void createTableByCfg() { // 流程引擎對象 ProcessEngine processEngine = ProcessEngineConfiguration .createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine(); System.out.println("ProcessEngine:" + processEngine); }
- 由流程引擎創建各個Service,這些Service是用來調用工作流23張表的服務
- 創建RepositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();
- 創建RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
- 創建TaskService
TaskService taskService = processEngine.getTaskService();
6.各個Service的作用
管理流程定義 |
|
RuntimeService |
執行管理,包括啓動、推進、刪除流程實例等操作 |
TaskService |
任務管理 |
HistoryService |
歷史管理(執行完的數據的管理) |
IdentityService |
組織機構管理 |
FormService |
一個可選服務,任務表單管理 |
ManagerService |
|
二.RepositoryService
是Activiti的倉庫服務類。所謂的倉庫指流程定義文檔的兩個文件:bpmn文件和流程圖片。- 可以產生DeploymentBuilder,用來定義流程部署的相關參數
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
- 刪除流程定義
repositoryService.deleteDeployment(deploymentId);
三.RuntimeService
四.TaskService
五.HistoryService
是activiti的查詢歷史信息的類。在一個流程執行完成後,這個對象爲我們提供查詢歷史信息。
六.ProcessDefinition
流程定義類。可以從這裏獲得資源文件等。
七.ProcessInstance
代表流程定義的執行實例。如范冰冰請了一天的假,她就必鬚髮出一個流程實例的申請。一個流程實例包括了所有的運行節點。我們可以利用這個對象來了解當前流程實例的進度等信息。流程實例就表示一個流程從開始到結束的最大的流程分支,即一個流程中流程實例只有一個。
八.Execution
Activiti用這個對象去描述流程執行的每一個節點。在沒有併發的情況下,Execution就是同ProcessInstance。流程按照流程定義的規則執行一次的過程,就可以表示執行對象Execution。
ProcessInstance的源代碼:
從源代碼中可以看出ProcessInstance就是Execution。但在現實意義上有所區別:
在單線流程中,如上圖的貸款流程,ProcessInstance與Execution是一致的。
這個例子有一個特點:wire money(匯錢)和archive(存檔)是併發執行的。 這個時候,總線路代表ProcessInstance,而分線路中每個活動代表Execution。
總結:
-
一個流程中,執行對象可以存在多個,但是流程實例只能有一個。
-
當流程按照規則只執行一次的時候,那麼流程實例就是執行對象。