JBPM源代码导读一

从jbpm产生流程引擎实例说起,看下面这句代码,非常简单,其实jbpm在其中做了很多事情;
ProcessEngine processEngine = Configuration.getProcessEngine();

1,getProcessEngine做如下事情
/** get the singleton ProcessEngine that is created from the default
   * configuration file 'jbpm.cfg.xml'. */
  public static ProcessEngine getProcessEngine() {
    if (singleton == null) {
      synchronized (Configuration.class) {
        if (singleton == null) {
          singleton = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();
        }
      }
    }
    return Configuration.singleton;
  }
由此可以看到,ProcessEngine是个单例。
2,通过读取jbpm.cfg.xml文件初始化ProcessEngine
   public ProcessEngineImpl(ConfigurationImpl configuration) {
    //初始化流程引擎
    initializeProcessEngine(configuration);
    checkDb(configuration);
  }

3,Configuration与configurationImpl
   transient Configuration impl;

  /** default constructor (无参的默认构造子是必须的,在反射中使用) */
  public Configuration() {
//通过反射会实例化子类(ConfigurationImpl),这样会调用父类的构造方法,
//从而在子类中手动调用下面的构造方法,阻止循环实例化子类
    impl = instantiate("org.jbpm.pvm.internal.cfg.ConfigurationImpl");
  }
  jbpm初始化所有的工作都是在ConfigurationImpl中完成,Configuration只不过是一层包装壳。

亮点:通过反射来封装不同子类的实现。不同子类的实现实例,通过反射的方式传入到包装类Configuration中。
//待续。。。。。。

你可能感兴趣的:(xml,工作,jbpm)