[原创]JWFD工作流引擎设计原理(JWFD v0.94 版本)


JWFD引擎设计思路是把一个工作流图看做一张拓扑图,按照图论中对图形的遍历来模拟流程的运行过程(请参考-清华大学出版的-数据结构(PASCAL或C语言版本都可以)教程第七章图),遍历一张图的过程就是工作流运行的过程(这个思路和状态机流程设计思路与其它引擎设计思路不完全一致),然后在图遍历过程中加入应用业务(比如表单和其它业务)的数据和其它控制方法(比如说时间流和统计),最终组成一个完整的应用型的工作流引擎

这是我04年的设计思路,比较原始,但是比较简洁,后来的复杂一些的引擎也是从这个设计开始起步的,对学习和理解工作流系统有比较大的帮助。。。。。

JWFD流程图的数据结构,请下载本文附件1(JWFD流程系统数据结构和设计文档,我采用的是MYSQL数据库),本文的介绍JWFD工作流系统的源代码在附件2中下载

在这里我就没有加入这些控制模块,如果你需要设计和开发一个比较具有实用价值的工作流引擎,请在理解本算法之后,自行添加



本类的唯一一个基础类是org.jwfd.workflowDesigner.UItools.Database.mysql.FlowsSqlControlModule.java

上述类中的方法是本类方法的基础控制单元,是基础模块,主要是用于对流程图的拓扑数据结构进行基本的SQL操作和管理的方法

JWFD引擎设计的算法原理-伪代码描述(要完全理解本算法,请一定参考清华大学《数据结构》教程中图论的广度优先遍历算法一章,另外请一定要理解算法中的递归方法,因为本算法使用了多次递归算法)

本类可以独立运行,不受其它类的控制,一但开始节点的状态被设置为1,就自动调用该类,直到结束点被设置为1

本算法位于 代码包中org.jwfd.workflowEngines.GXLFlowControlModule.java 文件中

==============================================================================

  图从第一个节点开始,我们这里暂时不讨论多开始节点的流程图

  if(流程的节点<> 0)
  首先判断 流程图的节点数量是否为空(从数据库中取出的流程节点不为空是继续运行的前提)

   for(int i =0  i <当前节点的邻接点个数){
     
     这个FOR循环体是用来处理从流程开始节点开始分支的N个节点的,有多少个节点,就循环多少次
     
        if (该点是个前驱路由点) {做一次判断,保证节点不是离散的
          if(该点的属性是分支类型){  对分支类型的节点处理模块
              if (该点没有被访问过) {
                  设置访问次数加(从递归方法中获得的循环控制变量)
                  返回
              }
              else if(如果已经访问过,但是访问次数<它的前驱节点总数){
                   设置访问次数加(从递归方法中获得的循环控制变量+1)
                   返回
              }
              else if(总计访问次数=它的前驱节点总数){
                  递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中)
              }
              }
           else if(如果是普通节点){   对普通节点的处理模块
               设置访问标志
               递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中)
              }
              }
       }

   =============================================================================

你可能感兴趣的:(数据结构,工作,算法,框架,jbpm)