詳解工作流框架Activiti的服務架構和組件


摘要:通過這篇文章,可以對工作流有一個基本的認識,為后續工作流框架Activiti的學習打下堅實的基礎。

本文分享自華為雲社區《BPMN工作流的基本概念!詳解工作流框架Activiti的服務架構和組件》,作者: 攻城獅Chova 。

工作流

工作流簡介

  • 工作流(Workflow): 工作流就是通過計算機技術對業務流程進行自動化管理。實現多個參與者按照預定的流程去自動執行業務流程。
    • 定義: 通過計算機對業務流程自動化執行管理
    • 主要解決的是: 使在多個參與者之間按照某種預定義的規則自動進行傳遞文檔,信息或任務的過程.從而實現某個預期的業務目標,或者促使此目標的實現
  • 工作流管理系統的目標:
    • 管理工作的流程以確保工作在正確的時間被期望的人員所執行
    • 在自動化進行的業務過程中插入人工的執行和干預
  • 工作流框架:
    • Activiti,JBPM,OSWorkFlow,WorkFlow
    • 工作流框架底層需要有數據庫提供支持

工作流術語

工作流引擎

  • ProcessEngine對象: 這是Activiti工作的核心.負責生成流程運行時的各種實例及數據,監控和管理流程的運行

BPM

  • 業務流程管理:
    • 是一種以規范化的構造端到端的卓越業務流程為中心,以持續的提高組織業務績效為目的的系統化方法
    • 常見商業管理教育如EMBA,MBA等均將BPM包含在內

BPMN

  • 業務流程建模與標注:
    • 這些圖如何組合成一個業務流程圖(Business Process Diagram)
    • 討論BPMN的各種的用途:包括以何種精度來影響一個流程圖中的模型
    • BPMN作為一個標准的價值
    • BPMN未來發展的遠景

流對象

一個業務流程圖有三個流對象的核心元素

  • 事件
    • 一個事件用圓圈來描述,表示一個業務流程期間發生的東西
    • 事件影響流程的流動.一般有一個原因(觸發器)或一個影響(結果)
    • 基於它們對流程的影響,有三種事件:開始事件,中間事件,終止事件

  • 活動
    • 用圓角矩形表示,一個流程由一個活動或多個活動組成

  • 條件
    • 條件用菱形表示,用於控制序列流的分支與合並。
    • 可以作為選擇,包括路徑的分支與合並
    • 內部的標記會給出控制流的類型

Activiti開源工作流框架

Activiti簡介

  • Activiti是一個開源的工作流引擎,它實現了BPMN 2.0規范,可以發布設計好的流程定義,並通過api進行流程調度
  • Activiti 作為一個遵從 Apache 許可的工作流和業務流程管理開源平台,其核心是基於Java的超快速,超穩定的 BPMN2.0 流程引擎,強調流程服務的可嵌入性和可擴展性,同時更加強調面向業務人員
  • Activiti 流程引擎重點關注在系統開發的易用性和輕量性上.每一項BPM業務功能Activiti流程引擎都以服務的形式提供給開發人員.通過使用這些服務,開發人員能夠構建出功能豐富,輕便且高效的BPM應用程序

Activiti服務結構

  • Activiti系統服務結構圖

  • 核心類:
    • ProcessEngine: 流程引擎的抽象,可以通過此類獲取需要的所有服務
  • 服務類:
    • XxxService: 通過ProcessEngine獲取,Activiti將不同生命周期的服務封裝在不同Service中,包括定義,部署,運行.通過服務類可獲取相關生命周期中的服務信息
      • RepositoryService
        • Repository Service提供了對repository的存取服務
        • Activiti中每一個不同版本的業務流程的定義都需要使用一些定義文件,部署文件和支持數據(例如BPMN2.0XML文件,表單定義文件,流程定義圖像文件等),這些文件都存儲在Activiti內建的Repository中
      • RuntimeService
        • Runtime Service提供了啟動流程,查詢流程實例,設置獲取流程實例變量等功能.此外它還提供了對流程部署,流程定義和流程實例的存取服務
      • TaskService
        • Task Service提供了對用戶Task和Form相關的操作.它提供了運行時任務查詢,領取,完成,刪除以及變量設置等功能
      • HistoryService
        • History Service用於**獲取正在運行或已經完成的流程實例的信息,**與Runtime Service中獲取的流程信息不同,歷史信息包含已經持久化存儲的永久信息,並已經被針對查詢優化
      • FormService
        • 使用Form Service可以存取啟動和完成任務所需的表單數據並且根據需要來渲染表單
        • Activiti中的流程和狀態Task均可以關聯業務相關的數據
      • IdentityService
        • Identity Service提供了對Activiti系統中的用戶和組的管理功能
        • Activiti中內置了用戶以及組管理的功能,必須使用這些用戶和組的信息才能獲取到相應的Task
      • ManagementService
        • Management Service提供了對Activiti流程引擎的管理和維護功能
        • 這些功能不在工作流驅動的應用程序中使用,主要用於 Activiti 系統的日常維護
  • 核心業務對象:
    • org.activiti.engine.impl.persistence.entity包下的類,包括Task,ProcessInstance,Execution等
    • 根據不同職責實現相應接口的方法(如需要持久化則繼承PersistentObject接口),與傳統的實體類不同

