Flowable-源码分析-2启动

引擎启动流程如图

在这里插入图片描述

// 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);
    }
  }

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值