shark工作流源代码学习(一)

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

org.enhydra.shark.SharkEngineManager

SharkEngineManager是shark引擎的控制室,它在shark引擎内部使用,shark引擎的所有管理器都是由它产生的。

SharkEngineManager使用了singleton模式,保证整个系统只有一个它的instance

// the one and only instance of this class

private static SharkEngineManager engineManager;

static SharkEngineManager getInstance () {

if (engineManager==null) {

engineManager=new SharkEngineManager();

}

return engineManager;

}

SharkEngineManager的所有get()方法的作用都是返回初始化时实例化的管理器,这些管理器也是singleton的,这样通过一个类,实现了无限个类的singleton模式,这在我们平常的系统中可以借鉴。

当系统启动时,将调用Shark.conf()进行系统的配置,配置时将调用SharkEngineManager的init (Properties properties)方法,该方法示例如下:

void init (Properties properties) {

String objectFactoryClassName=properties.getProperty

("ObjectFactoryClassName",

"org.enhydra.shark.SharkObjectFactory");

String amClassName =properties.getProperty

("AssignmentManagerClassName");

…………

}

如上所示,首先从properties中读ObjectFactoryClassName,如果有,则使用配置文件中的;如果没有,则用org.enhydra.shark.SharkObjectFactory。AssignmentManagerClassName也是从配置文件中读的。

Init()的下一步是用读到的配置或用缺省的配置将各管理器实例化,在后面运行时直接取用,如下:

try {

callbackUtilities=(CallbackUtil)cl.loadClass(cbuClassName).newInstance();

callbackUtilities.setProperties(properties);

objectFactory =(SharkObjectFactory)cl.loadClass(objectFactoryClassName).newInstance();

toolAgentManager = (ToolAgentManager) cl.loadClass(tamClassName).newInstance();

xmlInterface=new XMLInterfaceForJDK13();

} catch (Throwable ex) {

throw new Error("Problems instantiating core managers");

}

当然了,这里返回的都是接口,所以,我们可以方便的扩展它,只要写自己的类继承这些接口,然后在配置文件中进行配置,就可以不动它的代码而达到扩展的目的。

hongbo781202,又名HongSoft,职业程序员,研究领域:1)基于工作流的BPM系统研究2)基于JAVA的信息安全

技术.欢迎和大家讨论JAVA相关各方面技术和市场问题 hongbosoftware@163.com

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