在路上...

生命是一段过程,是一个没有归途的旅程

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  65篇文章 :: 0篇收藏:: 4篇评论:: 0个Trackbacks

文章

收藏

相册

链接

存档


正在读取评论……


一、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


[点击此处收藏本文]  发表于2006年04月30日 1:29 PM




正在读取评论……

发表评论

大名:
网址:
验证码
评论