第四篇camunda系列-processengine核心对象(代码片段)

波波烤鸭 波波烤鸭     2022-12-04     478

关键词:

一、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的相关配置。我们可以在application.yml 中配置。原因是 CamundaBpmProperties的处理。然后就是 @Import(CamundaBpmConfiguration.class) 。 在CamundaBpmConfiguration会完成相关的 ProcessEngineConfiguration 的相关注入。

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

4.Service API

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

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

第四篇camunda系列-processengine核心对象(代码片段)

一、ProcessEngine  ProcessEngine是Camunda流程引擎的核心。我们在流程中的很多具体的处理比如流程部署、流程部署、流程审批等操作都是通过XXXService来处理的。而相关的XXXService都是通过ProcessEngine来管理的。所以对于ProcessEngine的... 查看详情

第十四篇camunda系列-多人会签多实例(代码片段)

多人会签MultipleInstance也叫多实例任务。1.会签说明  多实例活动是为业务流程中的某个步骤定义重复的一种方式。在编程概念中,多实例与foreach结构相匹配:它允许对给定集合中的每个项目按顺序或并行地执行某个步骤或甚... 查看详情

第十四篇camunda系列-多人会签多实例(代码片段)

多人会签MultipleInstance也叫多实例任务。1.会签说明  多实例活动是为业务流程中的某个步骤定义重复的一种方式。在编程概念中,多实例与foreach结构相匹配:它允许对给定集合中的每个项目按顺序或并行地执行某个步骤或甚... 查看详情

深入理解ajax系列第四篇

前面的话  现代Web应用中频繁使用的一项功能就是表单数据的序列化,XMLHttpRequest2级为此定义了FormData类型。FormData为序列化表单以及创建与表单格式相同的数据提供了便利。本文将先介绍表单编码,然后过渡到表单序列化,... 查看详情

深入理解表单脚本系列第四篇——选择框脚本

×目录[1]select[2]option[3]添加选项[4]移除选项前面的话  选择框是通过<select>和<option>元素创建的,又称为下拉列表框。为了方便与这个控件交互,除了所有表单字段共有的属性和方法外,javascript还提供了一些属性和... 查看详情

深入理解脚本化css系列第四篇——脚本化样式表

×目录[1]CSSStyleSheet[2]CSSRule前面的话  关于脚本化CSS,查询样式时,查询的是计算样式;设置单个样式时,设置的是行间样式;设置多个样式时,设置的是CSS类名。脚本化样式表当然也是一种脚本化CSS的技术,虽然不经常使... 查看详情

深入理解dom事件类型系列第四篇——剪贴板事件

 剪贴板操作可能看起来不起眼,但是却十分有用,可以增强用户体验,方便用户操作。本文将详细介绍剪贴板事件 http://www.cnblogs.com/xiaohuochai/p/5882902.html定义  剪贴板操作包括剪切(cut)、复制(copy)和粘贴(paste)这三个操作... 查看详情

深入理解dom事件类型系列第四篇——剪贴板事件

×目录[1]定义[2]对象方法[3]应用前面的话  剪贴板操作可能看起来不起眼,但是却十分有用,可以增强用户体验,方便用户操作。本文将详细介绍剪贴板事件 定义  剪贴板操作包括剪切(cut)、复制(copy)和粘贴(paste)这... 查看详情

深入学习jquery选择器系列第四篇——过滤选择器之属性选择器

×目录[1]简单属性[2]具体属性[3]条件属性前面的话  属性过滤选择器的过滤规则是通过元素的属性来获取相应的元素,对应于CSS中的属性选择器。属性过滤选择器可分为简单属性选择器、具体属性选择器和条件属性选择器... 查看详情

一条sql执行的完整流程解析-《从0到1-全面深刻理解mysql系列-第四篇》

个人主页:IT学习日记版权:本文由【IT学习日记】原创、在CSDN首发公众号:【IT学习日记】一个只搞干货的公众号如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)、有任何问题欢迎私信,看到会及时回复!文章大纲一、前言二... 查看详情

camunda流程实例启动的一些简单操作

...ceruntimeService;RepositoryServicerepositoryService;@Beforepublicvoidinit()ProcessEngineConfigurationprocessEngineConfiguration=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("camunda.cfg.xml");ProcessEngineprocessEngine=processEngineConfiguration.buildProcessEngine();runtim... 查看详情

linux从青铜到王者第二十四篇:linux网络基础第四篇之websocket协议(代码片段)

系列文章目录文章目录系列文章目录前言一、WebSocket简介二、WebSocket产生背景三、WebSocket实现原理四、WebSocket协议举例五、WebSocket使用1.WebSocket介绍2.WebSocketAPI3.WebSocket事件1.open2.Message3.Error4.Close4.WebSocket方法1.send()2.close()5.WebSocket... 查看详情

混合编程jni第四篇之引用和异常

系列目录:【混合编程Jni】系列目录_香菜聊游戏的博客-CSDN博客继续写JNI的知识点上篇基本上介绍了数据的转换以及方法签名的相关知识点,不懂的可以看看之前的文章建议循序渐进,不可冒进今天继续介绍JNI的知识点 除八... 查看详情

设计模式从青铜到王者第四篇:创建型模式

系列文章目录文章目录系列文章目录前言一、创建型模式简介二、创建型模式之包含模式1.工厂方法模式2.抽象工厂模式3.生成器模式4.原型模式5.单例模式总结前言一、创建型模式简介创建型模式(CreationalPattern)对类的... 查看详情

c++从入门到入土第四篇:运算符重载(代码片段)

系列文章目录【C++从入门到入土】第一篇:从C到C++.【C++从入门到入土】第二篇:类和对象基础.【C++从入门到入土】第三篇:类和对象提高.文章目录系列文章目录前言运算符重载1、定义和相... 查看详情

flowable:processengine系列(代码片段)

Flowable-ProcessEngineFlowable-ProcessEngine流程引擎系列(2)一、构建原理1、ProcessEngineConfiguration构建ProcessEngine2、ProcessEngines构建ProcessEngine3、总结Flowable-ProcessEngine流程引擎系列(2)     查看详情

flowable:processengine系列(代码片段)

Flowable-ProcessEngineFlowable-ProcessEngine流程引擎系列(2)一、构建原理1、ProcessEngineConfiguration构建ProcessEngine2、ProcessEngines构建ProcessEngine3、总结Flowable-ProcessEngine流程引擎系列(2)     查看详情

docker系列-第四篇docker镜像(代码片段)

1.镜像是什么镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。1.1UnionFS(联合文件系统)UnionFS... 查看详情