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定义文件中做文章,流程执行逻辑无需做特殊处理;

时间: 2024-11-01 18:30:25

OSWorkFlow流程配置文件详解的相关文章

AndroidManifest.xml配置文件详解(转载)

AndroidManifest.xml配置文件详解 2013-01-05 10:25:23 分类: Android平台 AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅.下面是一个标准的AndroidManifest.xml文件样例.     [html] view plaincopy <?xml version="1.0" encoding="utf-8"?&g

监控服务 - Nagios配置文件详解

一.Nagios的配置文件类型: Nagios安装后有四种默认的配置文件:主配置文件.CGI配置文件.资源定义文件.对象定义文件.这些配置文件间具有一些关系,只有充分理解各配置文件,才能使得配置Nagios服务如行云流水. 二.Nagios配置文件详解: 1.主配置文件(nagios.cfg): Nagios的主配置文件是用来定义Nagios服务的基本参数信息的,其中包括:对象定义文件的声明.CGI配置文件的声明.资源定义文件的声明等.其常用参数如下: log_file=/usr/local/n

Hadoop1.2.1 配置文件详解

首先我们先回顾一下Hadoop的一些概念: Apache Hdoop 1.x 组成 NameNode(元数据服务器) Secondary NameNode(辅助元数据服务器) JobTracker(任务调度员) DataNodes(块存储) TaskTrackers(任务执行) HDFS文件系统 NameNoode:属于管理层,用于管理数据存储 SecondaryNameNode:也属于管理层,辅助NameNode进行管理 DataNode:属于应用层,用户进行数据的存储,被NameNode进行

ThinkPHP源码阅读2-----C函数配置文件详解

ThinkPHP的配置非常灵活,可自定义加载.大概看了一下,一共有这几个地方会加载配置文件,方便以后的读取 /** * 获取和设置配置参数 支持批量定义 * * @param string|array $name * 配置变量 * @param mixed $value * 配置值 * @return mixed */ function C($name = null, $value = null) { static $_config = array (); // 无参数时获取所有 if (emp

Zabbix配置文件详解之服务端——zabbix_server

作为zabbix的部署,这里就不说了,网上一大堆文档,但关于配置文件的说明就比较少,这里列出服务端的配置文件zabbix_server的详细解释,感谢我主管的功劳. Zabbix Server端配置文件说明 # This is a configuration file for Zabbix Server process # To get more information about Zabbix, # visit http://www.zabbix.com ############ GENERA

Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解

原创整理不易,转载请注明出处:Spring AOP注解通过@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入属性的配置文件详解 代码下载地址:http://www.zuidaima.com/share/1772661373422592.htm 本文介绍了使用Spring注解注入属性的方法.使用注解以前,注入属性通过类以及配置文件来实现.现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifi

[转]Web.config配置文件详解(新手必看)

本文转自:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <?xml version="1.0"?> <!--注意: 除了手动编辑此文件以外,您还可以使用 Web 管理工具来配置应用程序的设置.可以

Nagios服务器端配置文件详解(2)

上一步骤: http://blog.csdn.net/mchdba/article/details/25654889 6 配置nagios Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等.默认的Nagios 配置没有任何监控内容,仅是一些模板文件.若要让Nagios 提供服务,就必须修改配置文件,增加要监控的主机和服务,下面将详细介绍. 6.1 默认配置文件介绍 Nagios 安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下

Hibernate3 Api,配置文件详解

1 api详解[多练] 1.1 体系结构 PO:persistent object ,用于与数据库交互数据.--dao层  (JavaBean + hbm ) BO:Business object 业务数据对象.--service层 VO:Value Object 值对象.--web层 开发中:直接使用JavaBean 描述三个对象. 1.2 Configuration 配置对象 l hibernate 核心配置文件种类 hibernate.cfg.xml 通常使用xml配置文件,可以配置内容更