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的資訊安全
技術.http://blog.csdn.net/hongbo781202/
hongbosoftware@163.com