WEB开发网      濠电姷鏁告繛鈧繛浣冲洤纾瑰┑鐘宠壘閻ょ偓銇勯幇鍫曟闁稿鍠愰妵鍕冀閵娧佲偓鎺楁⒒閸曨偄顏柡宀嬬畱铻e〒姘煎灡绗戦梻浣筋嚙濮橈箓顢氳濠€浣糕攽閻樿宸ュΔ鐘叉啞缁傚秹宕滆绾惧ジ寮堕崼娑樺缂佹宀搁弻鐔风暋閻楀牆娈楅梺璇″枓閺呯姴鐣疯ぐ鎺濇晝闁靛牆妫欓蹇旂節閻㈤潧浠﹂柛銊ョ埣楠炴劙骞橀鑲╋紱闂佽宕樼粔顔裤亹閹烘挸浜归梺缁樺灦閿曗晛螞閸曨垱鈷戦柟鑲╁仜婵″ジ鎮楀☉鎺撴珖缂侇喖顑呴鍏煎緞濡粯娅囬梻浣瑰缁诲倿寮绘繝鍥ㄦ櫇闁稿本绋撻崢鐢告煟鎼淬垻鈯曢柨姘舵煟韫囥儳绋荤紒缁樼箖缁绘繈宕橀妸褌绱濋梻浣筋嚃閸ㄤ即宕弶鎴犳殾闁绘梻鈷堥弫鍌炴煕閳锯偓閺呮瑧妲愬Ο琛℃斀闁绘劕妯婇崵鐔封攽椤旇棄鍔ら摶鐐烘煕閺囥劌澧柛娆忕箻閺屽秹宕崟顒€娅g紓浣插亾濠㈣泛顑囩粻楣冩煙鐎涙ḿ绠橀柨娑樼У椤ㄣ儵鎮欓鍕紙闂佽鍠栫紞濠傜暦閹偊妲诲┑鈩冨絻椤兘寮诲☉銏犖╅柕澶堝労閸斿绱撴担绋库偓鍝ョ矓瑜版帒鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘 ---闂傚倸鍊烽悞锔锯偓绗涘厾娲煛閸涱厾顔嗛梺璺ㄥ櫐閹凤拷
开发学院WEB开发Jsp osworkflow descriptor 解析 重要概念 阅读

osworkflow descriptor 解析 重要概念

 2008-01-05 18:32:57 来源:WEB开发网 闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�闂傚倸鍊风粈渚€骞夐敓鐘插瀭闁汇垹鐏氬畷鏌ユ煙閹殿喖顣奸柛搴$У閵囧嫰骞掗幋婵冨亾閻㈢ǹ纾婚柟鐐灱濡插牊绻涢崱妤冃℃繛宀婁簽缁辨捇宕掑鎵佹瀸闂佺懓鍤栭幏锟�濠电姷鏁告慨顓㈠箯閸愵喖宸濇い鎾寸箘閹规洟姊绘笟鈧ḿ褍煤閵堝悿娲Ω閳轰胶鍔﹀銈嗗笂閼冲爼鍩婇弴銏$厪闁搞儮鏅涙禒褏绱掓潏鈺佷槐闁轰焦鎹囬弫鎾绘晸閿燂拷闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�  闂傚倸鍊烽懗鑸电仚缂備胶绮〃鍛村煝瀹ュ鍗抽柕蹇曞У閻庮剟姊虹紒妯哄闁诲繑姘ㄩ埀顒佸嚬閸撶喎顫忓ú顏勫瀭妞ゆ洖鎳庨崜浼存⒑闁偛鑻晶顔剧磼婢跺﹦绉虹€殿喖顭锋俊姝岊槷闁稿鎹囧Λ鍐ㄢ槈濞嗗繑娈橀梻浣风串缂嶁偓濞存粠鍓熼崺鈧い鎺戝€归弳顒勬煕鐎n亷韬€规洑鍗冲鍊燁槾闁哄棴绠撻弻銊╂偆閸屾稑顏�
核心提示: 欢迎与我交流(yun15291li@hotmail.com) 在这篇文章中,主要介绍osworkflow的核心概念以及重要的部分,osworkflow descriptor 解析 重要概念,让大家对osworkflow有个比较全面的熟悉,在osworkflow中最最核心的东西就是工作流定义的xml文件,这一类型的fu

 

欢迎与我交流(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

Tags:osworkflow descriptor 解析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接