从公司的一个项目中挖出来的工作流引擎的代码,虽然是一个很简单的模型,但却包含了不凡的思想。 对于数据流处理的代码来说,这样的结构有助于将来的维护和扩展。
使用起来也很简单,继承相应的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);
分享到:
相关推荐
最近项目中需要使用到工作流,然后上网搜到一个大神用Javascript写的一个工作流,感觉写的很屌。...我觉得代码很有学习参考价值,所以上传到这里,希望对大家有些帮助,里面附上html文件是Javascript写的工作流引擎!
JsonFlow工作流基于自研的流程设计器 + 自研后端Java工作流引擎,组成了一套纯JSON数据交互的自研工作流引擎系统 + 工作流管理系统。本系统无论前端还是后端,其学习成本明显低于开源工作流引擎及附带流程设计器,...
工作流引擎Activiti的介绍和简单的例子
c#开发的工作流引擎,简单好用,已在业务系统中使用。
Snaker是一个基于Java的开源工作流引擎 Snaker工作流引擎本着轻量、简单、灵巧理念设计
对jwfd v0.96引擎设计的描述 org.jwfd.workflowDesigner.FLCLs.Gxl.GxlToDatabase.java org.jwfd.workflowDesigner.FLCLs.Gxl.JgraphGxlCodec.java org.jwfd.workflowDesigner.FLCLs.Gxl.ParserGxl.java
jBPM是一款基于LGPL开源协议的开源工作流产品,它没有 采用BPEL或WFMC标准去实现流程引擎;jBPM采用的是一 套自有标准,一种轻量级的XML结构的流程描述语言JPDL, JPDL是jBPM Process Definition Language的缩写...
jBPM是一款基于LGPL开源协议的开源工作流产品,它没有采用BPEL或WFMC标准去实现流程引擎;jBPM采用的是一套自有标准,一种轻量级的XML结构的流程描述语言JPDL,JPDL是jBPM Process Definition Language的缩写,相比...
工作流就是一系列相互衔接、自动进行的业务活动或任务...总结:以一个某省电信部门的物流信息系统为分析对象,确定该部门的组织结构和业务流程后最后确定工作流引擎系统应该具备的功能,以确定系统的主要模块,也简单介
TpFlow工作流引擎是一套规范化的流程管理系统,基于业务而驱动系统生命力的一套引擎。 彻底释放整个信息管理系统的的活力,让系统更具可用性,智能应用型,便捷设计性。 Tpflow团队致力于打造中国最优秀的PHP工作...
其中包括 程序分析、程序源代码、系统亮点、系统设计问题等。 希望对你学习C#和工作流用所帮助!
超级有用。
Snaker是一个基于Java的开源工作流引擎,适用于企业应用中常见的业务流程。本着轻量、简单、灵巧理念设计,定位于简单集成,多环境支持 轻量:核心代码行数大约7000行,强大的扩展性,支持Spring、Jfinal、Nutz...
基于企业级工作流引擎,基于Springboot+Vue3框架。拥有成熟的OA办公功能,自带低代码开发平台,支持零代码搭建模块,交付及维护更方便、更快捷。集成在线脚本设计器,可在线编写java代码,响应流程事件的处理,很...
snaker,是一款非常轻量级的国产工作流框架,这就好比权限控制框架spring security与shiro,前者是spring大厂,除了security外提供其他非常强大的框架,而shiro就相当简单,学习成本也低。因此,也就好比Jboss JBPM...
本文把spring作为简单工作流引擎,将它用在了更加通用的地方。在对工作流简单介绍之后,将要介绍在基本工作流场景中基于Spring的工作流API的使用。 许多J2EE应用程序要求在一个和主机分离的上下文中执行处理过程。...
工作流引擎Activiti是开源的工作流引擎,这是一份简单的使用总结,希望对大家有用。
Activiti是一个工作流引擎, activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由activiti进行管理,减少业务系统由于...
查询工作流资料和分析现有的工作流引擎软件,设计一套简单的工作流语言,并为语言建立解释和运行引擎,以支持工作流系统的开发和运行。
由OpensymPhony组织开发的开源工作流引擎 OSWorkflow是一种非常灵活的工作 流引擎。它主要基于有限状态机理论,通过状态的迁移描述工作的流转。每一种状态(state) 被描述成为 step ID和 status。从一种状态(state)...