( 二 )、Activiti 表結構介紹、核心接口介紹
1、表結構介紹
官網地址:https://www.activiti.org/userguide/#creatingDatabaseTable
1.1、表前綴說明
- act_ge_ 通用數據表,ge是general的縮寫
- act_hi_ 歷史數據表,hi是history的縮寫,對應 HistoryService 接口
- act_id_ 身份數據表,id是identity的縮寫,對應 IdentityService 接口
- act_re_ 流程存儲表,re是repository的縮寫,對應 RepositoryService 接口,存儲流程部署和流程定義等靜態數據
- act_ru_ 運行時數據表,ru是runtime的縮寫,對應 RuntimeService 接口和 TaskService 接口,存儲流程實例和用戶任務等動態數據
1.2、Activiti 數據表清單:
| 表分類 | 表名 | 備注說明 |
| 一般數據 | ACT_GE_BYTEARRAY | 流程定義的bpmn和png文件 |
| ACT_GE_PROPERTY | 系統相關屬性 | |
| 流程歷史記錄 | ACT_HI_ACTINST | 歷史的流程實例 |
| ACT_HI_ATTACHMENT | 歷史的流程附件 | |
| ACT_HI_COMMENT | 歷史的說明性信息 | |
| ACT_HI_DETAIL | 歷史的流程運行中的細節信息 | |
| ACT_HI_IDENTITYLINK | 歷史的流程運行過程中用戶關系 | |
| ACT_HI_PROCINST | 歷史的流程實例 | |
| ACT_HI_TASKINST | 歷史的任務實例 | |
| ACT_HI_VARINST | 歷史的流程實例變量表 | |
| 用戶用戶組表 | ACT_ID_GROUP | 身份信息-組信息 |
| ACT_ID_INFO | 身份信息-組信息 | |
| ACT_ID_MEMBERSHIP | 身份信息-用戶和組關系的中間表 | |
| ACT_ID_USER | 身份信息-用戶信息 | |
| 流程定義表 | ACT_RE_DEPLOYMENT | 流程定義部署表 |
| ACT_RE_MODEL | 模型信息 | |
| ACT_RE_PROCDEF | 流程定義信息 | |
| 運行實例表 | ACT_RU_EVENT_SUBSCR | 運行時事件 |
| ACT_RU_EXECUTION | 運行時流程執行實例 | |
| ACT_RU_IDENTITYLINK | 運行時參與者的用戶信息 | |
| ACT_RU_JOB | 運行時作業 | |
| ACT_RU_TASK | 運行時任務 | |
| ACT_RU_VARIABLE | 流程運行時變量表,記錄當前流程可使用的變量,包括 global 和 local |
2、核心API介紹
官網介紹:https://www.activiti.org/userguide/#chapterApi
引擎 API 是與 Activiti 交互的最常見方式。中心起點是ProcessEngine,可以按照 配置部分中所述的多種方式創建。您可以從 ProcessEngine 獲取包含工作流/BPM 方法的各種服務。ProcessEngine 和服務對象是線程安全的。因此,您可以為整個服務器保留對其中 1 個的引用。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); RepositoryService repositoryService = processEngine.getRepositoryService(); TaskService taskService = processEngine.getTaskService(); ManagementService managementService = processEngine.getManagementService(); IdentityService identityService = processEngine.getIdentityService(); HistoryService historyService = processEngine.getHistoryService(); FormService formService = processEngine.getFormService(); DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();
ProcessEngines.getDefaultProcessEngine()將在第一次調用時初始化並構建流程引擎,然后總是返回相同的流程引擎。可以使用ProcessEngines.init() 和正確創建和關閉所有流程引擎ProcessEngines.destroy()。
activiti.cfg.xmlProcessEngines類將掃描所有activiti-context.xml文件。對於所有activiti.cfg.xml文件,流程引擎將以典型的 Activiti 方式構建:ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine(). 對於所有activiti-context.xml文件,流程引擎將以 Spring 方式構建:首先創建 Spring 應用程序上下文,然后從該應用程序上下文中獲取流程引擎。
所有服務都是無狀態的。這意味着您可以輕松地在集群中的多個節點上運行 Activiti,每個節點都訪問同一個數據庫,而不必擔心哪台機器實際執行了先前的調用。無論在何處執行,對任何服務的任何調用都是冪等的。
2.1、RepositoryService:
可能是使用 Activiti 引擎時需要的第一個服務。該服務提供用於管理和操作的操作deployments以及process definitions. 在此不贅述,流程定義是 BPMN 2.0 流程的 Java 對應物。它是過程中每個步驟的結構和行為的表示。deployment是 Activiti 引擎中的封裝單位。一個部署可以包含多個 BPMN 2.0 xml 文件和任何其他資源。一個部署中包含的內容的選擇取決於開發人員。它的范圍可以從單個流程 BPMN 2.0 xml 文件到整個流程包和相關資源(例如部署hr-processes可以包含與 hr 流程相關的所有內容)。RepositoryService允許這樣的deploy包。部署部署意味着它被上傳到引擎,在存儲到數據庫之前,所有流程都經過檢查和解析。從那時起,系統就知道部署了,現在可以啟動部署中包含的任何進程。
此外,該服務還允許
-
查詢引擎已知的部署和流程定義。
-
暫停和激活作為一個整體或特定流程定義的部署。掛起意味着不能對它們進行進一步的操作,而激活是相反的操作。
-
檢索各種資源,例如引擎自動生成的部署或流程圖中包含的文件。
-
檢索流程定義的 POJO 版本,該版本可用於使用 Java 而不是 xml 內省流程。
// 部署流程
repositoryService.createDeployment(); // 刪除流程
repositoryService.deleteDeployment(deploymentId); // 刪除模型
repositoryService.deleteModel(modelId);
2.2、RuntimeService
恰恰相反。它處理啟動流程定義的新流程實例。如上所述,aprocess definition定義了流程中不同步驟的結構和行為。流程實例是此類流程定義的一次執行。對於每個流程定義,通常有許多實例同時運行。RuntimeService同樣是用於檢索和存儲的服務process variables。這是特定於給定流程實例的數據,並且可以被流程中的各種結構使用(例如,獨占網關經常使用流程變量來確定選擇哪個路徑來繼續流程)。這Runtimeservice還允許查詢流程實例和執行。執行是'token'BPMN 2.0 概念的一種表示。基本上,執行是指向流程實例當前所在位置的指針。最后,RuntimeService當流程實例等待外部觸發器並且流程需要繼續時使用。流程實例可以有多種wait states,並且該服務包含各種操作以向實例發出信號,表明接收到外部觸發器並且流程實例可以繼續。
runtimeService.startProcessInstanceByKey(key) // 或者
runtimeService.startProcessInstanceById(processDefinitionId);
2.3、TaskService
需要由系統的實際人類用戶執行的任務是 BPM 引擎(如 Activiti)的核心。圍繞任務的所有內容都分組在,例如
-
查詢分配給用戶或組的任務
-
創建新的獨立任務。這些是與流程實例無關的任務。
-
操縱任務被分配給哪個用戶或哪些用戶以某種方式參與該任務。
-
要求並完成一項任務。聲明意味着某人決定成為該任務的受讓人,這意味着該用戶將完成該任務。完成意味着完成任務的工作。通常這是填寫某種形式。
// 查詢任務
taskService.createTaskQuery().list(); // 查詢張三的任務
taskService.createTaskQuery().taskCandidateOrAssigned("張三").list(); 完成任務 taskService.complete(String taskId);
2.4、IdentityService
非常簡單。它允許管理(創建、更新、刪除、查詢……)組和用戶。重要的是要了解 Activiti 實際上不會在運行時對用戶進行任何檢查。例如,可以將任務分配給任何用戶,但引擎不會驗證系統是否知道該用戶。這是因為 Activiti 引擎還可以與 LDAP、Active Directory 等服務結合使用。
2.5、FormService
是一項可選服務。這意味着 Activiti 可以在沒有它的情況下完美使用,而不會犧牲任何功能。該服務引入了啟動表單和任務表單的概念。開始表單是在流程實例啟動之前向用戶顯示的表單,而任務表單是在用戶想要完成表單時顯示的表單。Activiti 允許在 BPMN 2.0 流程定義中定義這些表單。該服務以一種易於使用的方式公開這些數據。但同樣,這是可選的,因為表單不需要嵌入到流程定義中。
2.6、HistoryService
暴露了 Activiti 引擎收集的所有歷史數據。執行流程時,引擎可以保留很多數據(這是可配置的),例如流程實例的啟動時間、誰執行了哪些任務、完成任務需要多長時間、每個流程實例中遵循的路徑等. 該服務主要暴露查詢能力來訪問這些數據。
使用Activiti 編寫自定義應用程序時,通常不需要ManagementService 。它允許檢索有關數據庫表和表元數據的信息。此外,它還公開了作業的查詢功能和管理操作。作業在 Activiti 中用於各種事情,例如計時器、異步延續、延遲暫停/激活等。稍后,將更詳細地討論這些主題。
2.7、DynamicBpmnService
可用於更改流程定義的一部分,而無需重新部署它。例如,您可以更改流程定義中用戶任務的受理人定義,或更改服務任務的類名。
有關服務操作和引擎 API 的更多詳細信息,請參閱javadocs。
