最近结束了一个企业OA系统的项目,客户是一家海洋航运行业的企业,散运业务全球第一。该系统以工作流系统为基础平台,对员工工作进行电子化和规范化,由系统来驱动员工自动、快捷、可管地完成日常工作。在开发过程中,在综合评比多种工作流产品之后,我们选择了开源工作流产品——OSworkflow作为底层工作流引擎支撑,通过扩展OSworkflow的接口把业务系统和工作流引擎完美无缝地集成在一起。本文就是跟大家一起分享osworkflow扩展过程中的经验心得,希望能对其他朋友有帮助。
在我们开发团队介入系统开发过程之前,这个项目已经完成了 quickstart 阶段,留给我们的阶段产品有:系统实现的proposal、一个能体现用户page flow的lo-fi,以及在mingle上的 story list和iteration原始计划。当然,还有项目团队跟客户形成的一个良好的互信基础和沟通渠道。于是,左 proposal,右 lo-fi,客户沟通在中间,我们就开始了系统设计的 inception。inception阶段的目标根据不同项目会有不同。在这个系统里面,我们完成的目标有:确定系统实现使用的技术、针对技术进行 spike探讨可行性、结合master story以及比较粗略的story list实现一个系统prototype。好,工作开始了!
为什么选择OSworkflow?
工作流系统其实在理论界已经是研究得非常成熟了,有 WfMC 组织来规范工作流定义语言,而且各种工作流引擎,不仅商业产品,像 JBPM、OSworkflow、ofbiz等开源产品也都很多。这些产品都各有特点,应该如何选择呢?从使用率和文档完整度来看,JBPM 和 OSworkflow 占了上风,我们就从这两者里面选了。JBPM基于UML的状态图和活动图来定义流程,已经加入JBOSS大家庭,但是相对比较重。osworkflow是个非常轻量级的工作流产品,但是自从2006年就停止活动了。不管如何,选择的技术都是要为解决未来系统开发会面临的问题,才算是一个好的可行的选择。
通过分析quickstart阶段的proposal和lo-fi prototype,然后再反复跟客户确认,我们知道了客户在现阶段对系统的要求是:
- 只需要处理线性的工作流(未来可能需要增加对分支/合并的支持)
- 不需要功能复杂强大的工作流编辑器
- 节点流转主要是手工触发,不需要基于规则
- 需要能和遗留系统已有的工作流定义集成,而已有工作流定义用 osworkflow 定义
根据客户对系统的要求,我们选择了osworkflow作为最终的候选工作流引擎。因为我们对这几种工作流产品都不是很熟,对它们是否能满足系统要求答案不确定。而从另外一个方面来讲,如果系统足够简单,我们也可以自己实现一个状态机,自己实现对流程节点流转的维护。
为了做出选择,我们又分头对 osworkflow 的配置文件以及技术架构都进行了细致的研究。研究过程和结果就不细说了,网上有很多 OSworkflow 的介绍文章,大家可以参照。OSworkflow 会把一个简单的xml配置文件,转换成它定义的流程描述类(XXXDescriptor,我们也把它们称为osworkflow的models),然后在流转的过程中,将其转换成工作流实例和工作流节点,并通过相应的持久化接口持久化工作流的状态。整个过程用一个简图来表示,就会是:
图1 OSworkflow model
考虑到 OSworkflow 的实现也是非常轻量级,并且结构非常清晰,而且为了提供以后对分支/合并、以及自定义规则等流转形式的支持,我们还是选择了 OSworkflow,而不是自己去实现一个基于状态机的工作流引擎。但是,我们还不能直接把 OSworkflow 放进项目里面,然后直接引用:一方面我们不想让开发团队都纠缠于底层 OSworkflow 的技术细节,另外一方面也是因为 OSworkflow 并不能完全满足客户的系统要求。我们需要扩展!
为什么去扩展?
依然是问答模式,OSworkflow 有哪些方面不能满足我们系统的要求?
1. 系统对各个流程的定义都能有版本跟踪
客户会对流程定义进行修改,但是流程修改的过程中,流程应该继续按照原来的定义进行流转。这样,对于同一份流程,系统会同时存在两个不同的定义,并且都能正常流转。OSworkflow 基于XML文件的流程配置方式在这种情况下就不能满足。
2. 系统对流程定义的修改能实现“hot deploy”
客户对流程定义进行修改后,系统能自动提供给用户新的流程定义,而不需要重启服务器。因为 OSworkflow 是在系统启动的时候,将所有的流程定义都载入内存,在系统运行期不会去检测流程定义的修改。这样,OSworkflow 也不能满足。
3. 相对于系统的要求,OSworkflow 提供的功能还是太复杂了
因为 OSworkflow 是提供一个通用的工作流引擎,所以考虑了很多复杂的情况。这些复杂性对我们系统来讲,都是额外的不能对客户产生价值的特性,而且那些复杂性的存在,也会让我们开发的时候必须考虑到那些方面,从而影响我们的模型设计和开发。
除了上文提到的几个原因,我们考虑的因素还有很多方面,最终我们决定是在OSworkflow基础上进行扩展,来满足我们的要求。
如何进行扩展?
如何进行扩展?我们的原则是什么?没有一个清晰的目标,很可能最终扩展的方向和最终实现就会跟我们想要的目标离得比较远了。
原则一. DDD,MDA
我们希望开发团队在设计开发的过程中只需要考虑系统领域的模型,而不会 involve 到底层的流程流转细节。
“find core domain models”,我们重新研究了系统的 proposal 和 lo-fi prototype,找出系统里面的领域对象,它们之间存在这样的一个关系:
图2 系统model
从图1 OSworkflow model 关系图和图2 系统 model 关系图可以看出,它们两者还是存在着一定的相似点和不同点的。
相同点:
1. 相应 model 完成的功能和职责是非常类似的
2. 不同 model 之见的关系也是非常类似的
不同点:
1. model 的属性
2. model 的一些行为
原则二. decoupling
我们希望项目实现不依赖于某个工作流产品,而是可以很方便地迁移到其他的工作流产品。第一想法就是——“laying, isolate by interface”。
其实工作流产品除了工作流引擎负责流程节点流转之外,都另外包括这三部分:流程定义、定义解析和状态持久化。而成熟的工作流产品,不管是JBPM,还是 OSworkflow,都会提供接口进行隔离。在OSworkflow里面,接口WorkflowFactory会负责流程定义的解析和 OSworkflow models的初始化,接口WorkflowStore则负责将Workflow和WorkflowEntry的状态持久化。这样,我们就可以定制实现接口,将domain models转换成 OSworkflow models,在流程流转需要持久化流程状态的时候,则会去持久化domain models。
经过这样几个方面的论证和分析,得到的最终方案如下:
1. 使用domain model,而不是工作流model
2. 扩展接口将 domain model 转换成工作流 model
3. 扩展接口提供自定义的工作流状态持久化
4. 不改动 osworkflow 内核
最终实现
图3 系统实现图
我们得到了什么
1. 使用 domain model 进行开发
2. 底层工作流引擎对开发团队透明
3. 设计、优化工作在应用层次来进行
分享到:
相关推荐
OSWorkflow
**osworkflow** 是一个开源的工作流管理系统,专为Java应用程序设计,用于管理复杂的工作流程。在本入门指南中,我们将深入探讨如何使用osworkflow,并将其与流行的数据持久化框架Hibernate和依赖注入容器Spring进行...
OSWorkFlow是一个基于Java的工作流引擎,用于在企业级应用中实现复杂的业务流程自动化。它提供了灵活的流程定义和执行模型,使得开发者可以方便地设计、实施和管理各种工作流。下面将详细介绍OSWorkFlow的核心概念、...
OSWorkflow是一款开源的工作流引擎,主要用于管理应用程序中的复杂业务流程。这款工具提供了强大的工作流建模、执行和跟踪功能,让开发者能够灵活地定义和控制应用程序的流程逻辑。本手册是OSWorkflow的中文版,旨在...
**osWorkflow 概述** osWorkflow 是一个开源的工作流管理系统,专为 Java 应用程序设计,用于处理复杂的业务流程。这个系统的核心功能是管理、跟踪和执行一系列步骤,这些步骤构成了一个工作流程。osWorkflow 提供...
通过osworkflow项目的学习和实践,总结出的一套osworkflow工作流引擎的学习笔记,供需要使用osworkflow系统的同学们借鉴,谢谢!
**osWorkflow 指导文档 + 源码详解** osWorkflow 是一款开源的工作流引擎,主要用于处理业务流程中的各种工作流逻辑。它提供了一种灵活的方式来定义、控制和执行复杂的业务流程,允许开发者在不修改代码的情况下...
OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程。"osworkflow_bundle2" 是一个专门用于学习 OSWorkflow 的示例集合,它包含了一系列的资源和实例,帮助用户理解并掌握如何使用这个...
**osworkflow** 是一个强大的开源工作流引擎,主要用于在Java应用程序中实现业务流程管理。它提供了灵活的工作流定义,使得开发者能够轻松地设计和实施复杂的业务流程。osworkflow的最新和最全的资料集合,包括了...
OsWorkflow是一款开源的工作流引擎,它为应用程序提供了一种灵活且可扩展的方式来管理业务流程。在本实例中,我们将深入探讨OsWorkflow的核心概念、主要功能以及如何创建和测试一个工作流实例。 工作流引擎是软件...
OSWorkflow中文手册OSWorkflow-chinese-manual-2.8.pdf Packt.Publishing.OSWorkflow.A.Guide.for.Java.Developers.and.Architects.Aug.2007.pdf 工作流普及风暴—基础概念.doc 用osworkflow写一个请假例子.rar
OSWorkflow,全称为OpenSymphony Workflow,是一款轻量级、高度灵活的开源工作流引擎,专为满足各类组织和企业的工作流程管理需求而设计。它提供了丰富的API和配置选项,使得开发者可以轻松地将工作流集成到自己的...
OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程管理。这个"osworkflow2.8"版本是OSWorkflow的一个特定发行版,包含了一整套用于设计、执行和管理工作流程的工具和资源。下面我们将...
### OSWorkflow 2.8 知识点概览 #### 一、OSWorkflow 简介与特性 **OSWorkflow** 是一款灵活的工作流管理工具,适用于需要高度定制化流程的应用场景。它与大多数商用或开源工作流软件的不同之处在于其高度的灵活性...
Osworkflow 是一个开源的工作流引擎,它为应用程序提供了一种灵活的方式来管理业务流程。这个入门级的例子将带你了解 Osworkflow2.8 的基本概念和如何在项目中简单地实现工作流。 Osworkflow 提供了一个强大的框架...
OSWorkflow(OpenSymphony Workflow)是一个开源的工作流引擎,它提供了一种灵活的方式来设计、实施和管理业务流程。本篇文章将深入探讨OSWorkflow的工作原理及其应用实例。 OSWorkflow的核心概念包括工作流定义、...
工作流引擎(osworkflow) 2.80 是一个开源的工作流管理系统,专为处理复杂的业务流程自动化而设计。OSWorkflow 提供了一种灵活的方式,使开发者能够定义、执行和管理组织内部的工作流程。这个版本包括了示例项目和...
OSWorkflow 2.8 API 文档