Insect Workflow

简介:
今天整理代码,发现一个去年写的简单的工作流引擎,基于petri网(参考这里的 笔记),实现了顺序、并行、循环和选择四种路由,资源也实现了人工驱动和定时、延迟时间驱动;目前只实现了将工作流数据保存在内存的版本,然后就换工作,折腾着就忘了这个事儿,本来是计划加入数据库存储的。尽管只是个toy,可能对工作流感兴趣,或者想自己实现一个玩玩的朋友有参考价值,放到了google code上,svn地址:
 http://insectworkflow.googlecode.com/svn/trunk/

    源码中有在example包下给了个请假的例子,流程定义文件就是processes包下的leave.xml,实现大概是这么个流程:
填写假单-》提交假单-and-split节点-》项目经理审批-》and-join节点-》结束
                                                     -》部门经理审批-》

其中项目经理审批和部门经理审批是并行路由。xml配置大概这样:
< node  type ="and-split"  name ="and-split"  id ="2" >
        
< inputs >
            
< place  id ="3"   />
        
</ inputs >
        
< outputs >
            
< place  id ="4"   />
            
< place  id ="5"   />
        
</ outputs >
    
</ node >
    
< node  name ="dept_manager_confirm"  id ="3" >
        
< resource  class ="com.google.code.insect.workflow.impl.Group"  id ="2"
            name
="dept_manager" >
        
</ resource >
        
< conditions  type ="and" >
            
< condition
                
class ="com.google.code.insect.workflow.impl.NullHandler"  value ="false"
                variable-name
="LeaveInfo"   />
        
</ conditions >
        
< handler
            
class ="com.google.code.insect.workflow.example.leave.SendRemindHandler"   />
        
< inputs >
            
< place  id ="4"   />
        
</ inputs >
        
< outputs >
            
< place  id ="6"   />
        
</ outputs >
    
</ node >
    
< node  name ="project_manager_confirm"  id ="4" >
        
< resource  class ="com.google.code.insect.workflow.impl.Group"  id ="3"
            name
="project_manager" >
        
</ resource >
        
< conditions  type ="and" >
            
< condition
                
class ="com.google.code.insect.workflow.impl.NullHandler"  value ="false"
                variable-name
="LeaveInfo"   />
        
</ conditions >
        
< handler
            
class ="com.google.code.insect.workflow.example.leave.SendRemindHandler"   />
        
< inputs >
            
< place  id ="5"   />
        
</ inputs >
        
< outputs >
            
< place  id ="7"   />
        
</ outputs >
    
</ node >
    
< node  type ="and-join"  name ="and-join"  id ="5" >
        
< handler
            
class ="com.google.code.insect.workflow.example.leave.ResultHandler"   />
        
< inputs >
            
< place  id ="6"   />
            
< place  id ="7" ></ place >
        
</ inputs >
        
< outputs >
            
< place  id ="8"   />
        
</ outputs >
    
</ node >

    其中的place就是各个Transition的输入或者输出库所,所谓node其实就是变迁(transition),每个变迁对应一个handler,执行具体的业务操作,比如这里的com.google.code.insect.workflow.example.leave.SendRemindHandler 用于发送提醒消息给经理们。

    具体调用和工作项的人工触发:

// 初始化工作流管理器
WorkFlowManager wm  =   new  BasicWorkflowManager();
wm.setConfiguration(
new  DefaultConfiguration());

// 启动一个案例
Token token  =  wm.startWorkFlow( " leave " );
token.setAttribute(
" LeaveInfo " , leaveInfo);

// 提交假单
wm.doAction(token.getId(),  this .dennis,  " 给领导发送消息: "
                
+  leaveInfo.getStaff_name()  +   " 申请请假,请批准! " );
// 将token的id传递给后续节点做处理。。token的id就是案例id

    processes包下面的流程定义文件和test包下的TestUnit,分别测试了四种路由和定时、延时触发,有兴趣的可以看一下。

文章转自庄周梦蝶  ,原文发布时间 2008-05-21

目录
打赏
0
0
0
0
209
分享
相关文章
新手“超级”容易用错的几个Airtest和Poco的API,看看你有没有遇到过!
新手“超级”容易用错的几个Airtest和Poco的API,看看你有没有遇到过!
457 0
阿里云Dataworks数据集成工具实现:OTS -> Maxcompute数据同步
数据集成主要用于离线(批量)数据同步。离线(批量)的数据通道通过定义数据来源和去向的数据源和数据集,提供一套抽象化的数据抽取插件(Reader)、数据写入插件(Writer),并基于此框架设计一套简化版的中间数据传输格式,从而实现任意结构化、半结构化数据源之间数据传输。结合用户在使用OTS数据源同步的时候容易出现问题,这里演示:OTS数据源同步数据到Maxcompute的具体实现步骤。
1608 0
阿里云Dataworks数据集成工具实现:OTS -> Maxcompute数据同步
如何将内网服务器数据采集到日志服务
1.背景公司内部服务器都没有公网访问权限,只有少数网关机可以访问公网,但需要将日志采集到阿里云日志服务进行实时分析,因此需要配置网关机转发来实现内网服务器的日志采集。 2.准备材料 一台可以访问外网的网关机 1.
4075 0
Qt实用技巧:在CentOS上使用linuxdeployqt打包发布qt程序
本篇文章依然是继续发布主题,有centOS的qt项目需要发布,系统是CentOS8.2,同时也做了CentOS7.5的发布(CentOS7.5整体差上不差,就是需要先yum卸载自带的cmake,然后源码安装cmake3.4)
Qt实用技巧:在CentOS上使用linuxdeployqt打包发布qt程序
面试官:谈谈 CPU Cache 工作原理,Cache 一致性?我懵了。。
面试官:谈谈 CPU Cache 工作原理,Cache 一致性?我懵了。。
310 0
面试官:谈谈 CPU Cache 工作原理,Cache 一致性?我懵了。。
轻松入门MySQL:简明教程解析数据存储与管理(1)
轻松入门MySQL:简明教程解析数据存储与管理(1)
129 0
视频直播推流拉流慢、卡顿解决方案
视频直播类App当前已经普遍采用CDN来实现访问加速,但还是经常遇到推拉流慢、卡顿的问题。这类问题一般是由于调度不精准、域名劫持、终端手机接入网络动态切换等因素导致,结合使用CDN和HTTPDNS可以比较完美解决此类问题。
24498 0
关于Element-Ui 时间范围选择器DatePicker禁用范围日期问题
饿了么组件库的[DatePicker](https://element.eleme.cn/#/zh-CN/component/date-picker) 日期范围选择,

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等