[原创]JWFD工作流引擎设计----节点匹配搜索算法(用于解决条件异步汇聚问题)

 本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况 (http://blog.csdn.net/comsci/archive/2009/02/27/4682578.aspx),我现在把我对图例A2的一个解决方案公布出来,请大家多指点

 

图例


节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)

需要解决的问题:已知分支点的运行路径数值S,求流程图中一个汇聚点的实际访问(实际汇聚)数值,通过获取该数值,使得流程引擎控制器能够准确的控制流程 的运转,即准确的控制对条件异步汇聚点放行的时机(对于该问题,国内另外一个开源工作流 Fireworkflow的作者非也有另外一个思路 请参考 http://www.fireflow.org/viewthread.php?tid=9&extra=page%3D3 )

  算法设计思路: 对于标准的对称的流程图而言,一个汇聚点一般来讲是应该对应一个分支点的,也就是说汇聚支路数应该和它前面的分支支路数相吻合(当然,这只是对很规则的对 称流程图模型来讲),那么如果在分支节点中如果出现了条件选择公式(或者智能脚本),那么从这个分支节点所分出来的支路,就不一定都会被选中(简单举例, 我们在分支节点中嵌入了一个条件表达式a>2,那么如果分支实际有三条支路,在流程运行过程中,a的数值大于2,符合嵌入的条件,三条支路其中的2 条就会运行下去,而另外一条就不会运行,这样一来,在该节点的后驱汇聚点那里,我们就需要知道具体运行下去的支路数到底是几条? 怎么才能够获取这个支路数呢? 我们在流程运行控制器(流程引擎)中加入一段算法,使得我们确定的知道一个条件汇聚点的前驱分支点是哪个节点,然后我们先计算一次嵌入条件公式,预先知道 该前驱分支点具体要走几条支路,然后再把这个支路数值作为参数传递给用于控制条件汇聚点的控制器中,使得汇聚点按照实际运行的支路来判断是否该继续运行到 下一个节点去,那么我们按照这个思路设计伪代码算法

  混合伪代码5步描述法
 
1: 条件表达式解析函数 public java.util.ArrayList CFS(SID,GID)() 
  这个函数是流程控制器中用于解析流程嵌入的条件表达式,并根据流程的变量数值计算出流程嵌入公式的结果,函数参数SID是传递给流程控制器中的需要处理的节点ID,GID是流程图的ID,下面一致

2: 获取输入汇聚节点的所有前驱汇聚点函数  public java.util.ArrayList GAS(SID,GID)()   这个函数用于获取该节点前面出现的所有汇聚点

3: 获取输入汇聚节点的所有前驱分支点函数  public java.util.ArrayList GAJ(SID,GID)()   这个函数用于获取该节点前面出现的所有分支点

4: 对该节点的所有前驱分支点集合和前驱汇聚点集合进行计算,找出该汇聚节点的匹配分支点SSID  public String GRN(GAS,GAJ,GID)()  节点匹配算法的实质是对称集合配对差算法

5: 在找到这个匹配的分支点SSID之后,我们就可以对其中嵌入的条件公式进行提前计算
   public int PCSF(SSID,GID)(
      CFS(SSID,GID)()
      return K;
   )

     这样获得了一个int数值k,然后我们就在流程控制器中在流程汇聚点进行控制的过程中使用这个数值,那么前面提到得问题就这样初步解决了,离圆满的解决这个问题,我们又近了一步............

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JWFD申请到一个论坛专区,希望大家对JWFD的数据结构和设计有什么意见和建议,包括BUG都可以到这个地方来提交 地址是 http://www.openjweb.com/bbs/forum.php?mod=forumdisplay&fid=61 jwfd 工作设计器V0.91 (本程序的源代码在comsci的其它资源中下载) 名称是 JWFD v0.94工作流源代码 for eclipse(BUG修正版) COMSCI 2005 需要JDK1.4以上 运行方法:双击jwfd.jar运行 QQ:784092877 本工具由JAVA SWING与开源软件JGRAPH包的一些类和方法共同编写的,其中对原JGRAPH包的一些类 和方法进行了修改和完善(原始类不能将图的一些重要属性写入GXL文件,我添加了这几种属性的方法) 现在可以使用的一些功能有: 利用作图工具界面完成流程图的绘制,添加可以处理的节点属性和其他一些通用功能, 利用树型结构显示流程图文件的信息(一个是临时GXL文件目录(GXL_TEMP),一个是保存已经提交的GXL文件的目录(ACTIONED)) 通过点击顶部工具栏的最后一个图标,弹出对话框输入文件名后将图GRAPH保存为GXL文件 把GXL文件提交到数据库中的功能可通过在树型栏目中对已经保存的文件点击右键选择提交流程图来运行 提交完成后,在树型栏中的第二项目,已提交流程中就生成了一个被修改了文件名的项,同时数据库中的 stem_main(节点表)和edge_control(边定义表)中就就完整的图的基本数据,可以供流程运行处理模块使用 (本人使用的是MYSQL数据库,库的名字为new_sys,有三张基本表,建表SQL在包中,请自行修改 JGRAPH中对图和顶点与边的定义与存储结构是非常简洁与实用的,利用数据库或者是GXL文件中的这些数据可以非常简单的处理一个复杂的流程图........... 该工具经过修改后,也可以实现一个实时监控界面和其它的适合于网络结构显示的工具和项目 GXL文件格式就是一种标准XML格式文件.....非常容易处理..可以脱离数据库进行流程图数据管理,效率很高 但是如果写入库中,则可以让程序更灵活一些............. 这些程序是在JBuliderX版本中完成的,我把需要用到的LIB都一起打成一个包..

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值