`
j2eemaster
  • 浏览: 9050 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

网摘 OSWorkflow源码分析

阅读更多
 OSWorkflow的关键包组成:

-          com.opensymphony.workflow

-          com.opensymphony.workflow.config

-          com.opensymphony.workflow.loader

-          com.opensymphony.workflow.query

-          com.opensymphony.workflow.spi

这些包涵盖了OSWorkflow的使用、配置、流程定义、查询和运行时等方面内容。本节介绍这几个包,对于其他的包不涉及OSWorkflow的核心,在此不作介绍。

com.opensymphony.workflow

 

这个包负责与使用者的大部分交互,它定义了最常用的接口、类和异常。其中与用户使用密切相关的接口:WorkflowWorkflowContextValidatorRegisterFunctionProviderCondition

Workflow接口是一个Façade,通过与它交互,使用者几乎可以完全使用OSWorkflow的功能。包括:工作流使用和查询、工作流定义管理和设置工作流配置信息等。而ValidatorRegisterFunctionProviderCondition提供用户自定义功能的机会,它们与用户具体定义的工作流相关,当用户定义的工作流被激活之后,这些接口的实现,也会在合适的时机被Workflow接口调用。

在这个包中,提供了关于Workflow的抽象实现:AbstractWorkflow,它也是OSWorkflow中其他工作流类的基类。这个类的实现特点是,将实际操作的方法转交给合适的类或接口,它只负责将多个有机的操作集中在一起,给用户呈现一个调用接口。如对于query方法的实现,就是直接将query的实际执行交给了WorkflowStore。这样做最大的好处是:分工明确,简化扩展。如果要改变Workflow的行为,除非是Workflow没有提供的功能(即方法),只需扩展(或实现)那些类(或接口)就可以了,而不需要从整个AbstractWorkflow开始扩展。如关于Workflow的持久化机制,OSWorkflow附带的实现类,基本都是实现WorkflowStore,而非Workflow

AbstractWorkflow的关键方法简要说明:

1.         initialize,初始化工作流实例,并改变工作流实例的状态,将工作流实例的状态信息持久化。

2.         doAction,外部触发工作流实例进行状态改变,主要的算法:。

-          工作流实例的状态是否是actived

-          如果是,那么获取指定的action(在全局和当前的step集合的action集合中)。

-          执行状态转换。

-          如果工作流实例没结束,检查工作流是否隐式结束,是的话则结束工作流实例。

在整个过程中,如果有异常流程实例状态信息就回滚。

3.         transitionWorkflow,执行工作流的状态改变,返回值如果是true表示工作流实例结束。这是AbstractWorkflow的核心方法,initializedoAction都调用这个方法来改变工作流实例的状态。主要的算法:

-          如果actionvalidator个数>0,那么就执行那些validator

-          如果有step,执行steppost-functions。(对于初始化,没有Step

-          执行当前actionpre-functions

-          如果有满足条件的condition result,那么获取condition result(如果validator个数>0就执行、获取对应的prepost functions)。

-          如果没有满足条件的condition result,那么获取unconditional result。(如果validator个数>0就执行、获取对应的prepost functions

-          执行resultpre function

-          如果result中有split,那么执行split。获取splitresult(如果validator个数>0就执行、获取对应的prepost functions),并创建新步。执行split resultpre-functions,创建新步,执行split resultpost-functions

-          如果result中有join,那么在当前和历史步骤中查看符合定义的step。并在transientVars中把join steps加入,键值为"jn"。如果joinconditionstrue,获取result(如果validator个数>0就执行、获取对应的prepost functions),执行join resultpre-functions,结束其他join stepcreate new step和执行join resultpost function

-          如果result中不含splitjoin,创建新步。

-          执行resultpost functions

-          执行actionpost functions

-          如果是initializeaction,那么如果流程实例状态不是activated,就改变成activated

-          如果actionfinished属性为true,标记工作流显式结束,并返回true

-          如果当前新步骤有auto action可用,执行它们。返回false

4.         checkImplicitFinish,判断流程实例是否隐式结束。如果流程实例当前step集合的action集合大小为0,就把所有当前的step集合移入历史,并结束流程实例。

5.         createNewCurrentStep,创建新步。将resultold-status赋给当前步骤,结束当前步骤使之成为历史。用status作为新步的值,执行新步的pre functions

6.         populateTransientMap,创建TransientMap。内容包括:contextentrystoredescriptoractionIdcurrentSteps。同时根据register的类型,加载对应的register实现类,并调用相应的register的创建对象的方法,并将他放入mapkey就是register的名字。

 

 

 

关于其他的方法,由于比较简单,请参见api docs或对应的源码文件。AbstractWorkflow是抽象基类,OSWorkflow提供了几个具体的子类:BasicWorkflowOfbizWorkflowWorkflowEJB

WorkflowContext提供了Workflow的上下文环境,在2.7中,它只包含2个方法:getCaller获取工作流实例调用者的信息,用于权限判断;setRollbackOnly,回滚工作流状态信息。对应的实现:BasicWorkflowContextEJBWorkflowContext。从BasicWorkflowContext可以看出,BasicWorkflow不具备事务的功能。

 

 

 

com.opensymphony.workflow.config

 

这个包与OSWorkflow的配置相关,定义了配置接口和一些基本实现。此处所说的配置是指,针对OSWrokflow的环境配置,这些配置项已经在Configuration接口中体现,如持久化机制、持久化属性集合等。而不是用户定义的工作流描述文件。在AbstractWorkflow中,获取配置信息,以及配置组件,都是使用Config接口来完成的。

在这个包中,3java文件。其中Configuration定义了配置的接口,而DefaultConfigurationSpringConfiguration是它的实现。对于这2个实现类,它们的基本思路都是:创建AbstractWorkflowFactory,然后将必要的操作(如获取WorkflowDescriptor)转发给这个factory实例。

DefaultConfiguration中最关键的方法就是load,它主要目的就是加载配置文件,并初始化Factory。主要的算法:

-          打开配置文件,如果不指定配置文件,就使用osworkflow.xml

-          如果在配置文件中没有指定factory,那么就使用默认的URLWorkflowFactory

-          如果在配置文件中指定了factory,那么实例化它。并使用Factory的属性对它进行初始化。

SpringConfiguration,负责与spring的集成。关于与Spring的集成,请参见http://wiki.opensymphony.com/display/WF/2.3+Spring+framework

 

 

 

com.opensymphony.workflow.loader

 

这个包与工作流定义密切相关,包含了与工作流定义中对应元素的java类,相关的factory类和一些工具类。

AbstractDescriptor是所有xml元素对应java类的基类,它的定义的方法比较简单:设置/获取ID,设置/获取父元素和是否有ID。这些都是xml元素对应java类所必需的。在这个包中,以Descriptor结尾的类,就是xml元素对应java类。这些java类都包含2个方法:writeXML,负责将类转换成为对应的xml描述;init,使用xml元素来初始化类。对于包含子元素的元素还实现了Validatable接口,实现validate方法,对元素进行验证有效性。注意:Descriptor类并不是和工作流定义的DTD

分享到:
评论

相关推荐

    OSWorkflow源码及电子书

    总之,OSWorkflow源码及电子书的资源集合,对于那些希望深入理解并使用工作流技术的开发者来说,是一份不可多得的学习材料。它涵盖了从基础到高级的各个方面,无论你是初学者还是经验丰富的开发者,都能从中受益。

    画流程图的例子(源码)OsWorkFlow.rar

    在本文中,我们将深入探讨如何利用OsWorkFlow来创建和管理流程图,并通过源码分析,理解其实现原理。 首先,我们要了解OsWorkFlow的基本概念。工作流引擎是负责执行工作流定义的软件,它能够处理工作流实例的生命...

    OSWorkflow工作流程源码(JAVA/JSP)

    源码分析 - **osworkflow-2.7.0.jar**: 这是OSWorkflow的主要库文件,包含了所有核心类和接口,如`com.opensymphony.workflow.Workflow`、`com.opensymphony.workflow.query.Query`等。 - **osworkflow数据库配置...

    osworkflow源码

    源码分析可以帮助我们更好地理解和定制这些应用场景,提升工作效率。 总的来说,osWorkflow 源码的学习涵盖了工作流管理的关键技术,包括工作流定义、实例化、执行和监控等,对于想要深入理解工作流引擎的开发者来...

    osworkflow指导文档 + 源码

    ### 四、osWorkflow 源码分析 源码中包含了 osWorkflow 的核心组件,如 WorkflowEngine、WorkflowDefinition、PersistenceManager 等。通过阅读源码,我们可以了解其内部实现细节,如: - 如何解析 XML 流程定义...

    OSWorkflow

    OSWorkflow

    osworkflow-2.7.0.zip

    5. **src**:源代码目录,可能包含了osworkflow的示例代码或者部分库的源码,对于想要深入理解osworkflow内部机制或者想要对其进行扩展的开发者来说,这是一个宝贵的学习资源。 6. **lib**:依赖库目录,包含了...

    osworkflow 请假系统源码

    在“osworkflow 请假系统源码”示例中,osworkflow被用来实现请假流程,具体包括以下几个关键环节: 1. **请假申请**:员工发起请假请求,填写请假条,osworkflow将这一操作作为流程的开始。 2. **提交申请**:...

    OSWorkFlow

    OSWorkFlow是一个基于Java的工作流引擎,用于在企业级应用中实现复杂的业务流程自动化。它提供了灵活的流程定义和执行模型,使得开发者可以方便地设计、实施和管理各种工作流。下面将详细介绍OSWorkFlow的核心概念、...

    OSWorkflow-2.8.0

    OSWorkflow-2.8.0 是一个开源的工作流引擎,主要应用于Java开发环境中。这个版本的OSWorkflow是在其官方网站上下载的,遗憾的是,现在该官网已经关闭,使得获取更新和文档变得更加困难。不过,这个安装包是经过修改...

    OSWorkflow中文手册 OSWorkflow中文手册

    OSWorkflow提供日志记录和审计功能,便于跟踪流程实例的详细执行历史,帮助分析流程性能和异常情况。 7. **持久化机制** 为了保证流程数据的可靠性,OSWorkflow支持多种持久化策略,如JDBC存储、Hibernate集成等...

    osworkflow中文入门指南,osworkflow+hibernate+spring集成配置,osworkflow-2.8.0.jar

    **osworkflow** 是一个开源的工作流管理系统,专为Java应用程序设计,用于管理复杂的工作流程。在本入门指南中,我们将深入探讨如何使用osworkflow,并将其与流行的数据持久化框架Hibernate和依赖注入容器Spring进行...

    osworkflow-canvas-master_nginx_源码.rar

    标题中的"osworkflow-canvas-master_nginx_源码.rar"表明这是一个关于osWorkflow Canvas与Nginx服务器相关的源代码压缩包。osWorkflow是一个开源的工作流管理系统,用于管理业务流程,而Nginx则是一款高性能的HTTP和...

    osworkflow

    **osWorkflow 概述** osWorkflow 是一个开源的工作流管理系统,专为 Java 应用程序设计,用于处理复杂的业务流程。这个系统的核心功能是管理、跟踪和执行一系列步骤,这些步骤构成了一个工作流程。osWorkflow 提供...

    JBPM、OSWORKFLOW分析报告

    【JBPM与OSWORKFLOW分析报告】 JBPM与OSWORKFLOW是两个在企业级工作流管理系统领域广泛应用的开源框架,它们为企业提供了强大的流程自动化和管理能力。本分析报告将深入探讨这两个工具的核心特点、工作原理以及各自...

    osworkflow2.8

    解压缩 "osworkflow2.8.rar" 文件后,通常会包含源码、文档、示例和库文件。开发者需要根据项目需求进行配置,将OSWorkflow集成到应用中,这可能涉及到添加依赖、配置数据库连接以及初始化工作流表。 4. **API ...

    osworkflow学习笔记

    通过osworkflow项目的学习和实践,总结出的一套osworkflow工作流引擎的学习笔记,供需要使用osworkflow系统的同学们借鉴,谢谢!

    Osworkflow10份资料

    OSWorkflow中文手册OSWorkflow-chinese-manual-2.8.pdf Packt.Publishing.OSWorkflow.A.Guide.for.Java.Developers.and.Architects.Aug.2007.pdf 工作流普及风暴—基础概念.doc 用osworkflow写一个请假例子.rar

    OSWorkFlow分析

    OSWorkflow沒辦法寫出那種一目瞭然的程式,但是我仍盡量將程式簡化,希望初學者能在看完這第一支程式後, 就能有所體會

Global site tag (gtag.js) - Google Analytics