Flowable-源码分析-2启动

引擎启动流程如图

在这里插入图片描述

// ProcessEngineFactoryBean.getObjectpublic ProcessEngine getObject() throws Exception {// 如果 processEngine 为空if (processEngine == null) {// 初始化表达式管理器initializeExpressionManager();// 初始化事务外部管理initializeTransactionExternallyManaged();// 构建 processEngineprocessEngine = (ProcessEngineImpl) processEngineConfiguration.buildProcessEngine();}// 返回 processEnginereturn processEngine;}
//ProcessEngineConfigurationImpl.buildProcessEngine/*** 重写父类方法,用于构建流程引擎* @return 返回构建好的流程引擎对象*/@Overridepublic ProcessEngine buildProcessEngine() {// 初始化init();// 创建 ProcessEngine 实例processEngine = new ProcessEngineImpl(this);// 调用构建后处理方法invokePostProcessEngineBuild(processEngine);// 返回 ProcessEngine 实例return processEngine;}

init初始化

//ProcessEngineConfigurationImpl.initprotected void init() {// 调用preInit方法invokePreInit();// 初始化默认字符集initDefaultCharset();// 初始化历史级别initHistoryLevel();// 初始化历史事件生产者initHistoryEventProducer();// 初始化Cmmn历史事件生产者initCmmnHistoryEventProducer();// 初始化Dmn历史事件生产者initDmnHistoryEventProducer();// 初始化历史事件处理器initHistoryEventHandler();// 初始化表达式管理器initExpressionManager();// 初始化beaninitBeans();// 初始化artifact工厂initArtifactFactory();// 初始化表单引擎initFormEngines();// 初始化表单类型initFormTypes();// 初始化表单字段校验器initFormFieldValidators();// 初始化脚本inginitScripting();// 初始化Dmn引擎initDmnEngine();// 初始化业务日历管理器initBusinessCalendarManager();// 初始化命令上下文工厂initCommandContextFactory();// 初始化事务上下文工厂initTransactionContextFactory();// 数据库类型需要在命令执行器初始化之前进行检测initDataSource();// 初始化异常代码提供者initExceptionCodeProvider();// 初始化命令执行器initCommandExecutors();// 初始化服务initServices();// 初始化ID生成器initIdGenerator();// 初始化失败的作业命令工厂initFailedJobCommandFactory();// 初始化部署器initDeployers();// 初始化作业提供者initJobProvider();// 初始化外部任务优先级提供者initExternalTaskPriorityProvider();// 初始化批处理处理器initBatchHandlers();// 初始化作业执行器initJobExecutor();// 初始化事务工厂initTransactionFactory();// 初始化Sql会话工厂initSqlSessionFactory();// 初始化身份提供会话工厂initIdentityProviderSessionFactory();// 初始化会话工厂initSessionFactories();// 初始化值类型解析器initValueTypeResolver();// 初始化类型校验器initTypeValidator();// 初始化序列化initSerialization();// 初始化JpainitJpa();// 初始化代理拦截器initDelegateInterceptor();// 初始化事件处理initEventHandlers();// 初始化流程应用管理器initProcessApplicationManager();// 初始化关联处理器initCorrelationHandler();// 初始化条件处理器initConditionHandler();// 初始化异常处理器initIncidentHandlers();// 初始化密码摘要initPasswordDigest();// 初始化部署注册initDeploymentRegistration();// 初始化部署处理器工厂initDeploymentHandlerFactory();// 初始化资源授权提供者initResourceAuthorizationProvider();// 初始化权限提供者initPermissionProvider();// 初始化主机名initHostName();// 初始化指标initMetrics();// 初始化遥测initTelemetry();// 初始化迁移initMigration();// 初始化命令检查器initCommandCheckers();// 初始化默认用户权限initDefaultUserPermissionForTask();// 初始化历史删除时间initHistoryRemovalTime();// 初始化历史清理initHistoryCleanup();// 初始化每批次调用次数initInvocationsPerBatchJobByBatchType();// 初始化管理员initAdminUser();// 初始化管理员组initAdminGroups();// 初始化密码策略initPasswordPolicy();// 调用postInit方法invokePostInit();}

流程引擎实现类 ProcessEngineImpl


