
2.7 管理流程引擎
2.7.1 注册流程引擎
上文多次提到流程引擎对象构造完毕,会将自身信息注册到流程引擎管理类中,以方便后续操作,这一过程从ProcessEngines.registerProcessEngine(this)开始,该方法的详细实现如代码清单2-28所示。
代码清单2-28 ProcessEngines.java

毕竟registerProcessEngine方法仅仅是注册流程引擎实例对象,所以实现逻辑比较简单,直接将ProcessEngine实例对象添加到ProcessEngines类中的processEngines集合即可。
2.7.2 关闭流程引擎
上文分析了流程引擎的注册过程,接下来详细分析流程引擎的注销过程,流程引擎关闭时会调用注销方法,上文提到过流程引擎的关闭操作形如processEngine.close(), close方法负责关闭流程引擎,该方法的详细实现如代码清单2-29所示。
代码清单2-29 ProcessEngineImpl.java

下面对close方法的执行逻辑加以总结。
(1)第2行注销流程引擎实例。
(2)关闭执行器。
第3~7行如果流程引擎配置类配置了作业执行器jobExecutorActivate开关属性和异步作业执行器asyncExecutorActivate开关属性,则需要分别关闭上述的两个作业执行器。
(3)执行SchemaOperationProcessEngineClose命令。
(4)流程引擎生命周期监听器。
如果流程引擎配置类配置了流程引擎生命周期监听器,则第11行触发流程引擎生命周期监听器中的onProcessEngineClosed方法。
(5)转发事件。第13~14行转发ENGINE_CLOSED事件。
如果使用StandaloneProcessEngineConfiguration实例对象,则需要手动调用流程引擎的close方法,如果使用ProcessEngineFactoryBean类构造流程引擎,则无须关心close方法,具体实现逻辑可以跟进该类的destroy方法进行查看。