Flowable-源码分析-2启动
2023-12-17 05:27:13
引擎启动流程如图
// ProcessEngineFactoryBean.getObject
public ProcessEngine getObject() throws Exception {
// 如果 processEngine 为空
if (processEngine == null) {
// 初始化表达式管理器
initializeExpressionManager();
// 初始化事务外部管理
initializeTransactionExternallyManaged();
// 构建 processEngine
processEngine = (ProcessEngineImpl) processEngineConfiguration.buildProcessEngine();
}
// 返回 processEngine
return processEngine;
}
//ProcessEngineConfigurationImpl.buildProcessEngine
/**
* 重写父类方法,用于构建流程引擎
* @return 返回构建好的流程引擎对象
*/
@Override
public ProcessEngine buildProcessEngine() {
// 初始化
init();
// 创建 ProcessEngine 实例
processEngine = new ProcessEngineImpl(this);
// 调用构建后处理方法
invokePostProcessEngineBuild(processEngine);
// 返回 ProcessEngine 实例
return processEngine;
}
init初始化
//ProcessEngineConfigurationImpl.init
protected void init() {
// 调用preInit方法
invokePreInit();
// 初始化默认字符集
initDefaultCharset();
// 初始化历史级别
initHistoryLevel();
// 初始化历史事件生产者
initHistoryEventProducer();
// 初始化Cmmn历史事件生产者
initCmmnHistoryEventProducer();
// 初始化Dmn历史事件生产者
initDmnHistoryEventProducer();
// 初始化历史事件处理器
initHistoryEventHandler();
// 初始化表达式管理器
initExpressionManager();
// 初始化bean
initBeans();
// 初始化artifact工厂
initArtifactFactory();
// 初始化表单引擎
initFormEngines();
// 初始化表单类型
initFormTypes();
// 初始化表单字段校验器
initFormFieldValidators();
// 初始化脚本ing
initScripting();
// 初始化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();
// 初始化Jpa
initJpa();
// 初始化代理拦截器
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.invokePostProcessEngineBuild
protected void invokePostProcessEngineBuild(ProcessEngine engine) {
for (ProcessEnginePlugin plugin : processEnginePlugins) {
plugin.postProcessEngineBuild(engine);
}
}
流程引擎拥有如下插件类
文章来源:https://blog.csdn.net/zhuyufan1986/article/details/135039330
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!