2-OSWorkflow基础概念2

Steps, Status, and Actions

每个特定流程在任意时刻都有至少一个当前steps,而当前steps也有一个status,这个status值就表示流程实例的status。status的取值可以是Underway或者Queued。
一 个step结束后就不再是当前step了,通常一个新的当前step立即产生以使流程继续运转。结束的step的最后的status被设置为old- status属性,这个属性一定要在流程通过新的transition转向新的step之前被设置好,一般的设为Finished。
Transition 本身是action的result,一个step可以有多个action,执行哪一个是由端用户,外部事件或者自动触发器来决定。Transition依 据action的完成方式来产生。每一个action有至少一个unconditional result和任意个conditional results。

Result,Joins,and Splits

Unconditional Result就是一系列的指示,确定流程的下一步任务。它在状态机中引起流程state的转换。
Conditional Result含有一系列的条件Condition,第一个条件为True的将指示流程状态的转换。
3种Result可能发生:step;split;join。一个告诫:当前的split或者join不能再result到一个split或者Join
对于到达step的情况:
<unconditional-result old-status="Finished" step="2"
                      status="Underway" owner="${someOwner}"/>
对于到达split的情况:
<unconditional-result split="1"/>
...
<splits>
  <split id="1">
    <unconditional-result old-status="Finished" step="2"
                          status="Underway" owner="${someOwner}"/>
    <unconditional-result old-status="Finished" step="2"
                          status="Underway" owner="${someOtherOwner}"/>
  </split>
</splits>
对于到达join的情况:
<!-- for step id 6 ->
<unconditional-result join="1"/>
...
<!- for step id 8 ->
<unconditional-result join="1"/>
...
<joins>
  <join id="1">
    <join id="1">
    <conditions type="AND">
      <condition type="beanshell">
        <arg name="script">
          "Finished".equals(jn.getStep(6).getStatus()
          && "Finished".equals(jn.getStep(8).getStatus())
        </arg>
      </condition>
    </conditions>
  </join>
  <unconditional-result old-status="Finished" status="Underway"
                                 owner="test" step="2"/>
  </join>
</joins>
到达join时的情况稍微复杂一些,其中的表达式表示:当id=6和id=8的两个step转移到join并且状态都是finished

External Functions

OSWorkflow定义了functions方法来执行外部的业务逻辑和应用服务,分为两类:pre & post step functions。
Pre functions在流程进行转移(transition)之前调用,通常是一些简单快速的应用。
Post functions和pre functions在同一个应用范围中,只是他们是在流程状态发生改变以后才被调用,通常是耗时的应用。
Functions可以在两个不同的位置指名:steps和actions。
对于定义在actions上的functions:
 pre-func -> action -> post-func  ==>  next step
对于定义在step上的functions:
 action -> pre-func -> step state change -> post-func -> next step

Validators

validator就是一些代码,可以校验action的输入。如果通过校验,那么action被执行;否则引发InvalidInputException

Registers
register是一个函数,返回一个公共的对象,通常这个对象可以供整个流程使用,比如文件,原数据,任务等等。
<registers>
 <register name="doc" class="com.acme.DocumentRegister"/>
</registers>
...
<results>
 <result condition="doc.priority == 1" step="1" status="Underway" owner="${someManager}"/>
 <unconditional-result step="1" status="Queued"/>
</results>

Variable Interpolation
在condition,function,validator,register中都会使用 参数。象status,old-status,owner等流程描述符都会被动态解析,一般的变量定义为${foo}。OSWorkflow看到了这样的 变量,就会在transientVars Map里面查找,如果找不到就到PropertySet中查找,如果还是找不到,那么就设置为空。
值得注意的是,如果一个参数是字符和变量的混合体,那么就会被认为是字符。比如下面
<arg name="foo">${someDate}</arg>  <!-- variable>
<arg name="bar"> ${someDate} </arg>  <!-- string, note the extra spaces -->

Auto actions
自动执行action。只要将指定的action的auto属性设置为“true”即可。

Workflow Instance State
当 一个流程实例被创建,它处于CREATED状态。一旦action被执行,那么自动变为ACTIVATED状态。一旦流程不可能再进一步执行的时候,状态 变为COMPLETED。在流程实例运行过程中,调用者可以结束和暂停流程,对应的状态为KILLED和SUSPENDED

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值