首页 > 其他分享 >【第四篇】Camunda系列-ProcessEngine核心对象

【第四篇】Camunda系列-ProcessEngine核心对象

时间:2022-10-15 23:03:37浏览次数:46  
标签:ProcessEngineConfiguration ProcessEngine 流程 引擎 cfg 第四篇 Camunda processEngine


【第四篇】Camunda系列-ProcessEngine核心对象_spring

一、ProcessEngine

  ProcessEngine是Camunda流程引擎的核心。我们在流程中的很多具体的处理比如​​流程部署​​​、​​流程部署​​​、​​流程审批​​​等操作都是通过​​XXXService​​​来处理的。而相关的​​XXXService​​​都是通过​​ProcessEngine​​​来管理的。所以对于​​ProcessEngine​​的创建方式还是很有必要掌握的。

1. 通过xml配置方式

  配置你的流程引擎的最简单的方法是通过一个叫做​​camunda.cfg.xml​​的XML文件。使用这个文件,你可以简单这样做:

@Test
public void processEngine3(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println("processEngine = " + processEngine);
}

  我们定义如下的​​camunda.cfg.xml​​​文件。注意​​camunda.cfg.xml​​​必须包含一个id为​​processEngineConfiguration​​的bean

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="processEngineConfiguration" class="org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration">

<property name="jdbcUrl" value="jdbc:h2:mem:camunda;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />

<property name="databaseSchemaUpdate" value="true" />

<property name="jobExecutorActivate" value="false" />

<property name="mailServerHost" value="mail.my-corp.com" />
<property name="mailServerPort" value="5025" />
</bean>

</beans>

  如果没有找到​​camunda.cfg.xml​​​资源,默认引擎将搜索​​activiti.cfg.xml​​文件作为备用。如果两者都缺失,引擎就会停止运行,并打印出关于缺失配置资源的错误信息。

  请注意,配置XML实际上是一个Spring配置。这并不意味着Camunda引擎只能在Spring环境中使用。我们只是在内部利用Spring的解析和依赖注入功能来建立引擎。

  ProcessEngineConfiguration对象也可以使用配置文件以编程方式创建。也可以使用不同的bean id。

ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource);
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);

2. JavaAPI方式

  我们也可以通过创建正确的ProcessEngineConfiguration对象或使用一些预定义的对象,以编程方式配置流程引擎。

ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
  • ​org.camunda.bpm.engine.impl.cfg.StandaloneProcessEngineConfiguration​​ 流程引擎是以独立的方式使用的。引擎本身将负责处理事务。默认情况下,只有在引擎启动时才会检查数据库(如果没有数据库模式或模式版本不正确,会抛出一个异常)。
  • ​org.camunda.bpm.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration​​ 这是一个用于单元测试的工具类。引擎本身将负责处理事务。默认使用H2内存数据库。该数据库将在引擎启动和关闭时被创建和删除。当使用这个时,可能不需要额外的配置(除了,当使用Job执行器(job executor)或邮件功能时)。
  • ​org.camunda.bpm.engine.spring.SpringProcessEngineConfiguration​​ 当流程引擎被用于Spring环境时使用。
