Camunda是一個基于JAVA的框架,支持用于工作流和流程自動化的BPMN、用于案例管理的CMMN和用于業務決策管理的DMN。
本篇文章我們僅考慮BPMN流程引擎,先不涉及CMMN和DMN引擎。就流程引擎而言,Camunda是一個靈活的工作流框架,它的核心是一個在Java虛擬機內部運行的原生BPMN 2.0流程引擎,因此它可以嵌入到任何Java應用程序或運行時容器中。Camunda與Java EE 集成,并可以與Spring Framework和Spring Boot完美匹配。
一、Camunda的總體架構
Camunda BPMS到底包括哪些功能,我們拿官方的一張架構圖進行解讀分析。
1.從BPM應用維度看
Camunda分為流程設計和流程運行兩個階段,見圖中最下方的藍色大箭頭,Model和Execute,按照這兩個階段,Camunda劃分為兩大部分功能,對應設計階段的功能有 Modeler,對應運行階段的功能有Engine、TaskList、Cockpit、Admin。
2.從BPM功能維度看
Camunda包括了流程設計器(Modeler)、流程引擎(Engine)、API接口(REST/Java API)、任務列表(TaskList)、流程管理控制臺(Cockpit)、系統管理工具(Admin)。在Camunda商業產品中還包括了流程監控預警工具(Optimize)、流程協同設計工具(Cawemo)。這里重點先說一下Camunda流程設計器,支持兩種模式,一種是富客戶端的流程建模工具Camunda Modeler,需要在客戶端安裝;另一種是基于瀏覽器的流程設計器bpmn.io,這兩款軟件均開源。
3.從BPM角色維度看
Camunda分為業務分析師、流程開發工程師、最終用戶、流程管理員、系統管理員這幾個角色,每個角色對應BPMS不同的功能。業務分析師、流程開發工程師使用流程設計器(Modeler)進行流程建模,最終用戶使用任務列表(TaskList)進行流程發起和審批,流程管理員使用流程管理控制臺(Cockpit)進行流程管理,比如流程暫停恢復、流程異常干預等,系統管理員使用系統管理工具(Admin)進行系統管理,比如組織用戶管理、權限管理等。
二、Camunda的集成能力
1.支持與Spring框架集成
Camunda支持與spring框架集成,把 camunda-engine-spring框架引入到項目的maven模塊內,它可以與Spring 3、4或5版本一起使用,具體集成過程后面有文章單獨介紹。
2.支持與spring boot集成
后面文章專題介紹
3.支持與CDI and Java EE 集成
CDI (Context and Dependency Injection)是 Java EE6的標準和依賴注入,Camunda通過camunda-engine-cdi模塊集成可利用camunda引擎的配置和cdi的可擴展性。
4.支持與Runtime Container 集成
支持與Tomcat、JBoss等常見的運行容器集成。
三、Camunda支持的部署架構
Camunda BPM是一個靈活的框架,支持嵌入式、分布式、集群等多種部署模式。
1.嵌入式部署
流程引擎以Jar包方式添加到應用程序中,通過這種方式,可以在應用程序生命周期中輕松啟動和停止流程引擎。
2.基于web容器啟動,多應用共享
流程引擎在運行時容器(Servlet容器、應用程序服務器等)中啟動,流程引擎作為容器服務提供,可以由容器內部署的所有應用程序共享。這種方式在實際應用場景中不多見。
3.獨立部署,多應用共享
在這種情況下,流程引擎獨立部署,通過網絡提供服務,網絡上運行的不同應用程序可以通過遠程通信通道與進程引擎交互,遠程訪問流程引擎的最簡單方法是使用內置的REST服務接口。在企業級流程中心部署架構中,這是一種最常見的部署模式,在現在的微服務部署架構中,也可以采取這種方式。
4.集群部署
為了提供擴展或故障轉移功能,流程引擎可以分布到集群中的不同節點,每個流程引擎實例都必須連接到共享數據庫。Camunda BPM不提供現成的負載平衡功能,可以采用Nginx等第三方負載均衡軟件實現。
四、Camunda依賴的第三方類庫
本文介紹了第三方庫及其在Camunda中的使用。對于Camunda的每個組件,都列出了第三方庫。對于每個庫,都解釋了該庫是必需的依賴項還是可選的依賴項。必需的依賴是Camunda提供核心功能所依賴的庫。在下面的列表中標記為(Required Dependency)。可選的依賴項是可以與Camunda集成的庫。在下面的列表中標記為(可選依賴項)。
以下是Camunda7.15版本依賴得第三方類庫:
1、Process Engine
流程引擎依賴于以下第三方類庫:
MyBatis mApping framework (Required Dependency) for object-relational mapping.
Joda Time (Required Dependency) for parsing date formats.
Java Uuid Generator (JUG) (Optional Dependency) Id Generator. See the documentation on Id-Generators
SLF4J (Required Dependency) Logging Facade
此外,流程引擎還可以集成:
Apache Commons Email (Optional Dependency) for mail task support.
Spring Framework Spring-Beans (Optional Dependency) for configuration using camunda.cfg.xml.
Spring Framework Spring-Core (Optional Dependency) for configuration using camunda.cfg.xml.
Spring Framework Spring-ASM (Optional Dependency) for configuration using camunda.cfg.xml.
Groovy (Optional Dependency) for groovy script task support.
Jython (Optional Dependency) for Python/ target=_blank class=infotextkey>Python script task support.
JRuby (Optional Dependency) for Ruby script task support.
Freemarker (Optional Dependency) for freemarker template engine support.
Apache Velocity (Optional Dependency) for apache velocity template engine support.
SAXON (Optional Dependency) for XSLT and XQuery template engine support.
2、REST API
REST API依賴于以下第三方庫:
Jackson JAX-RS (Required Dependency) provider for JSON content type
Apache Commons FileUpload (Required Dependency)
此外,當使用Apache Tomcat時:
RESTEasy (Required Dependency)
3、Spring Support
Spring支持可以與以下第三方庫集成:
Apache Commons DBCP (Optional Dependency)
Spring Framework Spring-Beans (Optional Dependency)
Spring Framework Spring-Core (Optional Dependency)
Spring Framework Spring-ASM (Optional Dependency)
Spring Framework Spring-Context (Optional Dependency)
Spring Framework Spring-JDBC (Optional Dependency)
Spring Framework Spring-ORM (Optional Dependency)
Spring Framework Spring-TX (Optional Dependency)
4、Camunda Spin
Camunda Spin依賴于以下第三方庫:
Jackson Json (Required Dependency) for Json Dataformat Support
此外,Camunda Spin可以與以下庫集成:
Jayway Json Path (Optional Dependency) for Json Path Support
5、Camunda Connect
Camunda Connect依賴于以下第三方庫:
Apache Http Components (Required Dependency) for REST and SOAP support.
五、Camunda支持的開發運行環境
1、支持的Java開發環境
• Java版本: 8 / 9 / 10 / 11 / 12 / 13 / 14
• Springboot版本: 2.3.x.RELEASE
2、支持的Java運行環境
• Oracle JDK 8 / 9 / 10 / 11 / 12 / 13 / 14
• IBM JDK 8 (with J9 JVM)
• OpenJDK 8 / 9 / 10 / 11 / 12 / 13 / 14
3、支持的數據庫軟件
• MySQL 5.6 / 5.7
• MariaDB 10.0 / 10.2 / 10.3
• Oracle 11g / 12c / 18c / 19c
• IBM DB2 10.5 / 11.1
• PostgreSQL 9.4 / 9.6 / 10.4 / 10.7 / 11.1 / 11.2 / 12.2
• Microsoft SQL Server 2012/2014/2016/2017
• H2 1.4
4、支持的應用服務器
• Apache Tomcat 7.0 / 8.0 / 9.0
• JBoss EAP 6.4 / 7.0 / 7.1 / 7.2
• Wildfly Application Server 10.1+
• IBM WebSphere Application Server 8.5 / 9.0 企業版
• Oracle WebLogic Server 12c (12R2) 企業版
5、支持的瀏覽器
• google Chrome
• Mozilla Firefox
• Microsoft Edge
6、流程設計器支持的操作系統
• windows 7 / 10
• mac OS X 10.11
• Ubuntu LTS