今天整理代码,发现一个去年写的简单的工作流引擎,基于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,分别测试了四种路由和定时、延时触发,有兴趣的可以看一下。
分享到:
相关推荐
SAP PO How to insect
《XSLT与XSLT相关编程语言的交互式调试器——开源项目“insect”详解》 在软件开发领域,尤其是处理XML数据转换时,XSLT(可扩展样式表语言转换)扮演着至关重要的角色。然而,复杂的XSLT代码往往容易出现错误,...
"Insect" 是一款被设计为快速、交互式的科学计算器。它主要针对的是需要进行复杂数学计算的用户,例如科学家、工程师、学生或者任何需要在日常工作中进行精密数学运算的人群。这个名字可能源于昆虫的多足和敏捷特性...
【标题】"day50-Insect Catch Game(捉虫游戏)"揭示了这是一个关于编程学习的项目,重点在于创建一个互动的游戏,玩家需要在屏幕上捕捉昆虫。这个游戏可能旨在教授HTML、CSS和JavaScript基础,这些都是构建网页和...
国家Insect Science编辑部编辑岗位2019招聘模拟试题及答案解析.docx
这篇文档是针对小学五年级英语课程的一课时教案,主题为“Lesson 6 What's an Insect?”。教案旨在帮助学生学习与昆虫相关的词汇、句型,并通过多种教学方法提高他们的听说读写能力。 首先,教学目标明确,学生需要...
《基于Python的人脸识别技术深度探索》 在当今数字化时代,人脸识别技术已成为人工智能领域的重要组成部分,广泛应用于安全监控、身份验证、智能门禁等多个场景。本项目“quarrying-celebrity-id-master”旨在通过...
【Insect:Perl 开源工具】 Insect 是一个创新的开源项目,它采用 Perl 这种强大且灵活的编程语言作为基础,旨在帮助用户将 GEDCOM 格式的家谱数据库转换为高度定制化的、模板驱动的网站。GEDCOM(GEnealogical Data...
标题中的“insect.zip_doubtqut_earlierty7_frequentlyh1d_差分方程求解种群增长模型的虫口衍变_虫”表明这是一个关于使用差分方程研究虫口数量变化的项目。"doubtqut"、"earlierty7"和"frequentlyh1d"可能是项目中...
在这个名为“insect-catch-game”的项目中,我们将深入探讨如何利用CSS来构建这样一个互动游戏。 首先,CSS的核心在于层叠和选择器。在游戏设计中,我们可以使用类选择器、ID选择器以及伪类选择器来对不同的游戏...
1、昆虫数据集,昆虫检测数据集 2、类别:Leconte、Boerner、linnaeus、armandi、coleoptera、acuminatus、Linnaeus 3、标签格式;txt 和xml
标题中的“insect:昆虫科学计算器的 Nord 主题客户端”表明这是一个专为昆虫科学计算设计的应用程序,采用了Nord主题风格。Nord是一种流行的颜色主题,通常用于软件界面设计,以提供清晰、舒适的视觉体验,尤其适合...
matlab代码影响昆虫机器人 介绍 此存储库用作我的个人四足机器人项目的代码,资源和文档的集合。 这个项目的目标是建立一个受昆虫启发的步行机器人。 指导目标/约束 为了将书本知识转化为实际经验,有许多选择会影响...
Gene expression and the evolution of insect polyphenisms Gene expression and the evolution of insect polyphenisms Jay D. Evans1* and Diana E. Wheeler2 Summary Polyphenic differences between ...
Insect-virus relationships: Sifting by informatics Insect±virus relationships: sifting by informatics David Dall,1* Teresa Luque,2 and David O'Reilly2 Summary Several groups of large DNA viruses ...
Consider a population of "prime insects" and "even eating predators... Given these initial numbers, the insect population at the end of week n is calculated as follows in the following order: python求解
本研究聚焦于两种重要的烟碱型乙酰胆碱受体亚基在拟环纹豹蛛中的共组装情况,拟环纹豹蛛是昆虫害虫的重要天敌蜘蛛。研究表明,新型烟碱类杀虫剂如吡虫啉是昆虫烟碱型乙酰胆碱受体的激动剂,在靶标昆虫与天敌蜘蛛间...