`
z7swf
  • 浏览: 186000 次
社区版块
存档分类
最新评论

OSWorkflow之一——初步印象

 
阅读更多

OSWorkflow不是一种开箱即用的工作流解决方案,要想让OSWorkflow能更好的为我们服务,我们还需要做一些编码相关的工作,因此他可以很灵活的实现各种各样的复杂流程。你可以把这看做是OSWorkflow的优点,但作为优点的同时,这也是他的缺点,因为也许这样额外的工作并不是你想要的,你可能需要一些相对简单一点的工作方式,这就需要大家自己去权衡啦!

 

我们准备使用Spring的相关特性,也许还有Hibernate,所以我们探讨的重点会放在这些方面。

 

初步印象

OSWorkflow是通过XML来完成流程的定制化的。下面是一个流程定义的例子,让我们先建立一个初步的印象。

 

图1:

example.xml

 

从这张图上,我们能看到一个流程的原型:一个流程(workflow)我们可以定制他的初始行为(initial-actions ),他包括哪些步骤(steps ),每个步骤下面我们还可以有很多行为(actions ),这些行为他可以有自己的约束条件(restrict-to ),同时我们还看到了一些前置(pre-functions )或者后置处理(post-functions ),每个行为(action)也都有自己的结果(results ),当所有步骤都结束时,这个流程的生命周期也就结束啦。当然我们还可以定义多个流程,就像这样:

 

图2:

workflows.xml

 我们可以定义多个像图1那样的流程文件,像图2所示的那样定义到workflows元素中去。

 

OSWorkflow流程的流转

  1. 建立一个workflow(流程)时,我们需要指定workflow的名称(如图2中的“example”),这是因为我们可以定义很多个workflow的规则,各个不同的workflow之间,OSWorkflow通过workflow的name来区别。这样,我们一个name=example的workflow的一个实例就被创建了。
  2. 任何一个workflow启动时,都需要有一个initialAction(初始行为)。当workflow被建立时,这个initialAction将会根据自身的配置规则来判断是否可以被执行,当条件都满足时initialAction将被执行。
  3. initialAction执行后workflow会来到一个初始step(步骤),一个workflow是由多个step组成的,他就像是一个状态机,有自己的stepId和status。但是step本身是一种静态的描述,他自己并不会流转,一个step向另一个step流转是通过action(动作行为)来完成的。

我们通过一个简单的例子来更深入的了解和学习OSWorkflow,并构建我们自己的工作流引擎。

 

从一个简单的流程定义开始:

example.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
<workflow>
	<initial-actions>
		<action id="100" name="Start Workflow">
			<pre-functions>
				<function type="class">
					<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
				</function>
			</pre-functions>
			<results>
				<unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/>
			</results>
		</action>
	</initial-actions>
	<steps>
		<step id="1" name="First Draft">
			<actions>
				<action id="1" name="Finish First Draft">
					<pre-functions>
						<function type="beanshell">
							<arg name="script">
                                String caller = context.getCaller();
                                propertySet.setString("caller", caller);
                                boolean test = true;
                                String yuck = null;
                                String blah = "987654321";
                                System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
                            </arg>
						</function>
					</pre-functions>
					<results>
						<unconditional-result old-status="Finished" status="Finished" step="-1"/>
					</results>
					<post-functions>
						<function type="spring">
							<arg name="bean.name">myFunction</arg>
						</function>
					</post-functions>
				</action>
			</actions>
		</step>
	</steps>
</workflow>

 

workflows.xml

<workflows>
    <workflow name="example" type="resource" location="example.xml"/>
</workflows>

 我们可以在workflows元素中定义多个workflow,这里我们只有一个example.xml

 

osworkflow.xml

<osworkflow>
    <persistence class="com.opensymphony.workflow.spi.memory.MemoryWorkflowStore"/>

    <factory class="com.opensymphony.workflow.loader.XMLWorkflowFactory">
        <property key="resource" value="workflows.xml" />
    </factory>
</osworkflow>
  

 osworkflow.xml是OSWorkflow的基础配置,我们之前的配置文件,最后通过WorkflowFactory的resource关联起来了。

 

认识Configuration

Configuration接口有两个实现类,分别是DefaultConfiguration和SpringConfiguration,我们打算使用Spring的相关特性,我们就从SpringConfiguration说起。

 

图3:

我们看Configuration接口,会不会有一种似曾相识的感觉,尤其是看SpringConfiguration中的factory和store,怎么看都和osworkflow.xml中的factory、persistence如此相似,这不就是osworkflow.xml的定义嘛!

 

WorkflowFactory

WorkflowFactory接口定义了一些常用的关于Workflow的增删改查操作,可以说他掌握了Workflow的生杀大权。

 

图4:

 

上图是我们将会重点关注的一些类的定义,因为他们和Spring的关系比较密切,WorkflowFactor的族谱其实要丰富得多。不难看出,XMLWorkflowFactory基本上完成了WorkflowFactory接口的所有实现,而SpringWorkflowFactory只新引入了一个resource属性,用来保存workflows.xml文件的路径,看来如果通过XML的方式定义流程,XMLWorkflowFactory才是幕后的支持者。

 

WorkflowStore

WorkflowStore接口里定义了workflow实例持久化相关的操作。在OSWorkflow中一共定义了两个AbstractHibernateWorkflowStore抽象类及其对应的实现,用来支持不同版本的hibernate。一个在hiberna包中,一个在hibernate3包中。所以在使用过程中,我们要注意他们的完整类名。这里主要介绍的是hibernate3的相关支持。

AbstractHibernateWorkflowStore有两个子类,分别是HibernateWorkflowStore和SpringHibernateWorkflowStore,其中前者是单一的hibernate3的实现,而后者是在Spring下的hibernate3实现。


图5:

上图中还列出了JDBCWorkflowStore的相关实现,这也是OSWorkflow给我们的最早的WorkflowStore实现,我们可以根据情况选择使用。

 

 

对比WorkflowStore和WorkflowFactory两个接口,好像他们都是对workflow进行增删改查操作,但他们是不同的。WorkflowFactory中引入了一个WorkflowDescriptor类,而WorkflowStore中则是强调WorkflowEntry类。WorkflowDescriptor他是workflow关于XML描述的类型定义,OSWorkflow把定义在XML中的流程,根据DTD文件中定义好的各种XML元素,抽象出了很多种Descriptor(后面介绍),WorkflowFactory则针对的是WorkflowDescriptor。

XML中定义的流程只是一种Descriptor,他是这个流程的蓝图,而WorkflowEntry则是流程的一个个实例。如果我们定义了一个关于文件审批的流程,若干个文件在这个审批流程的生命周期中审批,他们每一个文件都会对应着这个流程的一个实例,WorkflowStore则是负责WorkflowEntry的CRUD工作。

 

至此,我们分析了Configuration、WorkflowFactory、WorkflowStore他们各自的职业以及他们三者的关系。

Configuration:与osworkflow.xml对应,同时定义了WorkflowFactory和WorkflowStore;

WorkflowStore:负责workflow实例的CRUD工作;

WorkflowFactory:创建和管理WorkflowDescriptor,是我们流程的发源地。

 

应用集成

 

<bean id="workflowStore"
		class="com.opensymphony.workflow.spi.hibernate3.SpringHibernateWorkflowStore">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<bean id="workflowFactory"
		class="com.opensymphony.workflow.spi.hibernate.SpringWorkflowFactory"
		init-method="init">
		<property name="resource">
			<value>workflows.xml</value>
		</property>
		<property name="reload">
			<value>false</value>
		</property>
	</bean>

	<bean id="osworkflowConfiguration" class="com.opensymphony.workflow.config.SpringConfiguration">
		<property name="store">
			<ref local="workflowStore" />
		</property>
		<property name="factory">
			<ref local="workflowFactory" />
		</property>
	</bean>
 

 

 

  • 大小: 72.2 KB
  • 大小: 15 KB
  • 大小: 43.7 KB
  • 大小: 95 KB
  • 大小: 101.7 KB
分享到:
评论

相关推荐

    OSWorkflow之三——workflow的推动者Action

    在这个主题“OSWorkflow之三——workflow的推动者Action”中,我们将深入理解如何使用Action来驱动workflow的执行,以及它在工作流中的核心作用。 Action在OSWorkflow中扮演着至关重要的角色,它是流程状态转换的...

    OSWorkflow——请假审批系统(代码全,数据库mysql)

    "OSWorkflow——请假审批系统(代码全,数据库mysql)" 指的是一个基于OSWorkflow工作流引擎实现的请假审批系统,该系统完整地提供了代码和数据库脚本,且数据库部分使用MySQL作为后台存储。 **描述解析:** 虽然描述...

    OSWorkflow

    OSWorkflow

    OSWorkFlow

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

    osworkflow

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

    osworkflow的一个例子

    一个osworkflow的例子,其实就是官方的例子,只是除了是汉化的外我还把在jsp中的Java代码提取到一个单独的类中,这样便于阅读和理解。希望对大家有帮助。

    OSWorkflow中文手册 OSWorkflow中文手册

    OSWorkflow是一款开源的工作流引擎,主要用于管理应用程序中的复杂业务流程。这款工具提供了强大的工作流建模、执行和跟踪功能,让开发者能够灵活地定义和控制应用程序的流程逻辑。本手册是OSWorkflow的中文版,旨在...

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

    **OSWorkflow中文版帮助文档错误纠正.doc** 可能是一个文档,记录了原英文版帮助文档的翻译错误或不准确之处,对中文用户来说是个宝贵的参考,可以避免因误解文档而产生的问题。 **OSWorkflow扩展讲解.doc** 可能...

    osworkflow2.8

    OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程管理。这个"osworkflow2.8"版本是OSWorkflow的一个特定发行版,包含了一整套用于设计、执行和管理工作流程的工具和资源。下面我们将...

    OsWorkflow工作流实例

    OsWorkflow是一款开源的工作流引擎,它为应用程序提供了一种灵活且可扩展的方式来管理业务流程。在本实例中,我们将深入探讨OsWorkflow的核心概念、主要功能以及如何创建和测试一个工作流实例。 工作流引擎是软件...

    Osworkflow10份资料

    JPetStoreOSGI.rar Mytestworkflow.rar Osworkflow持久化.doc Osworkflow的介绍.doc osworkflow配置与demo.rar osworkflow中文开发指南.rar OSWorkflow中文手册OSWorkflow-chinese-...用osworkflow写一个请假例子.rar

    osworkflow指导文档 + 源码

    osWorkflow 是一款开源的工作流引擎,主要用于处理业务流程中的各种工作流逻辑。它提供了一种灵活的方式来定义、控制和执行复杂的业务流程,允许开发者在不修改代码的情况下改变流程。本指导文档结合源码将深入解析 ...

    osworkflow_bundle2

    OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程。"osworkflow_bundle2" 是一个专门用于学习 OSWorkflow 的示例集合,它包含了一系列的资源和实例,帮助用户理解并掌握如何使用这个...

    OsWorkflow

    OsWorkflow 是一个基于Java的工作流引擎,主要用于设计和执行复杂的业务流程。这个项目是一个请假申请的工作流示例,其中流程的定义完全存储在XML文件中,这样可以方便地进行流程的配置和更改,无需修改源代码。对于...

    osworkflow学习笔记

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

    工作流引擎(osworkflow) 2.80

    工作流引擎(osworkflow) 2.80 是一个开源的工作流管理系统,专为处理复杂的业务流程自动化而设计。OSWorkflow 提供了一种灵活的方式,使开发者能够定义、执行和管理组织内部的工作流程。这个版本包括了示例项目和...

    Osworkflow 入门级例子

    Osworkflow 是一个开源的工作流引擎,它为应用程序提供了一种灵活的方式来管理业务流程。这个入门级的例子将带你了解 Osworkflow2.8 的基本概念和如何在项目中简单地实现工作流。 Osworkflow 提供了一个强大的框架...

    OSWorkflow源码及电子书

    OSWorkflow,全称为OpenSymphony Workflow,是一款轻量级、高度灵活的开源工作流引擎,专为满足各类组织和企业的工作流程管理需求而设计。它提供了丰富的API和配置选项,使得开发者可以轻松地将工作流集成到自己的...

Global site tag (gtag.js) - Google Analytics