osworkflow源码分析(一)

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

理解osworkflow.xml:

加载osworkflow.xml过程:

1)DefaultConfiguration中,在load方法中调用getInputStream()以获取系统的osworkflow.xml文件

在getInputStream方法中:

protected InputStream getInputStream(URL url) {

InputStream is = null;

if (url != null) {

try {

is = url.openStream();

} catch (Exception ex) {

}

}

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

if (is == null) {

try {

is = classLoader.getResourceAsStream("osworkflow.xml");

} catch (Exception e) {

}

}

if (is == null) {

try {

is = classLoader.getResourceAsStream("/osworkflow.xml");

} catch (Exception e) {

}

}

if (is == null) {

try {

is = classLoader.getResourceAsStream("META-INF/osworkflow.xml");

} catch (Exception e) {

}

}

if (is == null) {

try {

is = classLoader.getResourceAsStream("/META-INF/osworkflow.xml");

} catch (Exception e) {

}

}

return is;

}

在load方法中

Document doc = db.parse(is); //开始解析由上面方法传递回来的流

然后可以看到接下来通过xml中指定的工厂类进行init

由上面代码可以看的出defaultconfiguration是如何加载osworkflow.xml的。

load()方法解析文件,并load相应的工厂类.

workflowFactory:

在loader包下提供了多种多种格式的factory,如xmlworkflowfactory、JDBCworkflowfactory、URLworkflowfactory、springworkflowfactory(在实际中jar包中没找到,但是在javadoc中确实有)等等。

这几种工厂类都是在各自的getWorkflow方法体内调用loadWorkflow方法。

private void loadWorkflow(WorkflowConfig c) throws FactoryException {

try {

c.descriptor = WorkflowLoader.load(c.url);

} catch (Exception e) {

throw new FactoryException("Error in workflow descriptor: " + c.url, e);

}

}

而实际调用的则是workflowloader.load方法。可以进一步跟踪到workflowloader中,可以看到如何是将descriptor返回的。

com.opensymphony.workflow.spi spi指server provider identification

在spi包中可以看到各种存储的子包

里面具体代码还没细看,以后会慢慢完善!我想在load方法中将persistenceArgs参数返回会在上面这些包的类中进行处理……

未完待续~~

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航