初学activiti之流程引擎容器的初始化(一)-准备工作
2012-02-20 20:42
525 查看
org.activiti.engine包下有一个名为ProcessEngines的抽象类,我把它看做作流程引擎的容器,它持有所有注册在案流程引擎实例。
init和destory方法定义了它的生命周期。
init负责加载类路径下的名为activiti.cfg.xml或activiti-context.xml的资源文件,并用俩种不同的方式来初始化资源文件中所配置的流程引擎。
(1)普通(activiti.cfg.xml):initProcessEnginFromResource(resource)
注:这是个私有方法
调用关系:initProcessEnginFromResource---》
buildProcessEngine---》
ProcessEngineConfiguration.buildProcessEngine
真正干活(创建流程实例的)的是ProcessEngine类的buildProcessEngine
注:ProcessEngine类见后。
(2)借助spring:initProcessEngineFromSpringResource(resource)
注:这是个protected方法
从源码中可以看出,这个流程引擎的容器,在一个生命周期内只会被初始化一次。
init方法执行的时机(即容器初始化)
在第一次需要得到流程引擎实例时,整个容器开始初始化
destroy,主要做关闭引擎实例,清理容器(对应的实例信息等),并对容器初始化标识(静态变量isInitialized)重置为false,至此一个流程引擎容器一个完整生命周期结束。
ProcessEngineConfiguration是一个抽象类,buildProcessEngine是它的一个模板方法 ,有待其不同的子类用不同的方式实现。
还有,它有很多不同的静态工厂方法,来代替构造器,以产生出不同的ProcessEngineConfiguration实例
干活人(创建流程引擎实的类):ProcessEngineConfigurationImpl
关于创建流程引擎实例:
这个方法就相当复杂了,也进入了正题。。。。
init和destory方法定义了它的生命周期。
init负责加载类路径下的名为activiti.cfg.xml或activiti-context.xml的资源文件,并用俩种不同的方式来初始化资源文件中所配置的流程引擎。
(1)普通(activiti.cfg.xml):initProcessEnginFromResource(resource)
注:这是个私有方法
调用关系:initProcessEnginFromResource---》
buildProcessEngine---》
ProcessEngineConfiguration.buildProcessEngine
真正干活(创建流程实例的)的是ProcessEngine类的buildProcessEngine
注:ProcessEngine类见后。
(2)借助spring:initProcessEngineFromSpringResource(resource)
注:这是个protected方法
protected static void initProcessEngineFromSpringResource(URL resource) { try { //加载SpringConfigurationHelper类到内存中 Class< ? > springConfigurationHelperClass = ReflectUtil.loadClass("org.activiti.spring.SpringConfigurationHelper"); // 通过反射得到buildProcessEngine方法 // 执行此方法,创建流程引擎实例 Method method = springConfigurationHelperClass.getMethod("buildProcessEngine", new Class<?>[]{URL.class}); method.invoke(null, new Object[]{resource}); } catch (Exception e) { throw new ActivitiException("couldn't initialize process engine from spring configuration resource "+resource.toString()+": "+e.getMessage(), e); } }
从源码中可以看出,这个流程引擎的容器,在一个生命周期内只会被初始化一次。
public synchronized static void init() { if (!isInitialized) { if(processEngines == null) { processEngines = new HashMap<String, ProcessEngine>(); ............ ............ ............ } } else { log.info("Process engines already initialized"); } }
init方法执行的时机(即容器初始化)
在第一次需要得到流程引擎实例时,整个容器开始初始化
public static ProcessEngine getProcessEngine(String processEngineName) { if (!isInitialized) { init(); } return processEngines.get(processEngineName);
destroy,主要做关闭引擎实例,清理容器(对应的实例信息等),并对容器初始化标识(静态变量isInitialized)重置为false,至此一个流程引擎容器一个完整生命周期结束。
ProcessEngineConfiguration是一个抽象类,buildProcessEngine是它的一个模板方法 ,有待其不同的子类用不同的方式实现。
还有,它有很多不同的静态工厂方法,来代替构造器,以产生出不同的ProcessEngineConfiguration实例
干活人(创建流程引擎实的类):ProcessEngineConfigurationImpl
关于创建流程引擎实例:
public ProcessEngine buildProcessEngine() { init(); return new ProcessEngineImpl(this); }
这个方法就相当复杂了,也进入了正题。。。。
相关文章推荐
- activiti使用的准备工作和启流程启动发布查看
- 从小白的角度看Spring核心流程概览(XML版)- 容器初始化第三章-创建BeanFactory 3ff8
- 工作流程引擎,workflow,synchroflow,负载均衡群集
- 工作流程引擎-手机应用-方寸之间尽在掌握。
- 驰骋.net工作流程引擎设计开发讲座: 工作流程类型模式
- 阿里云EMR集群初始化后的开发准备工作
- activiti入门2流程引擎API和服务基础设施
- 关于自学activiti开源流程引擎的一点点感悟和代码分享demo教程
- Activiti(2)流程引擎生命周期监听器ProcessEngineLifeCycleListener
- 部署流程到ActiveBPEL的准备工作
- Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)
- 从小白的角度看Spring核心流程概览(XML版)- 容器初始化第二章-刷新此容器 4000
- FFMPEG-0.11.1分析之ffmpeg结构(简单涉及)与代码流程(主要涉及前部分的准备工作)
- 驰骋.net工作流程引擎,工作流程管理系统定时启动约定
- Activiti学习总结(二)————工作流程部署
- 驰骋开源软件一体化产品线,工作流程引擎,OA系统,即时通讯,单点登陆。
- 驰骋工作流程引擎ccbpm,ccflow,jflow关于组织结构集成的重新解释.
- 驰骋工作流程引擎 ccflow
- 【AR】AR库的准备工作和基本流程
- 驰骋工作流程引擎问题解答,武汉朋友。