OSWorkFlow流程配置文件具体解释
AbstractWorkflow>>
osworkflow中有关工作流流转的全部核心代码都在AbstractWorkflow中。BasicWorkflow就是派生自它,只是这个BasicWorkflow基本上没做什么事情。或许我们还能够从AbstractWorkflow派生自己的Workflow类以增加扩展功能,大概这也算是osworkflow所体现的一种灵活性了,即:同意对工作流流转的运行逻辑进行改动。
AbstractWorkflow实现了Workflow接口,该接口包括了有关工作流的核心方法,最重要的是doAction方法,AbstractWorkflow实现了该方法,后面会提及,其它另一些getter和query
method。
流程流转的运行逻辑>>
当流程运行到的某个step时,可能有一个或多个action可供用户选择运行。一旦确定运行某个action后,我们须要调用AbstractWorkflow.doAction,并传入流程id和action的id。下面是对doAction的运行逻辑的一个不太严紧的算法描写叙述:
- 依据流程id,获得全部当前的step,这样的情况往往发生在有split的时候。此时会有多个step等待运行;
- 依据传入的action的id,检查是否是global action;
- 若不是global action,则遍历全部当前的step,对每一个step的每一个action调用isActionAvailable方法。检查该action是否可用(记住step和action是一对多的关系);
- 所谓可用是指。通过运行passesConditions,逐个检查action的condition:若是OR的关系,则有一个condition为真即为可用。AND关系则类推;
- 若action可用,则调用transitionWorkflow,这是流程流转处理的关键部分;
运行transitionWorkflow时:
- 首先获取当前step,存在有多个当前step的情况。比方split,此时获取首个isAvailableAction为真的step。
- 调用verifyInputs验证输入(假设action有validator的话)。
- 运行当前step的post function(由于该step即将结束);
- 运行action的pre function;
- 推断当前step所属的result中的全部condition是否满足要求,推断方法类似action的condition。
- 一旦满足,则获取result的pre function和post function;
- 否则即是unconditional result,获取对应的pre function和post function;
- 在没有split和join的情况下
- 会依据在result中指定的下一个step的id,创建一个新的step。作为当前的step。
- 从current steps中移除原来的当前step。并加入到history steps中;
- 假设新的step有pre function,则会立即运行;
- 运行result的post function。
- 运行action的post function;
- 若action是intial action。则将流程设置为activated状态;
- 若action是finish action。则将流程设置为completed状态,返回true;
- 寻找auto action,若有的话,则运行之,运行方法是调用doAction本身;
- 返回false;
- 依据transitionWorkflow的返回值推断流程是否结束;
- 若返回false,则调用checkImplicitFinish检查是否存在implicit finish,即:当前没有一个step的action可用时,就觉得流程应该结束;
- 若存在split。则会创建多个新的step,而且在创建之前先运行split的pre function,在创建之后运行split的post function。
- 创建step的过程和上面描写叙述的普通状况同样:维护好current steps和history steps,并运行新的step的pre function;
- 若存在join,先结束当前step。并将该step加入至history steps和join steps;
- 查找history steps,对每一个已完毕的step,查看是否在其result或unconditional result中有join一项,若有则增加join steps中。
- 检查join是否已经满足:能够使用Bean Shell,在xml定义文件的join节点中,通过引用一个名为“jn”的特殊变量来指定join的满足条件,jn记录了有关join的关键信息。
- 若条件满足。则运行join的pre function,维护好history steps,并创建下一个step,然后运行join的post function。
- 对于条件循环的情况,能够通过将result的某个action的下一个step指定为自身来加以实现,这仅仅是在xml定义文件里做文章,流程运行逻辑无需做特殊处理。
OSWorkFlow流程配置文件具体解释的更多相关文章
- my.cnf 配置文件参数解释
my.cnf 配置文件参数解释: #*** client options 相关选项 ***# #以下选项会被MySQL客户端应用读取.注意只有MySQL附带的客户端应用程序保证可以读取这段内容.如果你 ...
- 分布式文件存储FastDFS(七)FastDFS配置文件具体解释
配置FastDFS时.改动配置文件是非常重要的一个步骤,理解配置文件里每一项的意义更加重要,所以我參考了大神的帖子,整理了配置文件的解释.原帖例如以下:http://bbs.chinaunix.net ...
- 在C#代码中应用Log4Net(三)Log4Net中配置文件的解释
一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件. <log4net> <!-- 错误日志类--> <logger nam ...
- 在C#代码中应用Log4Net 中配置文件的解释
一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件. <log4net> <!-- 错误日志类--> <logger nam ...
- log4j配置文件详细解释
web.xml中配置启动log4j的配置 <!-- webAppRootKey进行配置,这里主要是让log能将日志写到对应项目根目录下 --> <!-- 定义以后,在Web Cont ...
- [转]Log4Net中配置文件的解释
FROM:http://www.cnblogs.com/kissazi2/p/3392605.html 一个完整的配置文件的例子如下所示 <log4net> <!-- 错误日志类-- ...
- ANDROID自己定义视图——onLayout源代码 流程 思路具体解释
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 简单介绍: 在自己定义view的时候.事实上非常easy.仅仅须要知道3步骤: 1.測量- ...
- 【比赛打分展示双屏管理系统-加强版】的两个ini配置文件功能解释及排行榜滚动界面的简答配置等
加强版目录下有两个ini文件,功能解释如下: 1. ScoreTip.ini: bScoreTip:如果为1,可以启用 回避 功能 或 高低分差值超出 iScoreRange 的 提示功能. iSco ...
- Log4Net中配置文件的解释
一个完整的配置文件的例子如下所示 <log4net> <!-- 错误日志类--> <logger name="logerror"> <le ...
随机推荐
- Microsoft Windows Server DHCP
Microsoft Windows Server DHCP DHCP IP地址第一个来源是DHCP服务器,第二个来源是PPP点对点协议(ADSL为PPPOE);DHCP是Dynamic Host Co ...
- Native.js示例汇总
Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成.这篇帖子的目的就是汇总各种写好的NJS代码,方便web开发者.众人拾柴火焰高,有能力的开发者多多提交NJS代码, ...
- 字典(trie)树--从入门到入土
今天再来认识一个强大的数据结构. 字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词 ...
- 洛谷P1035 级数求和
#include <iostream> using namespace std; int main(){ long k,i; cin >> k; double s=0.0; ; ...
- cobbler 无人值守-安装
环境准备 准备两台主机,如centos6和centos7 centos7当作server服务器 关闭selinux 关闭防火墙 安装 cobbler包光盘里是没有的,要配置epel源,这里就说怎么配置 ...
- vue 项目规范
1, 组件化 2, css 分清单独和通用的 3, 封装请求 4, 命名原则 1: 尽量和后端保持一致 2: 简单常见的单词 3: 全部小写
- C语言学习10
判断三角形的类型 根据输入的三角形的三条边判断三角形的类型,并输出它的面积. #include <stdio.h> #include <math.h> void judge_1 ...
- manjaro xfce 18.0 踩坑记录
manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...
- Vue如何在webpack设置代理解决跨域问题
在开发过程中我们请求数据有时候调用的是第三方接口,此时便会遇到一个问题:跨域限制.对于跨域问题的解释就不详细叙述了,要了解的请自行百度.一般跨域问题控制台会报这个错: ...
- Shell脚本问题详解
例1:找出当前系统中端口大于1024的程序! 使用netstat -tuln查询出的结果如下,需要输出红色字体的行: [root@localhost ~]# netstat -tuln Active ...