码迷,mamicode.com
首页 > 其他好文 > 详细

流程管理

时间:2017-08-13 20:51:25      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:bean   amp   nod   执行   ast   example   event   记录   tar   

整体介绍

主要用于对流程的管理,类似审批流程,支持节点间的跳转,同时可在每个节点前设置拦截器。为了更好的监控节点,对各个环节都开放了监控接口,可定制化的监控。

项目中为了方便,自定义了一个容器管理,实际使用可以用spring进行管理

代码地址

git地址:https://coding.net/u/mich/p/easytry/git/tree/master/src/com/statemachine

整体目录结构

技术分享

  1. design
    1. StateTemplete 核心模块,主要保存一个流程模板,同时让节点自动的根据模板设定进行跳转
  2. entity
    1. QueueInfo 队列信息,主要用于保存监听的信息
    2. FilterCondition 拦截器,用于判断是否进入下个节点,同时如果失败,直接进入失败节点
    3. StateCurrent 用于保存节点的当前状态,实际使用中通过继承的方式,保存状态
    4. StateEvent 事件的唯一code,以及处理后下个节点的状态
    5. StateNode 流程节点(核心),用于保存整个流程模板的整体结构,可通过xml进行设计,(未来可设计成可视界面,转换xml,不过前端比较弱(主要是嫌麻烦),这里就只提供了对象xml的互转)
  3. event
    1. EventManager 事件的注册,通过code对不同事件进行注册
    2. FilterEventResult 拦截器的处理结果,用于判断是否过滤,以及过滤后的下级节点(下级节点只能从FilterCondition 中给出的下级节点中选择)
    3. EventTypeEnum 监听事件类型,
      FILTER_SUCCESS, FILTER_FAILED, FILTER_PRE, NORMAL_POST, NORMAL_PRE
      分别是没有拦截,成功拦截,拦截方法前,处理方法后,处理方法前
      在监听器的参数可获取事件的执行阶段
    4. IEvent 节点处理事件
    5. IFilterEvent 拦截器处理事件
  4. listener
    1. EventListenerManager 监听事件管理,主要用于记录监听的事件以及对事件的触发
    2. IFilter 监听事件的过滤,判断是否要对此状态,是否有事件符合广播要求
    3. IFilterEvent 对于监听事件的处理

使用样例

技术分享

在example中,首先声明了3个对象,领导,订单,用户,之中订单Order继承了StateCurrent,然后再OrderEvents中注册了对应的几个事件,审批,重新审批,拦截。在OrderListener中写了简易的监听,此处就做了订单为1的监听。在template中,创建了一个订单的审批模板,同时这里也创建了一个对应的order.xml文件,两者只是不同的创建形式(代码方式和xml方式),内容是一样的。BeanManager简单的替代一下spring,Start就是所有项目的启动类了。大致实现的流程如下图。

 技术分享

 

流程管理

标签:bean   amp   nod   执行   ast   example   event   记录   tar   

原文地址:http://www.cnblogs.com/MichLy/p/7354598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!