2006年04月30日

1、ToolAgentManagerImpl
工具代理管理类org.enhydra.shark.ToolAgentManagerImpl定义在Shark.class中,也可以通过配置文件修改为用户指定的类。在配置文件中是这样描述的:ToolAgentManagerClassName=org.enhydra.shark.ToolAgentManagerImpl


ToolAgentManagerImpl类位于modules/SharkKernel/Standard/src目录下,它实现了ToolAgentManager接口。ToolAgentManager位于modules/SharkAPI/src目录下 org.enhydra.shark.api.internal.working包中。

ToolAgentManagerImpl实现了tool activity(工具节点)的执行方法。一个节点的实现通过ToolAgentManagerImpl来运行。

2、调用方式
通过统一的SharkEngineManager进行调用:

ToolAgentManager tam=SharkEngineManager.getInstance().getToolAgentManager();
tam.executeActivity(t,this);

3、实现的接口
ToolAgentManager只定义了一个接口的方法:
public void executeActivity (SharkTransaction t,WfActivityInternal act) throws BaseException, ToolAgentGeneralException;

1、SharkObjectFactory
对象工厂类org.enhydra.shark.SharkObjectFactory定义在Shark.class中,也可以通过配置文件修改为用户指定的类。在配置文件中是这样描述的:ObjectFactoryClassName=org.enhydra.shark.SharkObjectFactory


SharkObjectFactory类位于modules/SharkKernel/Standard/src目录下,它实现了ObjectFactory接口。ObjectFactory位于modules/SharkAPI/src目录下 org.enhydra.shark.api.internal.working包中。

2、调用方式
通过统一的SharkEngineManager进行调用

SharkEngineManager.getInstance().getObjectFactory().createProcessMgr(t,pkgId,pkgVer,wp.getId());

3、实现的接口
ObjectFactory接口使用工厂模式定义方法
包括主要对象、事件等

4、创建的对象列表

   // main objects
   WfProcessMgrInternal
   WfProcessMgr
   WfProcessInternal
   WfProcess
   WfRequesterInternal
   WfRequester
   WfActivityInternal
   WfActivity
   WfAssignmentInternal
   WfAssignment
   WfResourceInternal
   WfResource
   // event audits
   WfAssignmentEventAuditInternal
   WfCreateProcessEventAuditInternal
   WfStateEventAuditInternal

   // iterators
   WfProcessMgrIterator
   WfProcessIterator
   WfActivityIterator
   WfAssignmentIterator
   WfResourceIterator
   WfEventAuditIterator
   WfEventAuditIterator
   AdminInterface
   AdminMisc
   ApplicationMap
   ExecutionAdministration
   ParticipantMappingAdministration 
   ApplicationMappingAdministration 
   ScriptMappingAdministration 
   PackageAdministration 
   ParticipantMap 
   RepositoryMgr 
   SharkConnection 
   UserGroupAdministration 
   CacheAdministration 
   DeadlineAdministration 
   LimitAdministration

1、CallbackUtil
回调工具类org.enhydra.shark.CallbackUtil定义在Shark.class中,也可以通过配置文件修改为用户指定的类。在配置文件中是这样描述的:CallbackUtilitiesClassName=org.enhydra.shark.CallbackUtil

CallbackUtil类位于modules/SharkKernel/Standard/src目录下,它实现了CallbackUtilities接口。CallbackUtilities位于modules/SharkAPI/src目录下 org.enhydra.shark.api.internal.working包中。

2、调用方式
通过参数注入的方式,对CallbackUtil进行调用:

   private CallbackUtilities callback;

   public void configure (CallbackUtilities cus) throws RootException {
      if (null == cus)
         throw new RootException("Cannot configure without call back impl.");
      callback = cus;
      HibernateUtilities.init(callback.getProperties());
      callback.debug("HibernateUserGroupManager configured");
   }

3、实现的接口
CallbackUtilities接口定义了如下一些方法:
/** 设置、读取Shark 配置文件中的内容**/
String getProperty (String propertyName);
String getProperty (String propertyName,String defaultValue);
Properties getProperties ();
void setProperties (Properties props);

/** 以下方法提供Log功能 **/
void error (String msg);
void error (String msg,RootException ex);
void error (String channel,String msg);
void error (String channel,String msg,RootException ex);
void warn (String msg);
void warn (String msg,RootException ex);
void warn (String channel,String msg);
void warn (String channel,String msg,RootException ex);
void info (String msg);
void info (String msg,RootException ex);
void info (String channel,String msg);
void info (String channel,String msg,RootException ex);
void debug (String msg);
void debug (String msg,RootException ex);
void debug (String channel,String msg);
void debug (String channel,String msg,RootException ex);



一、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();

2006年04月22日

1、访问 http://forge.objectweb.org/project/showfiles.php?group_id=74 (或者访问国内镜像站点http://download.zh.forge.objectweb.org/shark/) 下载shark1.1-2的代码。

2、计划在windows 下安装,所以选择下载:
      shark-1.1-2.setup.exe、shark-1.1-2.src.zip和 shark-1.1-2.zip

3、解压shark-1.1-2.src.zip