您的位置:首页 > 其它

Activiti入门教程五(详解ProcessEngine的创建)

2015-09-20 12:32 495 查看
 

 这篇博客来通过源码来看一下有关ProcessEngine创建的那些事,其中有两种方式来创建,下面来分析一下。

 ProcessEngineConfiguration方式

 第一种方式,在前几篇博客中也曾提到,通过各种静态的方法,加载相应的XML,最后调用buildProcessEngine()方法,来创建ProcessEngine对象。

 其中的执行过程,也在上一篇博客中分析了,先是走Init()初始化的方法,最后走了一个构造函数来实例化各种流程实例组件。这种方式就说到这里。

 ProcessEngines方式

 该类是干什么的呢?类似于一个容器工厂,来保存创建的ProcessEngine对象。下面来看一下主要的方法

 protected static Map<String, ProcessEngine> processEngines = new HashMap<String, ProcessEngine>();

 通过map集合,使用键值对的形式来保存ProcessEngine对象

 public synchronized static void init();初始化方法,用来实例化ProcessEngine对象,与第一种方式类似

 public static void registerProcessEngine(ProcessEngine processEngine);

 把实例化好的ProcessEngine对象,加入到Map集合中

 public static void unregister(ProcessEngine processEngine);

 把实例化好的ProcessEngine对象,从map集合中去除

 public static ProcessEngine getDefaultProcessEngine();

 从map集合中取出默认的实例化好的ProcessEngine对象

 public static ProcessEngineInfo retry(String resourceUrl);

 如果Activiti在加载配置文件时出现异常的话,通过改方法可以重新加载配置文件

 public synchronized static void destroy();

  对维护的所有的ProcessEngine实例进行销毁,并且在销毁的同时调用ProcessEngine的close方法

 下面看一个实例

 

<span style="font-family:Comic Sans MS;font-size:18px;">package org.crazyit.activiti;

import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;

/**
* 调用ProcessEngines的init方法
*
* @author yangenxiong
*
*/
public class Init {

public static void main(String[] args) {
// 初始化ProcessEngines的Map,
// 再加载Activiti默认的配置文件(classpath下的activiti.cfg.xml文件)
// 如果与Spring整合,则读取classpath下的activiti-context.xml文件
ProcessEngines.init();
// 会进行判断,看是否初始化,如果已经初始化好的话,直接从map中取值即可
ProcessEngine aEngine = ProcessEngines.getDefaultProcessEngine();

// 得到ProcessEngines的Map
Map<String, ProcessEngine> engines = ProcessEngines.getProcessEngines();
System.out.println(engines.size());
System.out.println(engines.get("default"));
//调用销毁的方法
//ProcessEngines.destroy();
// 从map集合中去除实例化好的ProcessEngine对象
ProcessEngines.unregister(aEngine);

System.out.println(engines.size());
System.out.println(engines.get("default"));
}

}
</span>


流程实例名称问题

在上面的例子中我们看到这样一句话engines.get("default"),从上面的分析中,我们知道map中是以键值对的形式来放置流程实例对象,如果我们不指定名称的话,默认的名称为default,如果要指定的话,需要通过ProcessEngineConfiguration来指定

<span style="font-family:Comic Sans MS;font-size:18px;">package org.crazyit.activiti;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;

public class Name {

public static void main(String[] args) {
ProcessEngineConfiguration config = ProcessEngineConfiguration.
createProcessEngineConfigurationFromResource("name.xml");
//设置流程引擎名称
config.setProcessEngineName("test");
ProcessEngine engine = config.buildProcessEngine();
//根据名称查询流程引擎
ProcessEngine engineTest = ProcessEngines.getProcessEngine("test");
System.out.println("创建的引擎实例:" + engine);
System.out.println("查询的引擎实例:" + engineTest);
}

}
</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: