Fire Workflow 的Eclispe设计器插件上传到google code ,并有较详细的文档(2_通过设计器和模拟器快速了解Fire
Workflow.pdf,3_各种工作流模式的实现.pdf)。
请到http://code.google.com/p/fireflow下载。
Fire workflow FAQ
1、为什么要写Fire Workflow
本人从事企业MIS系统开发很多年头了,感觉MIS系统很多领域都有比较好的解决方案并已成为事实标准,例如Spring,Hibernate等等;然而工作流还没有令人满意的开源产品。我了解过的工作流产品(主要是开源的,收费产品没有什么研究,仅仅看看其白皮书而已)都存在如下毛病:
缺乏严密的理论做支撑,工作流模型大多千篇一律地照搬WfMC的xpdl,
因为缺乏理论支撑,所以工作流引擎的算法有点七拼八凑,扩展性也比较差。
没有好的设计器,应用比较困难
最近研究并应用了一下JBoss的Jbpm,除了其面向图的引擎算法让我眼前一亮外,其他的也不是令人满意。其引擎的扩展性不好,表结构太复杂,在大数据量系统中,性能令人堪忧。
鉴于此,我动手写了一个Fire Workflow,抛砖引玉。
2、Fire Workflow的定位
我从来不认为工作流可以“自定义”,所以Fire Workflow是面向开发人员的。Fire
Workflow和Spring、Hibernate一样,是一个或几个普普通通的jar包,嵌入到系统中,用以解决系统开发中工作流领域的问题。
因为Fire Workflow是面向开发人员的,所以在下面两个方面花了较大功夫。
流程设计器。Fire Workflow用于帮助开发人员解决系统中的流程问题,所以好的流程设计器有助于开发人员提高开发效率。Fire
Workflow设计器和主流IDE紧密集成(目前有Eclipse插件和NetBeans插件),使得开发人员开发调试流程就像开发调试一个普通java类一样简单。
工作流引擎。Fire Workflow引擎设计充分考虑扩展性,因为业务系统的需求五花八门,所以一个写的很死的引擎必然没有生命力。Fire
Workflow引擎的各种服务都可以扩展或者替换。
Fire
Workflow虽然不认可流程“自定义”需求,但是并不否认用户有调整业已存在的流程的需求,而且这种需求还比较普遍。所以Fire
Workflow计划提供Web界面,让最终用户的系统管理员在一定范围内调整流程。
3、Fireflow的特点
理论严密
Fire Workflow以Petri Net作为理论基础,流程的顺序流转、分支、汇聚、跳转等算法都有定义/定理为依据。
设计合理
Fire workflow将工作流引擎的职责分解委派到各种服务中,每中服务都可以被扩展或者替换。
应用简单
Fire workflow的API以及数据库表结构非常简单。
性能优良
Fire workflow着重在流程实例的数据量,数据库IO等方面进行性能优化。
4、Fireflow的构成
Fire Workflow由模型、引擎、设计器(包含模拟器)三部分组成。
模型部分规定了流程定义文件的各种元素及其相互关系,例如流程(WorkflowProcess)、活动(Activity)、转移(Transition)、开始节点(StartNode)、结束节点(EndNode)、同步器(Synchronizer)。模型部分的实现在org-fireflow-model.jar中。
引擎读取流程定义文件并解释执行。引擎提供一组对象和相关的API供外部系统调用,如流程实例(ProcessInstance)、任务实例(TaskInstance)、工单(WorkItem)、事件等等。引擎部分的实现在org-fireflow-engine.jar中。
设计器编辑并输出流程定义文件。Fire Workflow的设计器附带了强大的模拟器,可以在设计时模拟流程的执行,从而检查流程定义的正确性。
此处附带解释一下我的一个观点:我认为,流程定义文件和java文件一样,是应用系统源代码的一部分。因此,流程设计器做成了当前流行的IDE的插件,便于开发人员进行流程开发。而且每个流程单独一个定义文件,就像每个java类在通常情况下单独一个文件一样。
5、Fire Workflow的流程定义语言为什么不使用Xpdl
本人认为Xpdl好看不好用。
相较于Xpdl,Fire workflow 的流程定义语言主要做了如下变动。
废除Package的概念:在我看来一个流程一个文件比较方便开发,流程定义文件在某中程度上和java类文件一样,是系统源代码的一部分
废除全局和局部的概念:在xpdl中有全局DataField和局部DataField区分,实际上其作用不大。
增加同步器节点:Fire Workflow将流程中的节点分成两类 ,即Acitivyt和Sychronizer(Start Node和End
Node是synchronizer的特例)。这两类节点分别代表了业务子系统的逻辑操作和工作流子系统的逻辑操作。
增加Task元素:一个Activity可以包含多个Task,Task代表实际的业务逻辑。
本文转自:http://nychen2000.javaeye.com/blog/322166