public ProcessEngineImpl(ProcessEngineConfigurationImpl processEngineConfiguration) {// 初始化变量this.processEngineConfiguration = processEngineConfiguration;this.name = processEngineConfiguration.getProcessEngineName();// 获取各服务接口this.repositoryService = processEngineConfiguration.getRepositoryService();this.runtimeService = processEngineConfiguration.getRuntimeService();this.historicDataService = processEngineConfiguration.getHistoryService();this.identityService = processEngineConfiguration.getIdentityService();this.taskService = processEngineConfiguration.getTaskService();this.formService = processEngineConfiguration.getFormService();this.managementService = processEngineConfiguration.getManagementService();this.authorizationService = processEngineConfiguration.getAuthorizationService();this.caseService = processEngineConfiguration.getCaseService();this.filterService = processEngineConfiguration.getFilterService();this.externalTaskService = processEngineConfiguration.getExternalTaskService();this.decisionService = processEngineConfiguration.getDecisionService();// 获取数据库模式更新设置、作业执行器和命令执行器this.databaseSchemaUpdate = processEngineConfiguration.getDatabaseSchemaUpdate();this.jobExecutor = processEngineConfiguration.getJobExecutor();this.commandExecutor = processEngineConfiguration.getCommandExecutorTxRequired();this.commandExecutorSchemaOperations = processEngineConfiguration.getCommandExecutorSchemaOperations();// 获取会话工厂集合和历史级别this.sessionFactories = processEngineConfiguration.getSessionFactories();this.historyLevel = processEngineConfiguration.getHistoryLevel();// 获取事务上下文工厂this.transactionContextFactory = processEngineConfiguration.getTransactionContextFactory();// 执行数据库模式变更操作executeSchemaOperations();// 注册过程引擎if (name == null) {LOG.processEngineCreated(ProcessEngines.NAME_DEFAULT);} else {LOG.processEngineCreated(name);}ProcessEngines.registerProcessEngine(this);// 注册过程引擎到作业执行器if (jobExecutor != null) {jobExecutor.registerProcessEngine(this);}// 如果启用了指标采集,则注册数据库指标报告器if (processEngineConfiguration.isMetricsEnabled()) {String reporterId;// 仅当没有静态主机名且未设置自定义主机名提供程序时,使用已弃用的自定义MetricsReporterIdProvider// 见ProcessEngineConfigurationImpl#initHostname()if (processEngineConfiguration.getMetricsReporterIdProvider() != null&& processEngineConfiguration.getHostnameProvider() instanceof SimpleIpBasedProvider) {reporterId = processEngineConfiguration.getMetricsReporterIdProvider().provideId(this);} else {reporterId = processEngineConfiguration.getHostname();}DbMetricsReporter dbMetricsReporter = processEngineConfiguration.getDbMetricsReporter();dbMetricsReporter.setReporterId(reporterId);// 启动数据库指标报告器if (processEngineConfiguration.isDbMetricsReporterActivate()) {dbMetricsReporter.start();}}}

调用构建后处理方法 invokePostProcessEngineBuild

//ProcessEngineConfigurationImpl.invokePostProcessEngineBuildprotected void invokePostProcessEngineBuild(ProcessEngine engine) {for (ProcessEnginePlugin plugin : processEnginePlugins) {plugin.postProcessEngineBuild(engine);}}

流程引擎拥有如下插件类
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux---用户相关操作

1. 创建用户 命令说明useradd创建(添加)用户 useradd命令选项: 选项说明-m自动创建用户主目录,主目录的名字就是用户名-g指定用户所属的用户组,默认不指定会自动创建一个同名的用户组 创建用户效果图: 查看所有用户信息的文件效果图: 说明: useradd 命令的使用…

嵌入式中的门电路详讲

NOT门电路 NOT(非门)是数字逻辑电路中的一种基本逻辑门,也称为反相器。它执行的是逻辑非操作,即将输入信号取反。NOT门具有一个输入和一个输出。 A输入,B输出,以下是真值表: A B 0 1 1 0 AND门电路 AND(与门)是数字逻辑电路中的一种基本逻辑门,用于执行逻辑与操作。…

【运维笔记】mvware centos挂载共享文件夹

安装mvware-tools 这里用的centos安装 yum install open-vm-tools 设置共享文件夹 依次点击:选项-共享文件夹-总是启用-添加,安装添加向导操作添加自己想共享的文件夹后。成功后即可在文件夹栏看到自己共享的文件夹 挂载文件夹 临时挂载 启动虚拟机&…

Javaweb考前复习冲刺(不断更新版)

Javaweb考前复习冲刺 第一章: JavaWeb 入门 JavaWeb是指:以Java作为后台语言的项目工程。 javaweb项目创建的过程: 首先集成Tomcat服务器环境新建dynamic web project部署工程运行 路由含义: ​ http://localhost:8080/工程…

Leetcode刷题笔记题解(C++):224. 基本计算器

思路: step 1:使用栈辅助处理优先级,默认符号为加号。 step 2:遍历字符串,遇到数字,则将连续的数字字符部分转化为int型数字。 step 3:遇到左括号,则将括号后的部分送入递归&#x…

一个简单的光线追踪渲染器

前言 本文参照自raytracing in one weekend教程,地址为:https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪? 光线追踪模拟现实中的成像原理,通过模拟一条条直线在场景内反射折射,最终…

秋招上岸记录咕咕咕了。

思考了一下,感觉并没有单独写这样一篇博客的必要。 能够写出来的,一些可能会对人有帮助的东西都做进了视频里面,未来会在blbl发布,目前剪辑正在施工中(?) 另外就是,那个视频里面使…

作为一个的软件测试工程师,想拿到自己想要的薪资,需要具备哪些能力?

如果只是想成为一名低薪的测试工程师,只要掌握功能测试就可以。 但是如果想成为一名高薪的测试工程师,那就要打造你的不可替代性。 可是,你可能会说:“我现在就是个普通职员啊,我就是个普通人,我目前还没有…

前端js实现将异步封装成promise然后用async await转同步

(一)需求背景: 哈喽 大家好啊,今天遇到一个问题,需要将异步请求转换成同步 (二)相关代码: function getInfo() {return new Promise((resolve,reject)> {setTimeout(()> {re…

CSS的基本选择器及高级选择器(附详细示例以及效果图)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中CSS的基础选择及高级选择器(详解)以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获&#xf…

JVM学习之运行时数据区

运行时数据区 概述 内存 内存是非常重要的系统资源,是硬盘和CPU的中间桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请,分配,管理的策略,保证了JVM高效稳定运行。不同的JVM对于…

STL容器之string(上)

目录 什么是STL string类 string类常见接口 string类的常见构造函数 string类对象的容器操作 string类对象的访问及遍历操作 string类对象的修改操作 拓展 从本期开始,我们将正式学习C中的STL,美国的麦克阿瑟将军说过:“C不能没有STL就…

mipi dsi协议DBI/DPI接口

MIPI dsi协议中的DBI/DPI接口主要用于主机和display设备之间的数据传输,说的更通俗一点就是DSI RX控制器和实际的显示面板之间的接口;dsi 协议spec中对DBI/DPI有描述: DSI协议中对DBI 接口模式命名为command mode operation,对DP…

【物联网】EMQX(二)——docker快速搭建EMQX 和 MQTTX客户端使用

一、前言 在上一篇文章中,小编向大家介绍了物联网必然会用到的消息服务器EMQ,相信大家也对EMQ有了一定的了解,那么接下来,小编从这篇文章正式开始展开对EMQ的学习教程,本章节来记录一下如何对EMQ进行安装。 二、使用…

QT第一步

文章目录 软件下载软件安装QT的程序组新建项目 软件下载 qt下载网址:https://download.qt.io/archive/qt/   关于版本:     我选择的版本是5.14.2,这个版本是最后的二进制安装包的版本,在往后的版本就需要在线安装了。并且5…

单机架构到分布式架构的演变

目录 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 总结 1.单机架构 初期,我们需要利用我们精干的技术团队,快…

RocketMQ系统性学习-SpringCloud Alibaba集成RocketMQ以及批量发送消息、消息过滤实战

文章目录 批量发送消息消息过滤 批量发送消息 批量发送消息可以减少网络的 IO 开销,让多个消息通过 1 次网络开销就可以发送,提升数据发送的吞吐量 虽然批量发送消息可以减少网络 IO 开销,但是一次也不能发送太多消息 批量消息直接将多个消…

C#基础——类、对象和属性

类:是具有相同属性和行为特征的集合 对象:对象是类的实例化,它具有类定义的所有特征和行为。 类的语法格式: 访问修饰符 class关键字 类名 两种创建类的方式 第一种方式就是在类的下面再创建一个类 第二种方式是在文件中添加一个…

【员工工资册】————大一期末答辩近满分作业分享

前言 大家好吖,欢迎来到 YY 滴项目系列 ,热烈欢迎! 本章主要内容面向接触过C语言的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! PS:以下内容是部分展示&am…

springboot升级到3.2导致mybatis-plus启动报错

在springboot升级到3.2时,服务启动报错 java.lang.IllegalArgumentException: Invalid value type for attribute ‘factoryBeanObjectType’: java.lang.String: java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanOb…