初学activiti之流程引擎容器的初始化(一)-准备工作

org.activiti.engine包下有一个名为ProcessEngines的抽象类,我把它看做作流程引擎的容器,它持有所有注册在案流程引擎实例。



initdestory方法定义了它的生命周期。

init负责加载类路径下的名为activiti.cfg.xml或activiti-context.xml的资源文件,并用俩种不同的方式来初始化资源文件中所配置的流程引擎。

(1)普通(activiti.cfg.xml):initProcessEnginFromResource(resource)

              注:这是个私有方法

   调用关系:initProcessEnginFromResource---

             buildProcessEngine---

             ProcessEngineConfiguration.buildProcessEngine


真正干活(创建流程实例的)的是ProcessEngine类的buildProcessEngine

注:ProcessEngine类见后。

(2)借助springinitProcessEngineFromSpringResource(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);
}

这个方法就相当复杂了,也进入了正题。。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值