Activiti組件

  • Activiti上下文組件Context: 用來保存生命周期比較長,全局性的信息,類似Application.主要包括如下三類:
    • CommandContext: 命令上下文-保存每個命令必要的資源,如持久化需要的session
    • ProcessEngineConfigurationImpl: 流程引擎相關配置信息-整個引擎全局的配置信息.如數據源DataSource等.該對象為單例,在流程引擎創建的時候初始化
    • ExecutionContext: 持有ExecutionEntity對象
  • 持久化組件:
    • Activiti使用mybatis作OR映射,並在此基礎上增加設計了自己的持久化框架
    • 在流程引擎創建時初始化,頂層接口Session,SessionFactory
    • Session有兩個實現類:
      • DbSqlSession: 負責sql表達式的執行
      • AbstractManager: 負責對象的持久化操作
    • SessionFactory有兩個實現類:
      • DbSqlSessionFactory: 負責DbSqlSession相關操作
      • GenericManagerFactory: 負責AbstractManager相關操作
  • Event-Listener組件:
    • Activiti允許客戶代碼介入流程執行,提供了事件監聽組件
    • 監聽的事件類型:
      • TaskListener
      • JavaDelegate
      • Expression
      • ExecutionListener
      • ProcessEngineConfigurationImpl持有DelegateInterceptor的某個實例,方便調用handleInvocation
  • Cache組件
    • DbSqlSession中有cache的實現
    • Activiti基於List和Map來做緩存:如查詢時先查緩存,沒有則直接查詢並放入緩存
  • 異步執行組件
    • Activiti可以執行任務,JobExecutor為其核心類,JobExecutor包含三個主要屬性:
      • JobAcquisitionThread
      • BlockingQueue
      • ThreadPoolExecutor
      • 方法ProcessEngines在引擎啟動時調用JobExecutor.start,JobAcquisitionThread 線程即開始工作,其run方法不斷循環執行AcquiredJobs中的job,執行一次后線程等待一定時間直到超時或者JobExecutor.jobWasAdded方法,因為有新任務而被調用。

流程虛擬機PVM

  • 流程虛擬機API暴露了流程虛擬機的POJO核心,流程虛擬機API描述了一個工作流流程必備的組件,這些組件包括:
    • PvmProcessDefinition: 流程的定義,形象點說就是用戶畫的那個圖.靜態含義
    • PvmProcessInstance: 流程實例,用戶發起的某個PvmProcessDefinition的一個實例.動態含義
    • PvmActivity: 流程中的一個節點
    • PvmTransition: 銜接各個節點之間的路徑,形象點說就是圖中各個節點之間的連接線
    • PvmEvent: 流程執行過程中觸發的事件

Activiti架構

  • Activiti Engine:
    • 最核心的模塊
    • 提供針對BPMN 2.0規范的解析,執行,創建,管理(任務,流程實例),查詢歷史記錄並根據結果生成報表
  • Activiti Modeler:
    • 模型設計器
    • 適用於業務人員把需求轉換為規范流程定義
  • Activiti Designer:
    • 功能和Activiti Modeler類似,同樣提供了基於BPMN 2.0規范的可視化設計功能,但是目前還沒有完全支持BPMN規范的定義
    • 可以把業務需求人員用Signavio設計的流程定義(XML格式)導入到Designer中,從而讓開發人員將其進一步加工成為可以運行的流程定義
  • Activiti Explorer:
    • 可以用來管理倉庫,用戶,組,啟動流程,任務辦理等
    • 此組件使用REST風格API,提供一個基礎的設計模型.如果業務簡單,也可以直接使用無需開發.還可以作為后台管理員的流程、任務管理系統使用
  • Activiti REST:
    • 提供RESTful風格的服務
    • 允許客戶端以JSON的方式與引擎的REST API交互
    • 通用的協議具有跨平台,跨語言的特性

Activiti數據庫支持

  • Activiti的后台由有數據庫的支持
  • 所有的表都以ACT_開頭
  • 第二部分是表示表的用途的兩個字母標識
  • 用途也和服務的API對應
