欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
osworkflow descriptor 解析 重要概念

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

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

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

1、  一個(gè)工作流由多個(gè)steps組成

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

3、  每個(gè)action都要包括至少一個(gè)unconditional result0或多個(gè)conditional results。

4、  如果設定了多個(gè)concitioanl results,所有當中的第一個(gè)將被執行,如果沒(méi)有設定conditional results或者沒(méi)有conditions滿(mǎn)足,那么執行unconditional result

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

6、  如果一個(gè)result引起一個(gè)split,這個(gè)result會(huì )指定split的屬性,以指向一個(gè)split元素。

7、  一個(gè)split可以有一個(gè)或者多個(gè)unconditional results,但是沒(méi)有conditional results。Unconditional results。Unconditional results需要指定steps。

8、  一個(gè)propertyset是一個(gè)持久層數據的map,在全局應用中都是可用的。

9、  還有一種叫做transientVarsmap,它只存活于一個(gè)工作流調用過(guò)程中的一定的生命周期,它將會(huì )對所有functionsconditions,包括所有的registers,user input,以及工作流上下文狀態(tài)等起作用。

工作流概念:

下面開(kāi)始理解osworkflow的核心概念:

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

Unconditional result conditional results

這里做以簡(jiǎn)單介紹,對于每個(gè)action,要求至少存在一個(gè)Unconditional  result,一個(gè)result也就是通過(guò)一系列指示來(lái)告訴osworkflow下一步的任務(wù)是干什么。這種調用使得產(chǎn)生變遷進(jìn)而從一個(gè)state到另外一個(gè)state。這種概念是在UML的狀態(tài)機里有講,希望了解狀態(tài)機相關(guān)概念的可以到UML相關(guān)書(shū)籍中查看。

Conditional resultunconditional result的一種擴展。不同的地方在于他需要一些子元素:condition。用and or來(lái)標志各個(gè)condition之間的關(guān)系。

Conditional unconditional 的最終result可以產(chǎn)生三種效應或者說(shuō)是結果:

1、  一個(gè)新的step/status

2、  一個(gè)split,出現一或多個(gè)step/status

3、  一個(gè)join,一個(gè)新的step/status

普遍的,一個(gè)split或者join不能result出另外一個(gè)splitjoin。

一個(gè)step/status result可以按下面方式簡(jiǎn)單的設定:

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

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

從一個(gè)state split 到多個(gè) 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是比較復雜的用例。一個(gè)典型的join看起來(lái)大致如下:

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

上面這段代碼中最需要關(guān)心的就應該是jn。當join實(shí)際發(fā)生的時(shí)候,這個(gè)特殊的變量jn可以被用來(lái)建立表達式。本質(zhì)上,可以很容易理解出這個(gè)段xml的意思就是:當step68finish時(shí)候在此處進(jìn)行join。

Functions部分:

Osworkflowfunction來(lái)定義商業(yè)邏輯和一些需要定義執行的服務(wù)。用functions標簽來(lái)表示。

兩種functionsprepost

Pre 是在工作流進(jìn)行某個(gè)變遷之前需要被執行的。一個(gè)比較好的例子:為了在resultstate變更產(chǎn)生,而先建立caller。

Post是在之后執行的。如當某一個(gè)state改變后,發(fā)送一email到某處。

Functions可以在兩個(gè)分別的地方被指定:stepsactions。

Trigger Functions

Validators

Registers

一個(gè)function:用來(lái)返回一個(gè)用以被其他普通對象能夠容易訪(fǎng)問(wèn)得到的對象。尤其是指workflow 的實(shí)體類(lèi)。返回的對象類(lèi)型不閑典型的例子如: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

變量

授權與限權

自動(dòng)執行的action

設置auto=true

Common and global actions

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

基本思想就是簡(jiǎn)單。這兩種actions是在最開(kāi)始就進(jìn)行說(shuō)明的,在initial-actions元素后面。

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

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

<common-action id="100" />

例如一個(gè)“send mail”的action

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

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

接下來(lái)主要講解關(guān)于function的四種情況:

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

1、  基于javafunctions

classloader中加載java 類(lèi),通過(guò)jndi找會(huì )java類(lèi),遠程ejbs,本地ejb。

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

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

基于javafunctions在以下類(lèi)型是可用的。

1)、class

對于一個(gè)class function,classloader必須能夠知道你的function的類(lèi)名。如下:

<function type="class">
      <arg name="class.name">com.acme.FooFunction</arg>
      <arg name="message">The message is ${message}</arg>

</function>

2)、jndi

jndi function class想類(lèi)似,當然必須已經(jīng)確實(shí)存在于jndi樹(shù)中,在這里,需要一個(gè)jndi.location來(lái)進(jìn)行配置:

<function type="jndi">
      <arg name="jndi.location">java:/FooFunction</arg>
      <arg name="message">The message is ${message}</arg>

</function>

3)、remote-ejb

這部分跳過(guò)

<function type="remote-ejb">
      <arg name="ejb.location">java:/comp/env/FooEJB</arg>
      <arg name="message">The message is ${message}</arg>

</function>

(4)、local-ejb

跳過(guò)

<function type="local-ejb">
      <arg name="ejb.location">java:/comp/env/FooEJB</arg>
      <arg name="message">The message is ${message}</arg>

</function>

2、  beanshell function

