打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

FireWorkflow的源代码主要 包含两个部分:FireflowEngine和FireflowModel,其中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:工作流任务。

前四个为工作流类型:

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

SUBFLOW:SUBFLOW类型,即子流程任务。

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

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

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

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:循环情况下任务执行策略,取值为REDO、SKIP和NONE。

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。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
工作流:形参,实参,相关数据
activiti5.4 流程引擎 表结构分析
INFORMATICA关于WORKFLOW Manager系统的元数据解析
工作流技术在银行系统中的应用
技术干货:基于Activiti5 定制化中国式工作流架构设计
如何在 SAP BTP 上 手动执行 workflow
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服