<o:p> </o:p>
周日,莫映我们javaparty的伙伴讲了讲osworkflow,估计很多人还是一头雾水。目前国内似乎关注osworkflow的人越来越多,但是却没有多少人去关注其真正值得参考和学习的地方,这是不应该的。OSWorkflow的确非常灵活,但是我们不光需要知道“用的灵活”,还要知道“深层次的东东”。
于是才有了这个系列介绍的打算:
<o:p> </o:p>
在阅读此系列之前,请队FSM又算了解,也请先阅读一下这篇文档:http://blog.csdn.net/james999/archive/2004/10/29/158653.aspx
<o:p> </o:p>
我们现在就先从osworkflow的一个实例如何初始化入手:
<o:p> </o:p>
<v:shapetype o:spt="75" coordsize="21600,21600" stroked="f" id="_x0000_t75" filled="f" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>
<o:p>
</o:p>
首先OS的Workflow,和我们通常所理解的Engine并不是很一样。在OSWorkflow中没有“Service”的概念,所以每次访问的时候,都可以重新创建一个Workflow对象。我们可以把这个Workflow理解成一个Execute Engine或者Execute Runner。在一个访问请求中,一个Workfow对象负责维护一个流程实例的管理和操作。
<o:p> </o:p>
Workflow workflow = new BasicWorkflow("testuser");<o:p></o:p> DefaultConfiguration config = new DefaultConfiguration();<o:p></o:p> workflow.setConfiguration(config);<o:p></o:p> long workflowId = workflow.initialize("mytest", 1, null);<o:p></o:p> workflow.doAction(workflowId, 1, null);<o:p></o:p> |
<o:p> </o:p>
我们先来说说initialize方法,可以边看文档,边阅读osworkflow的AbstractWorkflow类:
在你的一个工作流定义文件中,至少是需要定义一个initial action。这些initial action其实就是流程实例的可能运行起点。就如同我们通常说说的start node或者start activity等等。
<o:p> </o:p>
<?xml version="1.0" encoding="UTF-8"?><o:p></o:p> <workflow><o:p></o:p> <initial-actions><o:p></o:p> ...<o:p></o:p> </initial-actions><o:p></o:p> <steps><o:p></o:p> ...<o:p></o:p> </steps><o:p></o:p> </workflow><o:p></o:p> |
<o:p> </o:p>
在initialize方法中,主要是存在四个功能:
(1) 创建流程实例对象,在osworkflow中,流程实例对象用WorkflowEntry接口的子类实现
(2) 构造临时变量的集合,即transientVars;用于在一个转移过程中临时保持数据状态
(3) 获取指定的Action对象
(4) 执行这个Action,并造成转移,即transitionWorkflow方法
<o:p> </o:p>
这几个功能中,重中之重,也是OSWorkflow的最为核心的算法,就是最后的转移。在这转移过程中,会执行下面的一系列操作:
<o:p> </o:p>
(这张列表最初是由 莫映 整理,我补充和修改了一些)
(01) Get current step(获取当前的Step)<o:p></o:p>
(02) Validate transientVars(验证临时变量)<o:p></o:p>
(03) Validate inputs(验证输入的数据)<o:p></o:p>
如果step不为null(执行初始化action的时候,current step还不存在)<o:p></o:p>
(04) Execute post-functions(step-level) (执行step的post function)<o:p></o:p>
(05) Execute pre-functions(action-level) (执行action的pre function)<o:p></o:p>
(06) Check each conditional results (检查每一个条件的执行结果)<o:p></o:p>
(07) Execute pre-functions(result-level) (运行result的pre function)<o:p></o:p>
(08) Move current step into history <o:p></o:p>
(09) Create new current step<o:p></o:p>
(10) Execute pre-functions(step-level)<o:p></o:p>
(11) Execute post-functions(result-level)<o:p></o:p>
(12) Execute post-functions(action-level)<o:p></o:p>
如果是初始化动作<o:p></o:p>
(13) Mark the entry state as Activated <o:p></o:p>
如果是结束动作<o:p></o:p>
(14) Set the entry state Completed <o:p></o:p>
获取globalActions中可以自动执行的,并执行<o:p></o:p>
(15) perform available and auto global actions<o:p></o:p>
<o:p> </o:p><o:p> </o:p>
分享到:
相关推荐
讲解JAVA开源工作流框架OSWorkFlow2.8的课件
工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow
关于osworkflow的原理和其他的一些知识
OSWorkflow
OSWorkFlow demo 资料 OSWorkFlow demo 资料
由OpensymPhony组织开发的开源工作流引擎 OSWorkflow是一种非常灵活的工作 流引擎。它主要基于有限状态机理论,通过状态的迁移描述工作的流转。每一种状态(state) 被描述成为 step ID和 status。从一种状态(state)...
osworkflow在tomcat6下的持久化例子,用mysql数据库 里面有一个数据库脚本,context.xml是tomcat6的配置文件,下载可以直接部署使用
这是一点关于OSWorkFlow 工作流系统设计知识的详细讲解
OSWorkflow中文手册OSWorkflow中文手册OSWorkflow中文手册OSWorkflow中文手册 pdf 50页
一个osworkflow的例子,其实就是官方的例子,只是除了是汉化的外我还把在jsp中的Java代码提取到一个单独的类中,这样便于阅读和理解。希望对大家有帮助。
Osworkflow持久化.doc Osworkflow的介绍.doc osworkflow配置与demo.rar osworkflow中文开发指南.rar OSWorkflow中文手册OSWorkflow-chinese-manual-2.8.pdf Packt.Publishing.OSWorkflow.A.Guide.for.Java....
通过osworkflow项目的学习和实践,总结出的一套osworkflow工作流引擎的学习笔记,供需要使用osworkflow系统的同学们借鉴,谢谢!
OSWORKFlow流程开发教程
OSWorkflow 2.8 API 文档
osworkflow中文入门指南,osworkflow+hibernate+spring集成配置,osworkflow-2.8.0.jar
这是一个简单的osworkflow的web应用,比较适合初学或入门者,或想研究osworkflow的人,如果有任何问题,可以联系我.
osworkflow2.8.rar 工作流引擎
osworkflow教程,osworkflow教程,osworkflow教程,osworkflow教程,osworkflow教程,osworkflow教程,osworkflow教程,osworkflow教程,osworkflow教程osworkflow教程osworkflow教程,osworkflow教程,osworkflow教程...