博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Fire Workflow 源码分析——(基本组成)(1)

Posted on 2009-10-27 14:28  Leshem  阅读(4482)  评论(12编辑  收藏  举报

    Fire Workflow是最近兴起的国内比较火的开源工作流引擎,本人从发现它、应用它到解读它,感觉很有前途。本开源项目有个谦逊的leader——非也,有个稳定良好的团队,我相信只要坚持,它的发展是长远和美好的。

    FireWorkflow的源代码主要 包含两个部分:FireflowEngineFireflowModel,其中FireflowEngine主要是一些工作流运行时的服务,如事件处理、条件判断、数据持久化、工作流委派等等服务和操作,另外还预留了一些扩展接口。FireflowModel主要是一些流程定义的基本组建,流程定义的解析服务以及序列化服务等,另外还提供了对资源和参与者的接口。

   先开始讲FireflowModel这个部分中的包org.fireflow.model,由于代码没有全部看完,因此先说一些包和类的基本构成,希望对大家有帮助。这是整个包的类图。

下面开始对每个部分进行分析:

IWFElement工作流元素的抽象接口

getSn(), setSn(): 返回和设置元素的序列号,系统自动处理,开发者无需关心。

getId():返回工作流元素的Id, 工作流元素的Id采用Id.自身Name”的方式组织。

getName(), SetName(): 返回和设置工作流元素的名称。

getDisplayName(), setDisplayName(): 返回和设置工作流元素的显示名称。

getDescription(), setDescription(): 返回和设置工作流元素的描述。

getParent(), setParent(): 返回和设置父节点。

getEventListeners(): 返回事件监听器列表。

getExtendedAttributes(): 返回扩展属性Map

AbstractWFElement:流程元素抽象类。

实现了IWFElement中的方法,并重写了hashCode()toString()方法。

Task:工作流任务。

 

 

前四个为工作流类型:

TOOLTOOL类型,即工具类型任务,该任务自动调用java代码完成特定的工作。

SUBFLOWSUBFLOW类型,即子流程任务。

FORMFORM类型,最常见的一类任务,代表该任务需要操作员填写相关的表单。

DUMMYDUMMY类型,该类型暂时没有用到,保留。

接下来三个是任务分配指示:

REDO:重做类型。对于Tool类型和Subflow类型的task会重新执行一遍,对于Form类型的Task,重新执行一遍,且将该任务实例分配给最近一次完成同一任务的操作员。

SKIP:跳过忽略类型。循环的情况下该任务将被忽略,即在流程实例的生命周期里,仅执行一遍。

NONE:无类型。对于Tool类型和Subflow类型的task会重新执行一遍,和REDO效果一样的。对于Form类型的Task,重新执行一遍,且工作流引擎仍然调用Performer属性的AssignmentHandler分配任务。

其他变量:

type: 任务类型,取值为FORM,TOOL,SUBFLOW,DUMMY(保留),缺省值为FORM

duration: 自定义类型,任务执行的时限,可查看duration类。

priority: 任务优先级别(1.0版本中暂未使用)。

loopStrategy:循环情况下任务执行策略,取值为REDOSKIPNONE

taskInstanceCreator:任务实例创建器。如果没有设置,则使用所在流程的全局任务实例创建器。

taskInstanceRunner:任务实例运行器,如果没有设置,则使用所在流程的全局的任务实例运行器。

taskInstanceCompletionEvaluator:任务实例的终结评价器,用于告诉引擎,该实例是否可以结束。如果没有设置,则使用所在流程的全局的任务实例终结评价器。

 

WorkflowProcess:业务流程,是流程描述的顶层元素。

 

dataFields:流程数据项,运行时转换为流程变量进行存储。

tasks:全局Task

activities:流程环节,steps

transitions: 转移。

loops:循环。

Synchronizers:同步器。

startNode:开始节点。

endNodes:结束节点。

resourceFile:资源文件(在1.0版本中暂时未使用)。

resourceManager:资源管理器(在1.0中暂时未使用)。

taskInstanceCreator:本流程全局的任务实例创建器。 如果没有设置,引擎将使用DefaultTaskInstanceCreator来创建TaskInstance

formTaskInstanceRunner:本流程全局的FormTask Instance运行器。如果没有设置,引擎将使用DefaultFormTaskInstanceRunner来运行TaskInstance

toolTaskInstanceRunner:本流程全局的ToolTask Instance运行器。如果没有设置,引擎将使用DefaultToolTaskInstanceRunner来运行TaskInstance

subflowTaskInstanceRunner:本流程全局的SubflowTask Instance运行器。如果没有设置,引擎将使用DefaultSubflowTaskInstanceRunner来运行TaskInstance

formTaskInstanceCompletionEvaluator:本流程全局的FormTask Instance 终结评价器,用于告诉引擎该实例是否可以结束。如果没有设置,引擎使用缺省实现DefaultFormTaskInstanceCompletionEvaluator

toolTaskInstanceCompletionEvaluator:本流程全局的ToolTask Instance 终结评价器,用于告诉引擎该实例是否可以结束。如果没有设置,引擎使用缺省实现DefaultToolTaskInstanceCompletionEvaluator

subflowTaskInstanceCompletionEvaluator:本流程全局的SubflowTask Instance 终结评价器,用于告诉引擎该实例是否可以结束。如果没有设置,引擎使用缺省实现DefaultSubflowTaskInstanceCompletionEvaluator

 

主要方法:

findWFElementById(): 通过ID查找该流程中的任意元素。

findSnById(): 通过Id查找任意元素的序列号。

validate(): 验证workflow process是否完整正确。

isReachable(): 判断节点可达性。

isInSameLine(): 判断两个Activity是否在同一个执行线上。

getReachableNodes(): 获取可达的节点集合。

getEnterableNodes(): 获取当前可流入的节点集合。

 

DataField:流程变量。

 

前七个变量为数据类型。

dateType: 数据类型。

initialValue: 初始值。

dataPattern: 数据格式。目前主要用于日期类型。

 

TaskRef任务引用。用于Activity引用全局的Task 

 

referencedTask:被引用的Task

 

这个包的其他部分下次再讲。