国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

osworkflow descriptor 解析 重要概念

2019-11-18 11:33:31
字體:
來源:轉載
供稿:網友

 

歡迎與我交流(yun15291li@hotmail.com

 

在這篇文章中,主要介紹osworkflow的核心概念以及重要的部分,讓大家對osworkflow有個比較全面的熟悉。

在osworkflow中最最核心的東西就是工作流定義的xml文件。盡管它并不是一定要定義成xml文件。但是xml格式是一種標準的通用的格式。

這個xml文件為某一個給定的工作流進行描述steps、states,transitions,和functionality。下面闡述一下此xml的一般規則:

1、  一個工作流由多個steps組成

2、  對于每個step,可以包括多個actions。一個action可以被設置成自動運行或者需要通過人工交互才可以運行。

3、  每個action都要包括至少一個unconditional result和0或多個conditional results。

4、  假如設定了多個concitioanl results,所有當中的第一個將被執行,假如沒有設定conditional results或者沒有conditions滿足,那么執行unconditional result

5、  一個result過后可能依舊停留在當前的step中,一個新的step,一個split,一個join。在所有的情形中,工作流的state跟著變化(例子工作流中的states分別為:Underway,Queued,和finished)

6、  假如一個result引起一個split,這個result會指定split的屬性,以指向一個split元素。

7、  一個split可以有一個或者多個unconditional results,但是沒有conditional results。Unconditional results。Unconditional results需要指定steps。

8、  一個PRopertyset是一個持久層數據的map,在全局應用中都是可用的。

9、  還有一種叫做transientVars的map,它只存活于一個工作流調用過程中的一定的生命周期,它將會對所有functions和conditions,包括所有的registers,user input,以及工作流上下文狀態等起作用。

 

工作流概念:

下面開始理解osworkflow的核心概念:

對于step,status,actions部分就不多說明了,其實我覺得理解概念的最快方法應該是參照實例,即使我們不能用高高大大的詞匯描繪出來,能自己理解是什么意思就可以了。

Unconditional result 和 conditional results

這里做以簡單介紹,對于每個action,要求至少存在一個Unconditional  result,一個result也就是通過一系列指示來告訴osworkflow下一步的任務是干什么。這種調用使得產生變遷進而從一個state到另外一個state。這種概念是在UML的狀態機里有講,希望了解狀態機相關概念的可以到UML相關書籍中查看。

Conditional result是unconditional result的一種擴展。不同的地方在于他需要一些子元素:condition。用and 和 or來標志各個condition之間的關系。

Conditional 和unconditional 的最終result可以產生三種效應或者說是結果:

1、  一個新的step/status

2、  一個split,出現一或多個step/status

3、  一個join,一個新的step/status

普遍的,一個split或者join不能result出另外一個split或join。

一個step/status result可以按下面方式簡單的設定:

<unconditional-result old-status="Finished" step="2"

                      status="Underway" owner="${someOwner}"/>

 

從一個state split 到多個 states可以按以下方式達到:

<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>

 

Joins是比較復雜的用例。一個典型的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>

上面這段代碼中最需要關心的就應該是jn。當join實際發生的時候,這個非凡的變量jn可以被用來建立表達式。本質上,可以很輕易理解出這個段xml的意思就是:當step6和8都finish時候在此處進行join。

Functions部分:

Osworkflow用function來定義商業邏輯和一些需要定義執行的服務。用functions標簽來表示。

兩種functions(pre和post)

Pre 是在工作流進行某個變遷之前需要被執行的。一個比較好的例子:為了在result中state變更產生,而先建立caller。

Post是在之后執行的。如當某一個state改變后,發送一email到某處。

Functions可以在兩個分別的地方被指定:steps和actions。

 

Trigger Functions

 

Validators

 

Registers

一個function:用來返回一個用以被其他普通對象能夠輕易訪問得到的對象。尤其是指workflow 的實體類。返回的對象類型不閑典型的例子如:document,metadata,issue,task等。非常便利。

<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>

 

Conditions

 

變量

 

授權與限權

 

自動執行的action

設置auto=true

 

Common and global actions:

Common和globalactions的主要作用在于在工作流定義文件中能夠避免代碼重復。

基本思想就是簡單。這兩種actions是在最開始就進行說明的,在initial-actions元素后面。

這兩處還不能完全理解好!

Common actions:在最開始定義好,可以在其他地方如此引用

<common-action id="100" />

例如一個“send mail”的action

Global actions:不同之處在于顯式的被某一個step引用。它通常對所有的steps都是可用的。一個例子:“終止工作流”,在任何一步,都有可能終止工作流。

 

需要注重的是:這兩種actions要具備唯一的ID,而不能和其他action的ID重復。

 

接下來主要講解關于function的四種情況:

osworkflow中的function就是可以在變遷之前或者后進行執行的內容。

1、  基于java的functions

從classloader中加載java 類,通過jndi找會java類,遠程ejbs,本地ejb。

這一類型的function必須實現接口:com.opensymphony.workflow.FunctionProvider在這個接口中有一個方法execute。這個方法(execute)需要三個參數

可以自己去查api即可找到這三個參數,兩個map一個propertyset

基于java的functions

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陇川县| 嘉鱼县| 鄯善县| 武清区| 酒泉市| 巴彦县| 北宁市| 乳山市| 靖西县| 宁城县| 晴隆县| 门头沟区| 海晏县| 东光县| 虞城县| 巩义市| 娄底市| 土默特左旗| 海丰县| 屏山县| 台州市| 凤城市| 甘洛县| 苏州市| 昌吉市| 中牟县| 昂仁县| 尤溪县| 汉源县| 巴青县| 永清县| 葵青区| 沛县| 尼勒克县| 讷河市| 富源县| 静安区| 申扎县| 清涧县| 普格县| 三台县|