OSWorkflow深层讲解系列(一)初始化的原理收藏
周日,莫映我们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对象负责维护一个流程实例的管理和操作。
我们先来说说initialize方法,可以边看文档,边阅读osworkflow的AbstractWorkflow类: 在你的一个工作流定义文件中,至少是需要定义一个initial action。这些initial action其实就是流程实例的可能运行起点。就如同我们通常说说的start node或者start activity等等。
在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 |
|
来自: 昵称2807 > 《OA & WorkFlow》