osworkflow支持beanshell,這是一種腳本語(yǔ)言??梢栽?/span>http://www.beanshell.org/來(lái)查看beanshell的相關(guān)內容。

在這種情況下,需要將xml過(guò)程定義中的type設置成beanshell。另外還需要有個(gè)一個(gè)參數名字為script的參數,此參數值是實(shí)際需要被執行的。

例如:

<function type="beanshell">
      <arg name="script">  
            System.out.println("Hello, World!");
      </arg>

</function>

三種變量:entry,context,store

entry:實(shí)現com.opensymphony.workflow.spi.WorkflowEntry并且表示工作流實(shí)例。

Contextcom.opensymphony.workflow.WorkflowContext。允許beanshell functions回滾事務(wù)或者確定callername

Storecom.opensymphony.workflow.WorkflowStore。允許function訪(fǎng)問(wèn)工作流的持久存儲層。

<function type="beanshell">
      <arg name="script">  
            propertySet.setString("world", "Earth");
      </arg>
</function>
<function type="beanshell">
      <arg name="script">  
            System.out.println("Hello, "+propertySet.getString("world"));
      </arg>

</function>

輸出結果是“hello,earth”因為任何存儲在propertyset中的變量將可以在整個(gè)工作流中被持久使用。

3、  BSF function(perlscript, vbscript, javascript)

除了上面說(shuō)過(guò)的兩種typefunction。還有bsf類(lèi)型的function。

BSFbean scripting framework)是IBM的一個(gè)組織做的一個(gè)通用環(huán)境可以使用VBScript, Perlscript, Python, and JavaScript

<function type="bsf">
      <arg name="source">foo.pl</arg>
      <arg name="row">0</arg>
      <arg name="col">0</arg>
      <arg name="script">
            print $bsf->lookupBean("propertySet").getString("foo");
      </arg>

</function>

個(gè)人覺(jué)得這部分可以先跳過(guò)去,知道有這么一回事就可以了。

4、  Utility Function

可以到apicom.opensymphony.workflow.util這部分查看。下面只是列出一些主要的功能。相當于java.util里的東西。

主要用于創(chuàng )建動(dòng)態(tài)的工作流定義,主要是包括一些實(shí)用功能,如caller、webworkexecutor、ejbinvoker、jmsmessage、mostrecentowner、schedulejob、unschdulejob、sendmail。

這部分碰到不懂就去查api是個(gè)好辦法,這里就不去多寫(xiě)的。

validators:

functions類(lèi)似,osworkflow有下面幾種不同形式的validatorsjava-based,beanshell,和bsf。Java-basedvalidators必須實(shí)現com.opensymphony.workflow.Validator接口(如果是remote-ejb,則需實(shí)現com.opensymphony.workflow.ValidatorRemote接口)。Java-based這種情況是通過(guò)拋出個(gè)InvalidInputException異常表明一個(gè)輸入是不合法的,并且停止工作流action。

beanshellbsf中,有一點(diǎn)小小不同,即使異??梢栽谀_本中拋出,但是不能抵達到jre。所以在beanshellbsf中用錯誤信息來(lái)完成。邏輯如下:

u       如果返回值是一個(gè)InvalidInputException對象,這個(gè)對象立刻拋出到client。

u       如果返回值是一個(gè)map,map被用做一個(gè)error/errormessage對。

u       如果返回值是一個(gè)String [],偶數字被做為key。奇數做為value來(lái)構造一個(gè)map

u       其他情況,把值轉換成string并且作為一個(gè)普通的錯誤信息來(lái)添加。

Registers:

Register是一個(gè)在工作流定義文件中用來(lái)動(dòng)態(tài)注冊的運行時(shí)(塊)

它也是和validators,functions差不多,都是能夠以java-based,beanshellbsf不同格式出現。

Conditions:

Conditionsosworkflow小小不相似之處在于:在bsf或者beanshell腳本中,有一個(gè)額外的對象叫做“jn”。這個(gè)jn來(lái)源于com.opensymphony.workflow.joinnodes。它的作用就是連接條件(join-conditions)。除此之外,condition必須有一個(gè)返回值(true or false)。

Condition必須被conditions包含成為其子元素。Conditions有一個(gè)屬性type??梢詾?/span>and或者or。And表示:所有condition元素必須都為true或者false。Or表示只要有一個(gè)condition元素為true。如果你需要更多復雜的condition邏輯??梢钥紤]實(shí)現condition或者conditionremote接口,beanshell,bsf。如果只有一個(gè)condition子元素的時(shí)候,conditionstype屬性值可以省略。

2.7中??梢郧短?/span>conditions,這樣可以讓你實(shí)現更為復雜的商業(yè)邏輯。

下面是一個(gè)寫(xiě)標準的conditions

OSUserGroupCondition、StatusCondition、AllowOwnerOnlyCondition、DenyOwnerCondition

Soap支持,暫時(shí)略!因為暫時(shí)可能涉及不到!

Gui Designer部分略。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
工作流(OSWorkFLOW)的例子改造
OSWorkflow使用問(wèn)答
JR - 精品文章 - OSWorkFlow分析
過(guò)濾器和攔截器的比較及未登錄用戶(hù)權限限制的實(shí)現
SAP與外部WebService接口的鏈接
愛(ài)的咒語(yǔ)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久