背景介紹本系列文章是對Activiti-5.15.1的源碼進行分析的結果,后面提到的Activiti均是指該版本。源碼的下載地址是:https://github.com/Activiti/Activiti/archive/activiti-5.15.1.zip。請參考源碼來閱讀本文。 源碼工程結構Activiti使用maven來管理源碼工程。它是一個maven項目群組成的。這些項目群中的子模塊之間的關系如下所示。 
上圖體現了各項目之間的集成和依賴關系。 下面是各項目的說明。說明,省略了所有相同的groupId的值org.activiti 項目名稱 | 項目內容 | activiti-bpmn-model
| 該項目中包含了Activiti實現的BPMN的模型定義的類,實現了BPMN2.0的標準,參考BPMN2.0去理解比較容易些。 | activiti-process-validation
| 該項目中包含了工作流的校驗相關的代碼。 | activiti-bpmn-converter
| 該項目中包含了對XML格式定義的流程進行解析和轉換的類。 | activiti-engine
| 該項目是工作流引擎的核心工程,該工程可以獨立部署提供服務,集成了其它幾個子工程。 |
因此可以看出來核心的工程是activiti-engine,該工程主要實現了Activiti工作流引擎的核心邏輯。接下來的代碼分析主要從該工程代碼入手。 activiti-engine工程結構
從上圖可以看出來,目前activiti-engine是用到了spring和mybatis兩個組件的,另外使用了一些通用的包,主要是common-*,測試用到了junit4. activiti-engine抽象接口類圖
上述類圖是activiti的幾個抽象接口,這些接口也是暴露給應用程序最終的幾個接口,了解這些接口非常重要。
接口名稱 | 接口含義 | EngineServices
| Interface implemented by all classes that expose the Activiti services. 該接口表示是工作流引擎,通過該接口暴露出工作流引擎的核心服務,其它主要接口的實例通過該接口獲取。 | RepositoryService
| Service providing access to the repository of process definitions and deployments. 該接口是提供了流程定義和部署的服務。 | RuntimeService
| 流程運行時接口,該接口提供了流程實例的各種處理服務。 | FormService
| Access to form data and rendered forms for starting new process instances and completing tasks. 動態表單服務,提供了表單的數據獲取、表單生成等服務接口。 | TaskService
| Service which provides access to {@link Task} and form related operations. 任務相關服務,提供了對任務的各種處理接口。 | HistoryService
| Service exposing information about ongoing and past process instances. This is different * from the runtime information in the sense that this runtime information only contains * the actual runtime state at any given moment and it is optimized for runtime * process execution performance. The history information is optimized for easy
* querying and remains permanent in the persistent storage. 歷史服務,主要提供了查詢歷史的流程實例的相關數據的接口。
| IdentityService
| Service to manage {@link User}s and {@link Group}s. 用戶和用戶組的接口。若想實現與本地用戶的集成,可以重新實現該接口。
| ManagementService
| Service for admin and maintenance operations on the process engine. * * These operations will typically not be used in a workflow driven application,
* but are used in for example the operational console. 流程數據管理接口。提供對于流程中的各種數據的存取的相關接口。
|
接下來將繼續研究ProcessEngineConfiguration的實現類,具體是如何實現的。
|