`
mabusyao
  • 浏览: 252575 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

简单工作流引擎

 
阅读更多

从公司的一个项目中挖出来的工作流引擎的代码,虽然是一个很简单的模型,但却包含了不凡的思想。 对于数据流处理的代码来说,这样的结构有助于将来的维护和扩展。

 

使用起来也很简单,继承相应的step,实现业务逻辑,并在启动加载的时候将所有的step拼装起来就可以了。

 

代码很简单,直接贴出来给大家看了:

 

public interface FlowStep {
	/**
	 * Executes the flow step
	 * @param context flow process context
	 * @return next step of the flow
	 * @throws Exception
	 */
	FlowStep execute(FlowProcessContext context) throws Exception;
}



public abstract class ActionHandler implements FlowStep, Serializable{
	private static final long serialVersionUID = 3539748171790564148L;
	
	private FlowStep nextStep;

	public void setNextStep(FlowStep nextStep) {
		this.nextStep = nextStep;
	}

	public FlowStep execute(FlowProcessContext context) throws Exception {
		run(context);
		
		return nextStep;
	}


	/**
	 * Executes action
	 * @param context flow process context
	 * @throws Exception
	 */
	abstract protected void run(final FlowProcessContext context) throws Exception;
}


public abstract class DecisionHandler implements FlowStep {
	private Map<DecisionResult, FlowStep> nextSteps = new HashMap<DecisionResult, FlowStep>();
	
	public abstract DecisionResult decide(final FlowProcessContext context);

	public FlowStep execute(FlowProcessContext context) throws Exception {
		DecisionResult decisionResult = decide(context);
		
		FlowStep nextStep = nextSteps.get(decisionResult);
		if (nextStep == null) {
			String decisionName = this.getClass().getName();
			throw new DecisionException("[" + decisionName + "] No next step declared for decision result: " + decisionResult);
		}
		
		return nextStep;
	}
	
	public void setNextStep(DecisionResult decisionResult, FlowStep flowStep) {
		nextSteps.put(decisionResult, flowStep);
	}
}


public enum DecisionResult {
	TRUE, FALSE;
}


public class DecisionException extends Exception {
	private static final long serialVersionUID = 208284968147596718L;

	public DecisionException() {
		super();
	}

	public DecisionException(String message, Throwable cause) {
		super(message, cause);
	}

	public DecisionException(String message) {
		super(message);
	}

	public DecisionException(Throwable cause) {
		super(cause);
分享到:
评论
1 楼 winie 2013-04-02  
整理下  搞成引擎嘛 国产需要这样的engine

相关推荐

    Java自己开发的一个工作流引擎例子

    最近项目中需要使用到工作流,然后上网搜到一个大神用Javascript写的一个工作流,感觉写的很屌。...我觉得代码很有学习参考价值,所以上传到这里,希望对大家有些帮助,里面附上html文件是Javascript写的工作流引擎!

    几种开源工作流引擎的简单比较

    开源工作流引擎的比较 开源工作流引擎是指使用开源许可证的工作流引擎,它们通常具有灵活、可扩展、可定制等特点。目前市场上有多种开源工作流引擎,下面我们将比较其中几种流行的开源工作流引擎。 1. JBPM JBPM...

    基于UliWeb框架的uliweb-redbreast简易工作流引擎设计源码

    该项目是利用UliWeb框架开发的简易工作流引擎源码,由73个文件构成,其中包括46个Python源文件、8个HTML文件、5个规格说明文件、4个配置文件、2个Git忽略文件、2个Markdown文件、1个许可证文件以及1个CSS样式表文件...

    工作流解析工作流解析

    本文主要探讨了如何利用Spring框架实现简单工作流,将Spring作为一个轻量级的工作流引擎。工作流在许多J2EE应用程序中扮演着重要角色,尤其在处理后台任务和流程控制时。Spring容器通过控制反转(IoC)和依赖注入...

    JWFDv0.96开源工作流引擎设计

    JWFDv0.96是一个开源的工作流引擎设计,其核心目标是通过自定义的流程拓扑数学模型和一系列SQL-API原子操作函数,构建一个流程自动运行控制器。该控制器负责用户对流程实例的操控,使得流程自动化运行,减少了人为...

    基于自研的流程设计器 + 自研后端Java工作流引擎,组成了一套纯JSON数据交互的自研工作流引擎系统 +工作流管理系统

    JsonFlow工作流基于自研的流程设计器 + 自研后端Java工作流引擎,组成了一套纯JSON数据交互的自研工作流引擎系统 + 工作流管理系统。本系统无论前端还是后端,其学习成本明显低于开源工作流引擎及附带流程设计器,...

    js工作流引擎代码实例

    在这个"js工作流引擎代码实例"中,我们可以看到一个具体的工作流引擎实现,尽管描述中提到还没有详细研究,但我们可以探讨一下工作流引擎的基本概念和JavaScript实现的关键点。 工作流引擎的核心功能包括: 1. **...

    jbpm工作流引擎介绍.ppt

    总之,jbPM作为一个强大的工作流引擎,以其简易的JPDL语言、灵活的运行模式和丰富的工具集,为企业提供了一种有效管理业务流程的解决方案。通过与Dorado等前端应用的整合,jbPM可以实现高效、直观的业务流程自动化,...

    用C#开发的工作流引擎

    在IT领域,工作流引擎是一种用于自动化业务流程的软件组件,它能够根据预定义的规则和逻辑来管理和驱动任务的执行。在这个“用C#开发的工作流引擎”项目中,我们将深入探讨C#编程语言如何被用来构建这样一个复杂的...

    基于Java的轻量级工作流引擎,适用于企业应用中常见的业务流程

    Snaker是一个基于Java的轻量级工作流引擎,适用于企业应用中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持。snaker-core.jar大小208K,代码行数约7000行,强大的扩展支持,不依赖于...

    轻量级工作流引擎的设计与实现

    《轻量级工作流引擎的设计与实现》是一篇深度探讨工作流引擎技术的文献,尤其适合在设计阶段作为指导。工作流引擎是自动化业务流程的关键工具,它在各种规模的企业和组织中扮演着不可或缺的角色。本文主要关注轻量级...

    工作流引擎Activiti

    工作流引擎Activiti的介绍和简单的例子

    低耦合智能分布式工作流引擎的设计.pdf

    工作流引擎是工作流管理系统的核心组件,它主要负责管理业务流程的自动化执行,确保不同参与者根据既定的流程和原则进行信息传递和任务自动执行。当前在业界普遍采用的集中式工作流引擎存在一些不足,尤其是在异构...

    Activiti6.0工作流引擎springboot项目代码

    Activiti作为一个工作流引擎,可以处理从简单审批流程到复杂的业务流程的多种场景。 3. **流程体验**: 使用Activiti,开发者可以通过流程定义语言(BPMN 2.0)设计流程图,直观地表示出任务之间的关系和流转逻辑...

    工作流模型分析建模,说明工作流引擎的几种模型

    工作流引擎是实现这些模型的核心工具,它能够根据预定义的规则和流程执行任务,提高工作效率。在这个主题中,我们将深入探讨工作流引擎的几种主要模型。 1. **顺序模型**:这是最基础的工作流模型,任务按照预定的...

    Java开源工作流引擎.pdf

    Java开源工作流引擎 Java开源工作流引擎是指使用Java语言开发的开源工作流引擎系统,这些系统可以帮助企业或组织自动化业务流程,提高工作效率和效率。以下是多种Java开源工作流引擎的简介: 1. Willow:Willow是...

    什么是工作流引擎,工作流引擎功能介绍

    工作流引擎是应用系统的核心组件,它专注于管理和执行业务流程,根据不同的角色、分工和条件来确定信息的传递路径和内容优先级。在系统开发中,工作流引擎扮演着至关重要的角色,因为它的主要任务是确保程序逻辑符合...

    activiti工作流引擎

    Activiti工作流引擎是一款强大的、开源的企业级流程自动化平台,被广泛用于构建业务流程管理系统(BPM)。在本文中,我们将深入探讨Activiti的核心概念、如何在IntelliJ IDEA(简称IDEA)环境下进行开发,以及与...

    工作流引擎研究

    工作流引擎是现代企业信息化系统的关键组成部分,它们负责管理和驱动基于特定规则和流程的业务操作。本文主要探讨了工作流引擎的重要性和几个主流的开源工作流引擎,包括Shark、Osworkflow和Jbpm。 工作流引擎的...

    基于Spring创建工作流引擎.doc

    【基于Spring创建简单工作流引擎】 在Java企业级应用中,Spring框架因其轻量级、灵活的特性,常被用来创建高效的工作流程。工作流引擎是处理一系列有序任务的工具,尤其适合那些需要按特定顺序执行且无用户交互的...

Global site tag (gtag.js) - Google Analytics