获取流程实例
流程实例获取的源码解析
以获取默认的流程实例为例,来解释整个流程实例的获取过程
文件位置:/org/activiti/engine/ProcessEngines.java
第一步:通过getDefaultProcessEngine来获取,可以看出其调用的当前类的getProcessEngine方法。
//获取默认的流程引擎实例 NAME_DEFAULT="default"
public static ProcessEngine getDefaultProcessEngine() {
return getProcessEngine(NAME_DEFAULT);
}
第二步: 根据ProcessEngine的name获取指定的ProcessEngine
/**
* @author 郑小康
* 根据ProcessEngine的name获取指定的ProcessEngine
* */
public static ProcessEngine getProcessEngine(String processEngineName) {
if (!isInitialized()) {
init();
}
return processEngines.get(processEngineName);
}
第三步:调用init方法,来对流程引擎进行初始化
/**
* @author 郑小康
*
* 该方法使用了synchronized 再次检测其是否被初始化,避免其它客户端进行了初始化
*
* 1.检验是否初始化,默认值为false,第一次进来肯定是false,然后向下进行执行
*
* 2.检验processEngines是否存在,如果不存在则构建一个HashMap实例
*
* 3.获取当前类加载器,根据类加载器获取activiti.cfg.xml资源文件,如果不存在则扔出异常,要求必须命名为activiti.cfg.xml
*
* 4.遍历所有的资源文件,通过initProcessEngineFromSpringResource这个方法构建其processEngine实例并添加其对应的属性
*
* 5.将初始化属性isInitialized的值设为true
* */
public synchronized static void init() {
if (!isInitialized()) {
if (processEngines == null) {
processEngines = new HashMap<String, ProcessEngine>();
}
ClassLoader classLoader = ReflectUtil.getClassLoader();
Enumeration<URL> resources = null;
try {
resources = classLoader.getResources("activiti.cfg.xml"