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

    技术2022-05-20  27

    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");

          }

    当然了,这里返回的都是接口,所以,我们可以方便的扩展它,只要写自己的类继承这些接口,然后在配置文件中进行配置,就可以不动它的代码而达到扩展的目的。


    最新回复(0)