开门第一帖:Fire workflow FAQ

回复 [最后一篇]
comsci
comsci 的头像
User offline. Last seen 2 天 12 小时 ago. Offline
注册时间: 12/05/2009
积分: 41

1、为什么要写Fire Workflow
    本人从事企业MIS 系统开发很多年头了,感觉MIS 系统很多领域都有比较好的解决方案并已成为事实标准,例如Spring,Hibernate 等等;然而工作流还没有令人满意的开源产品。我了解过的工作流产品 (主要是开源的,收费产品没有什么研究,仅仅看看其白皮书而已)都存在如下毛病:
    1)缺乏严密的理论做支撑,,
    2)因为缺乏理论支撑,所以工作流引擎的算法有点七拼八凑,扩展性也比较差。
    3)没有好的设计器,应用比较困难
    最近研究并应用了一下JBoss 的Jbpm,除了其面向图的引擎算法让我眼前一亮外,其他的也不是令人满意。其引擎的扩展性不好,表结构太复杂,在大数据量系统中,性能令人堪忧。
    鉴于此,我动手写了一个Fire Workflow,抛砖引玉。

2、Fireflow 的特点
    理论严密
Fire Workflow 以Petri Net 作为理论基础,流程的顺序流转、分支、汇聚、跳转等算法都有定义/定理为依据。
    设计合理,易于扩展
Fire workflow 将工作流引擎的职责分解委派到各种服务中,每中服务都可以被扩展或者替换。
    应用简单
Fire workflow 的API 以及数据库表结构非常简单。
    性能优良
Fire workflow 着重在流程实例的数据量,数据库IO 等方面进行性能优化。

3、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 类在通常情况下单独一个文件一样。

4、Fire Workflow 的流程定义语言为什么不使用Xpdl
    Fire Workflow的流程定义语言主要解决了XPDL太复杂,语义不严密,执行比较困难的问题。相较于Xpdl,Fire workflow 的流程定义语言主要做了如下变动。
    1)废除Package 的概念:在我看来一个流程一个文件比较方便开发,流程定义文件在某中程度上和java 类文件一样,是系统源代码的一部分
    2)废除全局和局部的概念:在xpdl 中有全局DataField 和局部DataField 区分,实际上其作用不大。
    3)增加同步器节点:Fire Workflow 将流程中的节点分成两类,即Acitivyt 和Sychronizer (Start Node 和End Node 是synchronizer 的特例)。这两类节点分别代表了业务子系统的逻
辑操作和工作流子系统的逻辑操作。
    4)增加Loop元素,通常我们用Transition来“兼职”表达loop的概念,这种方法使的工作流定义非常难被正确执行。
    5)增加Task 元素:一个Activity 可以包含多个Task,Task 代表实际的业务逻辑。相当于xpdl中的implementation

snowfox
snowfox 的头像
User offline. Last seen 6 周 2 天 ago. Offline
注册时间: 03/27/2009
积分: 483

不知道你研究的是jBPM3还是jBPM4,jBPM4的表已经精简了一些了,当然,在处理历史数据的方面,我也不是很满意。关于Fire Workflow还没时间研究,暂不做任何评论,不过有个问题,你在流程定义中去掉了package的概念,那么如果一个系统中有成百上千个流程,你怎么管理?还有如果这些流程甚至需要相关的权限绑定,以使得不同的业务部门或分公司可以独立维护流程,你又怎么办?当然这得看你的流程维护的使用者是谁了?是不是可以让业务人员干那么一点点与业务逻辑相关的事情(注意我说的是可以让业务人员干那么一点点,不是全部)。

评论查看选项

选择您喜欢的显示评论的模式,并点击“保存设置”来保存您所做的改变。