ACT_RE_* : 'RE'表示repository. 這個前綴的表包含了流程定義和流程靜態資源(圖片,規則...)
ACT_RU_* : 'RU'表示runtime.這些運行時的表,  包含流程實例,任務,變量,異步任務,等運行中的數據.
            Activiti只在流程實例執行過程中保存這些數據,在流程結束時就會刪除這些記錄.這樣運行時表可以一直很小速度很快
ACT_ID_* : 'ID'表示identity.這些表包含身份信息,  比如用戶,組...
ACT_HI_* : 'HI'表示history.這些表包含歷史數據,  比如歷史流程實例,變量,任務...
ACT_GE_* :通用數據. 用於不同場景下,  如存放資源文件
  • 資源庫流程規則表 (ACT_RE_*:'RE’表示repository. 這個前綴的表包含了流程定義和流程靜態資源(圖片,規則…))
act_re_deployment          部署信息表
act_re_model            流程設計模型部署表
act_re_procdef            流程定義數據表
  • 運行時數據庫表 (ACT_RU_*:'RU’表示runtime.這些運行時的表, 包含流程實例,任務,變量,異步任務,等運行中的數據.Activiti只在流程實例執行過程中保存這些數據,在流程結束時就會刪除這些記錄.這樣運行時表可以一直很小速度很快)
act_ru_execution         運行時流程執行實例表
act_ru_identitylink        運行時流程人員表,主要存儲任務節點與參與者的相關信息
act_ru_task                運行時任務節點表
act_ru_variable            運行時流程變量數據表
  • 組織機構表 (ACT_ID_* : 'ID’表示identity.這些表包含身份信息, 比如用戶,組…)
act_id_group            用戶組信息表
act_id_info                用戶擴展信息表
act_id_membership        用戶與用戶組對應信息表
act_id_user                用戶信息表

這四張表很常見,基本的組織機構管理,關於用戶認證方面建議還是自己開發一套,組件自帶的功能太簡單,使用中有很多需求難以滿足

  • 歷史數據庫表 (ACT_HI_*:'HI’表示history.這些表包含歷史數據, 比如歷史流程實例,變量,任務…)
act_hi_actinst             歷史節點表
act_hi_attachment        歷史附件表
act_hi_comment            歷史意見表
act_hi_identitylink        歷史流程人員表
act_hi_detail            歷史詳情表,提供歷史變量的查詢
act_hi_procinst            歷史流程實例表
act_hi_taskinst            歷史任務實例表
act_hi_varinst            歷史變量表
  • 組織機構表 (ACT_GE_*:通用數據. 用於不同場景下, 如存放資源文件)
act_ge_bytearray        二進制數據表
act_ge_property            屬性數據表存儲整個流程引擎級別的數據,初始化表結構時,會默認插入三條記錄

Activiti配置文件

  • activiti.cfg.xml: Activiti核心配置文件,配置流程引擎創建工具的基本參數和數據庫連接池參數
    • 定義數據庫配置參數
    • 配置連接池參數

Activiti特點

數據持久化

  • Activiti的設計思想是簡潔,快速
  • 瓶頸體現在和數據庫交換數據的過程中,針對這一點Activiti選擇了使MyBatis,從而可以通過最優的SQL語句執行Command,僅憑如此就能讓引擎在速度上保持最高的性能

引擎service接口

  • Activiti流程引擎重點關注在系統開發的易用性和輕量性上,每一項BPM業務功能Activiti流程引擎都以服務的形式提供給開發人員,通過使用這些服務,開發人員能夠構建出功能豐富,輕便且高效的BPM應用程序
  • activiti.cfg.xml文件為核心配置文件,該配置文件集成在Spring的IOC容器當中,可以產生ProcessEngineConfiguration對象,這個對象就是流程引擎的配置對象
  • ProcessEngine對象為流程引擎對象,該對象是工作流業務系統的核心,所有的業務操作都是由這個對象所派生出來的對象實現
  • Activiti引擎提供了七大Service接口,均通過ProcessEngine獲取,並且支持鏈式API編程風格

流程設計器

  • 基於Web的Activiti Modeler流程設計器
  • IDEA的actiBPM插件

原生支持Spring

  • Activiti原生支持Spring,可以很輕松地進行Spring集成,非常方便管理事務和解析表達式(Expression)

分離運行時與歷史數據

  • Activiti繼承自jBPM4,在表結構設計方面也遵循運行時與歷史數據的分離
  • 這樣的設計可以快速讀取運行時數據,僅當需要查詢歷史數據時再從專門的歷史數據表中讀取.這種設計方式可以大幅提高數據的存取效率,尤其是當數據日積月累時依然能夠快速反應

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM