精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

jBPM4實現基本活動(下)

開發 后端
這一章解釋了流程定義的基礎,流程虛擬機給予的功能 以及活動實現是如何構建的。 同時,客戶端API被用來執行包含了那些活動實現的流程。

5.5. 基本流程執行

在下一個例子里,我們會結合自動活動和等待狀態。 這里例子構建了貸款審批流程,使用WaitState 和Display活動,我們剛剛創建的。 貸款流程的圖形看起來像這樣:
貸款流程

貸款流程 

圖 5.3. 貸款流程

使用Java構建流程圖形是很乏味的事情, 因為你必須在局部變量中跟蹤所有的引用。 為了解決這個問題,流程虛擬機提供了一個ProcessFactory。 ProcessFactory是一種領域特定語言(DSL),可以嵌入到Java中, 簡化流程圖形的結構。這個模型也叫做 流暢接口。

  1. ClientProcessDefinition processDefinition = ProcessFactory.build("loan")   
  2.   .activity("submit loan request").initial().behaviour(new Display("loan request submitted"))   
  3.     .transition().to("evaluate")   
  4.   .activity("evaluate").behaviour(new WaitState())   
  5.     .transition("approve").to("wire money")   
  6.     .transition("reject").to("end")   
  7.   .activity("wire money").behaviour(new Display("wire the money"))   
  8.     .transition().to("archive")   
  9.   .activity("archive").behaviour(new WaitState())   
  10.     .transition().to("end")   
  11.   .activity("end").behaviour(new WaitState())   
  12. .done();  

為了了解ProcessFactory的更多細節,可以參考 api文檔。 ProcessFactory的另一種選擇是創建一個XML語言和一個XML解析器,來表示流程。 XML解析器可以直接實例化 org.jbpm.pvm.internal.model包中的類。 這種方式一般都被流程語言選擇使用。

初始化活動submit loan request和 wire the money活動是自動活動。 在這個例子中,wire the money活動的 Display實現 使用Java API來把信息輸出到控制臺上。但是讀取器可以想象一個可選的 Activity實現,使用支付流程庫的Java API 來實現一個真實的自動支付。

上述流程的一個新執行可以像下面這樣啟動

ClientExecution execution = processDefinition.startProcessInstance();

當startExecution方法返回時, submit loan request活動會被執行, 執行會位于evaluate活動。
位于'evaluate'活動的執行

位于evaluate活動的執行 

圖 5.4. 位于'evaluate'活動的執行

現在,執行處在一個很有趣的點。這里有兩個轉移從evaluate指向外邊。 一個轉移叫approve 一個轉移叫reject。像我們上面解釋的, WaitState實現會根據執行的signal選擇轉移。 讓我們像這樣執行'approve' signal:

execution.signal("approve");

這個approve signal會導致執行選擇approve轉移 它會到達wire money活動。

在wire money活動中,信息會打印到控制臺里。 因為Display沒有調用execution.waitForSignal(), 也沒有調用其他執行傳播方法, 默認流程行為只會讓執行繼續, 使用向外的轉移到達archive活動, 這也是一個WaitState。
位于'archive'活動的執行

位于archive活動的執行 

圖 5.5. 位于'archive'活動的執行

所以只有當archive到達時, signal("approve")會返回。

另一個signal就像這樣:

  1. execution.signal("approve");  

將讓執行最終到達結束狀態。
位于'end'活動的執行

位于end活動的執行 

圖 5.6. 位于'end'活動的執行

5.6. 事件

事件位于流程定義中, 一系列的EventListener可以進行注冊。

  1. public interface EventListener extends Serializable {   
  2.  
  3.   void notify(EventListenerExecution execution) throws Exception;   
  4.  
  5. }   

事件的目的是讓開發者可以為流程添加程序邏輯, 不必改變流程圖。 這是非常有價值的機制,可以促進業務分析人員和開發者之間的協作。 業務分析人員負責描述需求。 當他們使用流程圖歸檔那些需求, 開發者可以獲得這些圖形,讓它可執行化。 事件會非常方便,向一個流程中添加技術細節(比如一些數據庫插入操作) 這些都是業務分析人員不感興趣的東西。

最常用的事件是由執行自動觸發的:

TODO: 在用戶手冊中解釋事件

事件是由流程元素和事件名稱結合而成。 用戶和流程語言也可以出發事件, 使用編程的方式在流程中使用fire方法。

  1. public interface Execution extends Serializable {   
  2.   ...   
  3.   void fire(String eventName, ProcessElement eventSource);   
  4.   ...   
  5. }  

可以把一系列的EventListeners分配給一個事件。 但是事件監聽器不能控制執行的流向, 因為它們僅僅是監聽已經執行了的執行。 這與活動處理活動的行為是不同的。 活動行為可以響應執行的傳播。

我們會創建一個PrintLn事件監聽器, 這與上面的Display活動是非常相似的。

  1. public class PrintLn implements EventListener {   
  2.  
  3.   String message;   
  4.  
  5.   public PrintLn(String message) {   
  6.     this.message = message;   
  7.   }   
  8.  
  9.   public void notify(EventListenerExecution execution) throws Exception {   
  10.     System.out.println("message");   
  11.   }   
  12. }   

多個PrintLn監聽器 會在流程中注冊。
PrintLn監聽器流程

PrintLn監聽器流程  

圖 5.7. PrintLn監聽器流程

  1. ClientProcessDefinition processDefinition = ProcessFactory.build()   
  2.   .activity("a").initial().behaviour(new AutomaticActivity())   
  3.     .event("end")   
  4.       .listener(new PrintLn("leaving a"))   
  5.       .listener(new PrintLn("second message while leaving a"))   
  6.     .transition().to("b")   
  7.       .listener(new PrintLn("taking transition"))   
  8.   .activity("b").behaviour(new WaitState())   
  9.     .event("start")   
  10.       .listener(new PrintLn("entering b"))   
  11. .done();  

***個事件演示如何為相同的事件注冊多個監聽器。 它們會根據它們指定的順序依次執行。

然后,在轉椅上,這里的事件只有一種類型。 所以在那種情況下,事件類型不需要指定, 監聽器可以直接添加到轉移上。

一個監聽器每次都會執行,當一個執行觸發事件時,如果這個監聽器被注冊了。 執行會作為一個參數提供給活動接口, 除了控制流程傳播的方法以外, 都可以被監聽器使用。

5.7. 事件傳播

事件會默認傳播給最近的流程元素。 目的是允許監聽器在流程定義或組合活動中 可以執行所有發生在流程元素中的事件。 比如這個功能允許為end事件在流程定義或一個組合活動中注冊一個事件監聽器。 這種動作會被執行,如果一個活動離開。 如果事件監聽器被注冊到一個組合活動中, 它也會被所有活動執行,當組合活動中出現了離開事件。

為了清楚地顯示這個,我們會創建一個DisplaySource事件監聽器, 這會把leaving信息和事件源 打印到控制臺。

  1. public class DisplaySource implements EventListener {   
  2.  
  3.   public void execute(EventListenerExecution execution) {   
  4.     System.out.println("leaving "+execution.getEventSource());   
  5.   }   
  6. }  

注意事件監聽器的目的不是可視化,這是為什么事件監聽器本身 不應該顯示在圖形中。一個DisplaySource事件監聽器 會作為end事件的監聽器添加到組合活動中。

下一個流程展示了DisplaySource事件監聽器如何 作為'end'事件的監聽器注冊到composite活動:
一個在組合活動中為end事件注冊了不可見的事件監聽器的流程。

一個在組合活動中為end事件注冊了不可見的事件監聽器的流程 

圖 5.8. 一個在組合活動中為end事件注冊了不可見的事件監聽器的流程。

TODO 更新代碼片段

下一步,我們會啟動一個執行。

ClientExecution execution = processDefinition.startProcessInstance();

在啟動一個新執行后,執行將在a活動中 作為初始活動。沒有活動離開,所以沒有信息被記錄下來。 下一個signal會給與執行, 導致它選擇從a到b。

execution.signal();

當signal方法返回,執行會選擇轉移 然后end事件會被a活動觸發。 那個組合活動會被傳播到組合活動和流程定義中。 因為我們的DisplaySource 監聽器放到 composite活動中, 它會接收事件,把下面的信息打印到控制臺中:

leaving activity(a)

另一個

execution.signal();

會選擇b到c的轉移。那會觸發兩個活動離開事件。 一個在b活動,一個在組合活動。 所以下面的幾行會添加到控制臺輸出中:

leaving activity(b)
leaving activity(composite)

事件傳播建立在流程定義的繼承組合結構中。 ***元素總是流程定義。 流程定義包含一系列活動。每個活動可以是葉子活動或者可以是一個組合節點, 這意味著它包含了一系列內嵌活動。 內嵌活動可以被使用,比如超級狀態或組合活動,在內嵌流程語言中,像BPEL。

所以事件模型在組合活動和上面的流程定義中的功能是相似的。 想象'Phase one'模型一個超級狀態作為一個狀態機。 然后事件傳播允許在超級狀態中注冊所有事件。 這個主意是繼承組合響應圖形展示。 如果一個'e'元素畫在另一個'p'元素中, 'p'是'e'的父節點。一個流程定義擁有一系列定義活動。 每個活動可以擁有一系列內嵌活動。 一個轉移的父節點就是它的源頭和目的的***個父節點。

如果一個事件監聽器對傳播的事件沒有興趣, 可以在構建流程使用ProcessFactory的propagationDisabled()。 下一個流程是與上面相同的流程, 除了傳播的事件會被事件監聽器禁用。 圖形還是一樣。
注冊到'end'事件的事件監聽器被禁用的流程。

注冊到end事件的事件監聽器被禁用的流程 

圖 5.9. 注冊到'end'事件的事件監聽器被禁用的流程。

使用流程工廠構建流程:

TODO 更新代碼

所以當***個signal在流程中調用時,end事件 會再次觸發在a活動上,但是現在在組合活動的事件監聽器 不會被執行,因為傳播的事件被禁用了。 禁用傳播是單獨的事件監聽器的一個屬性, 不會影響其他監聽器。事件會一直被觸發, 傳播到整個父繼承結構。

ClientExecution execution = processDefinition.startProcessInstance();

***個signal會選擇從a到b的流程。 沒有信息會被打印到控制臺。

execution.signal();

下一步,第二個signal會選擇從b到c的轉移。

execution.signal()

還是兩個end事件被觸發, 就像上面分別在b和composite活動中。 ***個事件是b活動上的 end事件。 那將被傳播給composite活動。 所以事件監聽器不會為這個事件執行,因為它已經禁用了傳播。 但是事件監聽器會在composite活動上 為end事件執行。 那是不傳播的,但是直接在composite活動上觸發。 所以事件監聽器現在會被執行 一次,為組合活動,就像下面控制臺里顯示的那樣:

leaving activity(composite)

【編輯推薦】

  1. jBPM4實現基本活動(上)
  2. jBPM與Spring整合淺析
  3. jBPM 4.0配置淺析
  4. jBPM4的架構
  5. 淺談jBPM下MySQL的配置
責任編輯:yangsai 來源: BlogJava
相關推薦

2009-06-26 09:15:31

jBPM4基本活動

2009-06-24 14:57:03

jBPM4架構

2009-06-26 13:51:49

jBPM4高級圖形執行

2009-06-29 14:42:54

2009-06-23 15:30:20

jBPMMySQL

2010-01-20 09:23:38

jBPM高級交互模式jBPM四眼原則

2019-09-19 11:52:59

Linux腳本語言Vim

2022-04-25 16:27:33

春節活動紅包除夕

2009-06-24 16:23:29

jBPM 4.0配置

2018-06-22 15:25:31

LinuxDocker容器管理

2010-05-12 16:13:04

2009-06-11 13:53:35

jBPM用戶指南

2009-06-25 17:13:51

jBPM與Spring

2010-05-14 09:57:25

MySQL數據庫

2009-06-23 15:49:00

Liferay Por

2014-07-31 13:41:36

程序員

2021-11-19 14:33:27

挖礦木馬病毒

2019-12-03 18:31:55

聯通/云時代/創新

2022-10-18 08:28:38

運營活動實現邏輯整體協作

2009-06-11 14:00:34

jBPM用戶指南jBPM范例
點贊
收藏

51CTO技術棧公眾號

精品国产一区二区三区四区在线观看| 国产精品美女久久久久高潮| 97**国产露脸精品国产| 午夜在线观看一区| aa亚洲一区一区三区| 亚洲成人www| 亚洲国产精品毛片| 国产成人无码www免费视频播放| 先锋影音久久| 久久久国产91| 3d动漫精品啪啪一区二区下载| 亚洲三级电影| 91久久精品一区二区二区| 日本一道在线观看| www在线免费观看| 成人免费视频一区| 国产在线观看一区二区三区| 国产微拍精品一区| 欧美一区二区三区久久精品茉莉花 | 亚洲欧洲三级| 欧美色18zzzzxxxxx| 国产成人精品影院| 成人两性免费视频| 91青青草视频| 亚洲美女网站| 九九精品视频在线观看| 在线观看亚洲大片短视频| 国产精品17p| 欧美日韩成人激情| 免费大片在线观看| 成人福利av| 精品成人久久av| bt天堂新版中文在线地址| 国产三级视频在线看| 91尤物视频在线观看| 成人欧美一区二区三区视频| 国产女18毛片多18精品| 美女www一区二区| 国产精品久久久久久久久久ktv | 色女人在线视频| 综合精品久久久| 亚洲精品中文字幕在线| 成人在线免费电影| 久久精品免视看| 日本高清一区| 国产一级免费在线观看| 久久久久久一级片| 欧美久久久久久| 日韩毛片在线一区二区毛片| 91丝袜呻吟高潮美腿白嫩在线观看| 国产精品一区二区免费| 免费观看国产精品| av亚洲精华国产精华| 国产精品久久久久久久久婷婷| 亚洲国产精品久久久久久6q| 国产91精品久久久久久久网曝门| 91九色蝌蚪嫩草| 亚洲av无码乱码国产精品| 国产精品亚洲一区二区三区在线 | 国产精品久久久久久久午夜| 黄色大全在线观看| 免费观看在线色综合| 成人h视频在线| 国产女主播福利| 国产精品456露脸| 国产一区二区三区无遮挡 | 上原亚衣av一区二区三区| 欧美日韩国产一二三区| 五月激情综合| 欧美激情免费视频| 中文字幕高清在线免费播放| 免费欧美在线视频| a级国产乱理论片在线观看99| 好吊色视频一区二区| 91蝌蚪porny| 视频一区二区三区免费观看| 久草免费在线| 亚洲h精品动漫在线观看| 日av中文字幕| 豆花视频一区| 日韩av在线不卡| 久久免费手机视频| 欧美+亚洲+精品+三区| 91精品国产91| 在线免费观看高清视频| 国产91在线看| 日韩精品一区二区三区丰满| 动漫一区在线| 狠狠躁18三区二区一区| gogogo高清免费观看在线视频| 视频欧美一区| 一本色道久久88亚洲综合88| 久操视频免费在线观看| 亚久久调教视频| 成人淫片在线看| 四虎影视2018在线播放alocalhost| 欧美极品少妇xxxxⅹ高跟鞋| 成年人网站国产| 成人国产一区二区三区精品麻豆| 日韩欧美国产wwwww| 欧美人与性囗牲恔配| 欧美精品aa| 国产精品久久久一区| 黄色av小说在线观看| 中文字幕乱码日本亚洲一区二区| 欧美一级黄色片视频| 黑人巨大精品欧美| 久久日文中文字幕乱码| 久久久久久噜噜噜久久久精品| 久久久久久在线观看| 国产高清久久久久| 日韩免费毛片| 成入视频在线观看| 911国产精品| 亚洲人成人无码网www国产| 欧美黄色精品| 国产日韩换脸av一区在线观看| 天堂网在线中文| 亚洲女与黑人做爰| 男女无套免费视频网站动漫| 欧美日韩夜夜| 欧美国产日韩xxxxx| 在线播放精品视频| 久久综合色天天久久综合图片| 日本福利视频在线观看| 成人免费在线观看视频| 亚洲精品黄网在线观看| 欧美成人三级在线观看| 久久精品国产99久久6| 欧美日韩亚洲免费| 国产自产自拍视频在线观看| 日韩精品一区二区三区视频| 91制片厂在线| 奇米色一区二区三区四区| 久久国产手机看片| 欧美亚洲系列| 日韩欧美精品在线视频| 日韩精品123区| 蜜臀久久久久久久| 亚洲欧美国产不卡| 精品三区视频| 中文字幕亚洲国产| 中文字幕在线视频免费| 国产欧美一区二区在线| aaa毛片在线观看| 国产aⅴ精品一区二区三区久久| 亚洲2020天天堂在线观看| 精品久久久中文字幕人妻| 中文字幕字幕中文在线中不卡视频| 黄色在线视频网| 日韩精品欧美| 成人www视频在线观看| 黄色动漫在线观看| 欧美一区二区视频在线观看| 成熟的女同志hd| 国产成人免费视| 日韩视频免费播放| 日本亚洲不卡| 日韩免费在线免费观看| 天堂资源在线中文| 欧美精品乱码久久久久久按摩| 日本激情视频一区二区三区| 精品一区二区三区久久久| 特大黑人娇小亚洲女mp4| 亚洲高清在线一区| 97在线视频国产| 国产最新视频在线| 欧美日韩黄色一区二区| 欧美精品入口蜜桃| 99精品久久只有精品| 国产三区在线视频| 日韩成人三级| 97人人干人人| 伊人色综合一区二区三区影院视频| 亚洲丝袜av一区| 国产在成人精品线拍偷自揄拍| 亚洲免费成人av| 老熟妇精品一区二区三区| 久久综合婷婷| 手机看片日韩国产| 精品三级av在线导航| 国产成人精品综合久久久| 求av网址在线观看| 精品国产伦一区二区三区免费| 毛片毛片女人毛片毛片| 中文字幕av在线一区二区三区| 色黄视频免费看| 国产日韩精品视频一区二区三区 | 激情成人在线视频| 手机av在线不卡| 成人精品视频一区二区三区| av丝袜天堂网| 国产尤物精品| 日韩欧美亚洲v片| 电影一区二区在线观看| 国产精品久久久久久超碰| 欧美精品videossex少妇| 亚洲欧美日韩中文视频| 精品国产九九九| 91久久精品日日躁夜夜躁欧美| 日韩欧美中文字幕视频| 国产日产亚洲精品系列| 无码人妻久久一区二区三区蜜桃| 日本美女一区二区三区视频| 久久久性生活视频| 97色伦图片97综合影院| 久久精品magnetxturnbtih| 精品一区二区三区免费看| 国产成人精品免高潮费视频| hd国产人妖ts另类视频| 久久影视电视剧免费网站清宫辞电视| 日本高清中文字幕二区在线| 精品成a人在线观看| 亚洲天天综合网| 日产国产高清一区二区三区| 欧美猛男性生活免费| 精品美女视频在线观看免费软件| 日韩欧美亚洲国产精品字幕久久久| 国产精华7777777| 亚洲一区二区三区四区在线 | 国产精品嫩草99a| 人妻丰满熟妇av无码久久洗澡| 国产麻豆精品theporn| 在线观看的毛片| 模特精品在线| 国产一区二区网| 欧美日韩网站| 亚洲一区三区电影在线观看| 久久99免费视频| 久草一区二区| 免费观看成人www动漫视频| 97视频热人人精品| 成人噜噜噜噜| 91在线国产电影| www.欧美视频| 成人黄色免费片| 久久免费资源| 国产欧美精品一区二区| 超碰这里只有精品| 国产精品久久久久久av下载红粉| 视频二区不卡| 国产97在线播放| 黄瓜视频成人app免费| 欧美在线性视频| 伊人成综合网站| 日韩av大片在线| 欧美人与性动交xxⅹxx| 国产精品96久久久久久| 欧美色片在线观看| 国产精品成熟老女人| 日本一道高清亚洲日美韩| 国产精品视频中文字幕91| 激情亚洲小说| 91在线色戒在线| 亚洲精品国产九九九| 国产乱码精品一区二区三区中文 | 国产精品嫩模av在线| 奇米888一区二区三区| 国产一区二区区别| 亚洲图片小说在线| 亚洲欧美色图| 国产男女免费视频| 免费中文字幕日韩欧美| 国内外免费激情视频| 奇米精品一区二区三区在线观看| 91 在线视频观看| 国产精品1区2区3区在线观看| 丰满岳乱妇一区二区| 久久毛片高清国产| 污污视频网站在线免费观看| 亚洲日本护士毛茸茸| 国产精品6666| 在线视频一区二区三区| 国产精品高潮呻吟久久久| 精品少妇一区二区三区在线播放| 少妇一级淫片免费看| 国产性色av一区二区| 成人在线观看免费网站| 91精品国产高清久久久久久久久| 深夜成人影院| 91精品黄色| 美女少妇全过程你懂的久久 | 久久国产柳州莫菁门| 国产精品私房写真福利视频| 国产suv一区二区三区| 岛国av午夜精品| 国产孕妇孕交大片孕| 亚洲精品av在线| 米奇精品一区二区三区| 2019亚洲日韩新视频| 欧美亚洲黄色| 久久久久久久久久久久久久久久av| 成人在线免费观看网站| 国内少妇毛片视频| 日本网站在线观看一区二区三区| av影片在线播放| 欧美激情综合网| 日韩黄色三级视频| 欧美日韩视频专区在线播放| 神马午夜精品95| 久久国产精品电影| yw.尤物在线精品视频| 动漫美女被爆操久久久| 久久国产精品亚洲人一区二区三区 | 国产一区二区福利视频| 永久免费成人代码| 亚洲国产精品久久久久婷婷884| 国模私拍一区二区| 亚洲国产精品专区久久| 国产黄a三级三级三级av在线看 | 青青艹视频在线| 国产呦精品一区二区三区网站| 日本xxx在线播放| 一区二区三区在线观看国产| 中国女人一级一次看片| 精品亚洲一区二区三区| av3级在线| 97操在线视频| 天天影视天天精品| 波多结衣在线观看| 久久综合九色综合欧美亚洲| 日本一区二区网站| 欧美成人精品二区三区99精品| 免费大片在线观看www| 国产精品久久久久久网站| 久久综合欧美| 国产一区亚洲二区三区| 95精品视频在线| 日本中文字幕在线免费观看| 日韩欧美你懂的| 羞羞视频在线观看不卡| 91免费欧美精品| 亚洲a一区二区三区| 国产九九在线观看| 国产嫩草影院久久久久| 免费黄色av片| 在线视频亚洲欧美| 精品免费av一区二区三区| 日韩精品最新在线观看| 日韩av成人高清| 五月激情四射婷婷| 欧美吞精做爰啪啪高潮| 91视频在线观看| 国产剧情久久久久久| 欧洲毛片在线视频免费观看| 丰满少妇在线观看| 国产精品美女一区二区三区| 中文字幕一二区| 色老头一区二区三区在线观看| 日韩三区免费| 一区二区三区欧美成人| 黄网站免费久久| 日本精品人妻无码77777| 欧美一区二区三区爱爱| 美女精品导航| 久久超碰亚洲| 葵司免费一区二区三区四区五区| 亚洲日本精品视频| 欧美日韩激情在线| 欧美6一10sex性hd| 国产亚洲情侣一区二区无| 亚洲一区国产| 国产第一页精品| 欧美成人三级电影在线| 涩涩网在线视频| 水蜜桃一区二区三区| 国内一区二区在线| 精品无码黑人又粗又大又长| 日韩成人中文字幕在线观看| 久久天堂av| 在线视频不卡一区二区| 成人免费毛片片v| 欧美日韩综合一区二区三区| 色偷偷噜噜噜亚洲男人| 911亚洲精品| 成人性视频欧美一区二区三区| 中文字幕日本不卡| 欧美 日韩 国产 成人 在线 91 | 久久在线观看| 日本在线xxx| 国产精品入口麻豆原神| 亚洲国产中文字幕在线| 国产成人亚洲综合91精品| 亚洲成人精品| 黄色在线观看av| 欧美一区午夜视频在线观看| 麻豆免费版在线观看| 亚洲在线色站| kk眼镜猥琐国模调教系列一区二区| 中文字幕在线播| 欧美丰满少妇xxxxx| 精品国产91久久久久久浪潮蜜月| 九九九九九九九九| 色综合久久中文综合久久牛| av在线麻豆| 亚洲 日韩 国产第一区| av午夜一区麻豆| a视频免费在线观看| 国产91精品在线播放| 国内精品久久久久久久97牛牛|