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中。
//待续。。。。。。