@Test
public void processEngine1(){
ProcessEngineConfigurationImpl cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl("jdbc:mysql://localhost:3306/camunda1?serverTimezone=UTC")
.setJdbcUsername("root")
.setJdbcPassword("123456")
.setJdbcDriver("com.mysql.cj.jdbc.Driver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setHistory("full");
ProcessEngine processEngine = cfg.buildProcessEngine();
System.out.println("processEngine = " + processEngine);
}

@Test
public void processEngine2(){
ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
cfg.setJdbcUrl("jdbc:mysql://localhost:3306/camunda2?serverTimezone=UTC")
.setJdbcUsername("root")
.setJdbcPassword("123456")
.setJdbcDriver("com.mysql.cj.jdbc.Driver")
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setHistory("full");

ProcessEngine processEngine = cfg.buildProcessEngine();
System.out.println("processEngine = " + processEngine);
}

3.SpringBoot项目

  在SpringBoot项目会根据我们导入的依赖完成自动装配,从而完成ProcessEngine的自动注入。我们可以来分析下源码。

【第四篇】Camunda系列-ProcessEngine核心对象_java_02

  我们需要注意对于Camunda的相关配置。我们可以在application.yml 中配置。原因是 CamundaBpmProperties的处理。然后就是 @Import(CamundaBpmConfiguration.class) 。 在CamundaBpmConfiguration会完成相关的 ProcessEngineConfiguration 的相关注入。

【第四篇】Camunda系列-ProcessEngine核心对象_Camunda_03

【第四篇】Camunda系列-ProcessEngine核心对象_ProcessEngine_04

这块感兴趣的小伙伴可以仔细阅读下。

4.Service API

  Java API是与引擎互动的最常见方式。中心起点是​​ProcessEngine​​​,它可以通过几种方式创建,如配置部分所述。从ProcessEngine中,你可以获得包含工作流/BPM方法的各种服务。​​ProcessEngine​​​和​​服务对象​​​是​​线程安全​​的。所以你可以为整个服务器保留对其中一个对象的引用.

【第四篇】Camunda系列-ProcessEngine核心对象_RuntimeService_05

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
TaskService taskService = processEngine.getTaskService();
IdentityService identityService = processEngine.getIdentityService();
FormService formService = processEngine.getFormService();
HistoryService historyService = processEngine.getHistoryService();
ManagementService managementService = processEngine.getManagementService();
FilterService filterService = processEngine.getFilterService();
ExternalTaskService externalTaskService = processEngine.getExternalTaskService();
CaseService caseService = processEngine.getCaseService();
DecisionService decisionService = processEngine.getDecisionService();

注意:所有的服务都是​​无状态的​​。这意味着你可以很容易地在一个集群的多个节点上运行Camunda平台,每个节点都去同一个数据库,而不必担心哪个机器实际执行了以前的调用。对任何服务的任何调用都是无状态的,无论它在哪里执行。

每个服务的简单介绍

服务名称

介绍

仓库服务RepositoryService

提供了管理和操纵部署和流程定义的操作

运行时服务-RuntimeService

首先可以通过一个流程定义启动多个流程实例。也能用于处理检索和存储流程变量的服务

任务服务-TaskService

围绕用户审批操作的一切都会被归纳到TaskService。比如:查询分配给用户或组的任务,创建新的独立任务。这些是与流程实例无关的任务,操纵一个任务被分配给哪个用户,或者哪个用户以某种方式参与到任务中,声称并完成一项任务。声称意味着有人决定成为该任务的受让人,意味着这个用户将完成该任务。完成意味着 “完成任务的工作”等

身份服务-IdentityService

是非常简单的。它允许对组和用户进行管理(创建、更新、删除、查询…)。重要的是要理解,核心引擎实际上在运行时并不对用户进行任何检查

表单服务-FormService

一个可选的服务。提供了表单功能

历史服务-HistoryService

暴露了引擎收集的所有历史数据。当执行流程时,引擎可以保留很多数据(这是可配置的),如流程实例的开始时间、谁做了哪些任务、完成任务花了多长时间、每个流程实例遵循的路径等。该服务主要暴露了访问这些数据的查询功能。

管理服务-ManagementService

它允许检索关于数据库表和表元数据的信息。此外,它暴露了查询功能和Job的管理操作。Job在引擎中被用于各种事情,如定时器、异步延续、延迟暂停/激活等。

过滤器服务-FilterService

允许创建和管理过滤器。过滤器是像任务查询一样的存储查询。例如,过滤器被任务列表用来过滤用户任务

外部任务服务-ExternalTaskService

提供对外部任务实例的访问。外部任务代表在外部处理的工作项目,独立于流程引擎。

案例服务-CaseService

与运行时服务(RuntimeService)类似,但用于案例实例。它处理启动案例定义的新案例实例并管理案例执行的生命周期。该服务也被用来检索和更新案例实例的流程变量。

决策服务-DecisionService

允许评估部署在引擎中的决策。它是评估独立于流程定义的业务规则任务中的决策的一种选择。


标签:ProcessEngineConfiguration,ProcessEngine,流程,引擎,cfg,第四篇,Camunda,processEngine
From: https://blog.51cto.com/u_15494758/5759372

相关文章

  • 【第五篇】Camunda系列-任务分配
    任务分配1.固定分配  在指派​​用户任务​​的审批人时。我们是直接指派的固定账号。但是为了保证流程设计审批的灵活性。我们需要各种不同的分配方式,所以这节我们就详细......
  • java核心技术第四篇之JDBC第二篇
    01.JDBC连接池_连接池的概念:1).什么是连接池:对于多用户程序,为每个用户单独创建一个Connection,会使程序降低效率。这时我们可以创建一个"容器",这个容器中,先缓存一些Connect......
  • camunda_20_rest_client
    restclient是什么除了内置流程引擎应用,有时候我们其他应用也需要访问camundaplatform,这时候可以通过camundarestAPI实现,为了简化restapi的调用,开源社区......
  • camunda_19_api
    本文内容转载,下面内容转载自使用Camunda流程引擎开发,【取回】、【撤销】代码实现-a周周-博客园camunda驳回到第一个任务节点示例-李兵~-博客园流程打回到起......
  • camunda_18_user_task_assignment
    Camunda后台数据库内建有几个人员/组织数据表,但在Usertaskassignment方便,并不强制我们要将自己的人员/组织数据导入到这些table中.举例讲,我们需要将某个usertas......
  • camunda_temp
    camunda-bpmn-用户任务(UserTask)dafengyiba0.2112020.10.1216:02:25字数2,724阅读8,065用户任务被用作给哪些需要人去完成的工作建模。当流程执行到用......
  • camunda_17_listener
    Java调用方式对于内置流程引擎的应用,可以在流程流转时调用Java逻辑,最主要有三种形式的Java调用方式:JavaDelegate:ServiceTask组件如选择Javaclass,即......
  • camunda_15_oracle
    按照Camunda官方文档,生产环境优先推荐Oracle和Postgresql,当然MySQL和SQLServer也是支持的.官方参考架构文档前面博文已经介绍了使用Postgresql作为数据库,camund......
  • camunda_14_swagger
    预编译软件包支持Swagger命令行启动官方预编译,缺省情况下就已经启动了swaggerui.PSC:\my_program\camunda-bpm-run-7.17.0>.\start.batSettingJAVA......
  • camunda_13_postgresql
    前面都是使用H2数据库,体验功能非常方便,但分析table数据就比较麻烦了,下面介绍如何使用postgresql作为后台数据库.按照Camunda官方文档,生产环境优先推荐Oracle和P......