周日,莫映我们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 
    
 
  |