一、Shark.class是全局性的配置类
shark引擎是通过Shark.class进行配置和初始化工作的。
除此以外,Shark.class还统一提供了SharkUtilities.class和SharkEngineManager.class的部分方法调用。
1、传入用户自定义配置文件
Shark.class提供了config()静态方法,并多次重载了此方法。
在系统中默认使用的是configure (String filePath),参数filePath是用户提供的shark引擎的配置文件完整的文件名(包括全路径名)。
try {
Shark.configure(confFilePath);
} catch (Exception ex) {
ex.printStackTrace();
printUsage();
return;
}
2、使用系统默认配置参数
初始化程序Shark.class先从jar中读取默认的初始配置参数。
...
configureFromJar();
...
通过Shark.class.getClassLoader().getResource("Shark.conf.forJar")获得Shark.conf.forJar的URL的引用。
创建properties,把系统默认的配置参数和文件所在目录置入properties中。下面是configureFromJar()的部分代码:
String rootDirectoryPath=System.getProperty("user.dir");
try {
//URL u=Shark.class.getClassLoader().getResource("Shark.conf.forJar");
//InputStream is=(InputStream)u.getContent();
URL u=Shark.class.getClassLoader().getResource("Shark.conf.forJar");
URLConnection urlConnection = u.openConnection();
InputStream is=urlConnection.getInputStream();
shark.properties=new Properties();
shark.properties.load(is);
shark.properties.put(SharkConstants.ROOT_DIRECTORY_PATH_PROP,rootDirectoryPath);
} catch (Exception ex) {
throw new RootError("Shark need to be configured properly - Can't read Shark's default configuration from JAR!!!",ex);
}
3、倒入用户自定义配置文件
在shark-1.1-2.src\shark-1.1\input\cfgscripts有一个Shark.conf.in可以作为用户自定义的配置文件模板使用,包含一些默认配置文件没有的属性。
...
fis=new FileInputStream(configFile);
Properties props=new Properties();
props.load(fis);
fis.close();
...
4、使用用户自定义的参数覆盖默认参数值
...
adjustSharkProperties(props);
...
adjustSharkProperties(props)方法将用户定义的参数覆盖默认参数,如果用户没有定义默认参数已有的参数,则使用默认参数。
while (it.hasNext()) {
Map.Entry me=(Map.Entry)it.next();
String key=(String)me.getKey();
String val=(String)me.getValue();
shark.properties.setProperty(key,val);
}
5、把配置文件所在路径置入properties,
...
shark.properties.put(SharkConstants.ROOT_DIRECTORY_PATH_PROP,configFile.getParentFile().getCanonicalPath());
...
isConfigured=true;
6、初始化引擎
shark.init();
二、初始化引擎
1、构建SharkEngineManager
使用properties创建SharkEngineManager。
SharkEngineManager.getInstance().init(properties);
SharkEngineManager从properties中读取配置文件中引擎使用的类,实例化;并且提供相应的get方法获得相应的服务类。
2、初始化引擎服务类
...
shark.initCaches();
shark.reevaluateAssignments();
shark.initLimitManager();
...
主要通过这三个方法,把SharkEngineManager中的服务类初始化。
这些类包括:
回调工具类 CallbackUtilitiesClassName=org.enhydra.shark.CallbackUtil
对象工厂类 ObjectFactoryClassName=org.enhydra.shark.SharkObjectFactory
工具代理管理类 ToolAgentManagerClassName=org.enhydra.shark.ToolAgentManagerImpl
这三个是默认使用的类名。
以下是由Shark.conf.in指定的类名
分配管理类 AssignmentManagerClassName=org.enhydra.shark.assignment.StandardAssignmentManager
认证管理类 AuthenticationManagerClassName=org.enhydra.shark.authentication.DODSAuthenticationManager
缓存管理类 CacheManagerClassName=org.enhydra.shark.caching.LRUCacheMgr
实例持久化管理类 InstancePersistenceManagerClassName=org.enhydra.shark.instancepersistence.DODSPersistentManager
事件审计管理类 EventAuditManagerClassName=org.enhydra.shark.eventaudit.DODSEventAuditManager
受限代理管理类 LimitAgentManagerClassName=org.enhydra.shark.limitagent.StandardLimitAgentManager
锁管理类 LockMasterClassName=org.enhydra.shark.processlocking.DODSLockMaster
日至管理类 LoggingManagerClassName=org.enhydra.shark.logging.StandardLoggingManager
参与者持久化映射管理类 ParticipantMapPersistenceManagerClassName=org.enhydra.shark.partmappersistence.DODSParticipantMappingMgr
应用持久化映射管理类 ApplicationMapPersistenceManagerClassName=org.enhydra.shark.appmappersistence.DODSApplicationMappingMgr
脚本持久化映射管理类 ScriptMapPersistenceManagerClassName=org.enhydra.shark.mappersistence.DODSScriptMappingMgr
信息库持久化管理类 RepositoryPersistenceManagerClassName=org.enhydra.shark.repositorypersistence.DODSRepositoryPersistenceManager
脚本管理类 ScriptingManagerClassName=org.enhydra.shark.scripting.StandardScriptingManager
安全管理类 SecurityManagerClassName=org.enhydra.shark.security.StandardSecurityManager
工具代理工厂类 ToolAgentFactoryClassName=org.enhydra.shark.toolagent.ToolAgentFactoryImpl
事务管理类 TransactionManagerClassName=org.enhydra.shark.transaction.DODSTransactionFactory
用户组管理类 UserGroupManagerClassName=org.enhydra.shark.usergroup.DODSUserGroupManager
用户事务管理类 UserTransactionManagerClassName=org.enhydra.shark.usertransaction.DODSUserTransactionFactory
工作流引擎 WfEngineInteroperabilityManagerClassName=org.enhydra.shark.interoperability.WfXMLInteroperabilityImpl
三、使用shark
...
Shark ss=Shark.getInstance();
PackageAdministration pa=ss.getAdminInterface().getPackageAdministration();
...
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=851914