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

org.enhydra.shark.SharkEngineManager

 

SharkEngineManagershark引擎的控制室,它在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值