OSWorkflow深层讲解系列(一)初始化的原理

类别:Java 点击:0 评论:0 推荐:

 

周日,莫映我们javaparty的伙伴讲了讲osworkflow,估计很多人还是一头雾水。目前国内似乎关注osworkflow的人越来越多,但是却没有多少人去关注其真正值得参考和学习的地方,这是不应该的。OSWorkflow的确非常灵活,但是我们不光需要知道“用的灵活”,还要知道“深层次的东东”。

于是才有了这个系列介绍的打算:

 

在阅读此系列之前,请队FSM又算了解,也请先阅读一下这篇文档:http://blog.csdn.net/james999/archive/2004/10/29/158653.aspx

 

我们现在就先从osworkflow的一个实例如何初始化入手:

 


 

首先OS的Workflow,和我们通常所理解的Engine并不是很一样。在OSWorkflow中没有“Service”的概念,所以每次访问的时候,都可以重新创建一个Workflow对象。我们可以把这个Workflow理解成一个Execute Engine或者Execute Runner。在一个访问请求中,一个Workfow对象负责维护一个流程实例的管理和操作。

 

Workflow workflow = new BasicWorkflow("testuser");

DefaultConfiguration config = new DefaultConfiguration();

workflow.setConfiguration(config);

long workflowId = workflow.initialize("mytest", 1, null);

workflow.doAction(workflowId, 1, null);

 

我们先来说说initialize方法,可以边看文档,边阅读osworkflow的AbstractWorkflow类:

       在你的一个工作流定义文件中,至少是需要定义一个initial action。这些initial action其实就是流程实例的可能运行起点。就如同我们通常说说的start node或者start activity等等。

 

<?xml version="1.0" encoding="UTF-8"?>

<workflow>

  <initial-actions>

    ...

  </initial-actions>

  <steps>

    ...

  </steps>

</workflow>

 

在initialize方法中,主要是存在四个功能:

(1)       创建流程实例对象,在osworkflow中,流程实例对象用WorkflowEntry接口的子类实现

(2)       构造临时变量的集合,即transientVars;用于在一个转移过程中临时保持数据状态

(3)       获取指定的Action对象

(4)       执行这个Action,并造成转移,即transitionWorkflow方法

 

这几个功能中,重中之重,也是OSWorkflow的最为核心的算法,就是最后的转移。在这转移过程中,会执行下面的一系列操作:

 

(这张列表最初是由 莫映 整理,我补充和修改了一些)

(01) Get current step(获取当前的Step)

(02) Validate transientVars(验证临时变量)

(03) Validate inputs(验证输入的数据)

    如果step不为null(执行初始化action的时候,current step还不存在)

(04) Execute post-functions(step-level) (执行step的post function)

(05) Execute pre-functions(action-level) (执行action的pre function)

(06) Check each conditional results (检查每一个条件的执行结果)

(07) Execute pre-functions(result-level) (运行result的pre function)

(08) Move current step into history

(09) Create new current step

(10) Execute pre-functions(step-level)

(11) Execute post-functions(result-level)

(12) Execute post-functions(action-level)

    如果是初始化动作

(13) Mark the entry state as Activated

如果是结束动作

(14) Set the entry state Completed

获取globalActions中可以自动执行的,并执行

(15) perform available and auto global actions

  

本文地址:http://com.8s8s.com/it/it12241.htm