邊界事件
邊界事件是綁定在活動上的“捕獲型”事件箱蟆,會一直監(jiān)聽所有處于活動中的某種事件的觸發(fā)沟绪,在捕獲到事件之后中斷活動,然后從邊界事件類型的輸出流繼續(xù)執(zhí)行空猜。
- 一旦邊界事件觸發(fā)绽慈,當(dāng)前活動就會被中斷恨旱,然后按照邊界事件之后的輸出流繼續(xù)執(zhí)行。
- 邊界事件和所關(guān)聯(lián)的活動有一個特殊的關(guān)系附加坝疼,而且一個活動只能綁定一個邊界事件搜贤,每個邊界事件類型都是聽過屬性 attachedToRef 指定附加到拋出邊界事件的活動上。
對應(yīng)的XML:
<boundaryEvent attachedToRef="someActivity" id="boundaryId" cancelActivity="false">
</boundaryEvent>
定時器邊界事件
定時器邊界事件和定時器啟動事件類似钝凶,只不過兩者的應(yīng)用場景不同仪芒,定時器啟動事件應(yīng)用于在一個指定的時間啟動一個新的流程,而定時器邊界事件需要附屬在一個非自動任務(wù)耕陷,調(diào)用活動掂名,子流程上,在上游任務(wù)執(zhí)行完成之后開始倒計時預(yù)設(shè)時間哟沫。
對于的XML
<boundaryEvent attachedToRef="someActivity" id="boundaryId" cancelActivity="false">
<timerEventDefinition>
<timeDuration>P3D</timeDuration>
</timerEventDefinition>
</boundaryEvent>
對應(yīng)的示例圖:
異常邊界事件
異常邊界事件用來捕獲嵌入子流程或者調(diào)用活動拋出的異常饺蔑。異常在拋出之后被主流程的異常邊界事件捕獲,同時嵌入子流程或者調(diào)用活動中的活動也被中斷執(zhí)行嗜诀。
對應(yīng)的XML
<subProcess id="subProcess1">
<endEvent id="endEvent" name="error">
<errorEventDefinition errorRef="A001">
</errorEventDefinition>
</endEvent>
</subProcess>
<boundaryEvent attachedToRef="subProcess1" id="boundaryId1">
<errorEventDefinition errorRef="A001"></errorEventDefinition>
</boundaryEvent>
對應(yīng)的實例圖:
信號邊界事件
信號邊界事件可以捕獲流程執(zhí)行過程中拋出的信號猾警,可以附加在各自活動和子流程上。信號邊界事件是全局的隆敢。
取消邊界事件
取消邊界事件是專門針對事物子流程所設(shè)立的发皿,用來捕獲子流程中拋出的取消事件。
補(bǔ)償邊界事件
補(bǔ)償邊界事件用于事物子流程中針對事物失敗后的業(yè)務(wù)邏輯進(jìn)行補(bǔ)償筑公。
中間捕獲事件
中間捕獲事件就是流程的攔路虎雳窟,根據(jù)事件類型的不同需要使用不同的方式才能繼續(xù)執(zhí)行后續(xù)的輸出流活動。
定時器中間捕獲事件
定時器中間捕獲事件和定時啟動事件匣屡,定時器邊界事件的功能封救,配置參數(shù)的方式都類似,都是在一個特定的時間或者時間間隔之后被觸發(fā)捣作。
信號中間捕獲事件
信號中間捕獲事件用來捕獲被當(dāng)前流程或者其他流程拋出的信號事件誉结,捕獲的條件就是信號的ID一致。
消息中間捕獲事件
消息中間捕獲事件和信號中間捕獲事件類似券躁,不同的是信號事件是廣播式傳播惩坑,而消息中間捕獲事件是定向一對一的傳遞。
中間拋出事件
中間拋出事件和中間捕獲事件是兩個相互依賴的關(guān)系也拜,中間捕獲事件需要有事件拋出才能被觸發(fā)以舒,而中間拋出司機(jī)需要有對于的捕獲事件接收才有意義。
空中間拋出事件
空中間拋出事件是BPMN規(guī)范中沒有任務(wù)功能的事件慢哈,因此執(zhí)行到空中間拋出事件時直接跳過蔓钟。
信號間拋出事件
信號中間拋出事件可以拋出一個信號,然后交給引擎?zhèn)鞑バ盘柺录?br> 事件類型太多了我也搞不清到底有啥用卵贱,先把它羅列出來滥沫,等到真正使用的時候侣集,再來好好查一下。
監(jiān)聽器
監(jiān)聽器是activiti 在BPMN規(guī)范的基礎(chǔ)上擴(kuò)展的功能兰绣,是業(yè)務(wù)和流程非浸入式的粘合劑世分。
監(jiān)聽器分為兩類:執(zhí)行監(jiān)聽器和任務(wù)監(jiān)聽器。
執(zhí)行監(jiān)聽器
執(zhí)行監(jiān)聽器允許在執(zhí)行過程中執(zhí)行Java代碼缀辩。
執(zhí)行監(jiān)聽器可以捕獲事件的類型:
流程實例啟動臭埋,結(jié)束
輸出流捕獲
獲取啟動,結(jié)束
路由開始雌澄,結(jié)束
中間事件開始斋泄,結(jié)束
觸發(fā)開始事件杯瞻,觸發(fā)結(jié)束事件
監(jiān)聽器執(zhí)行類 | 屬性說明和實例 | |
---|---|---|
class | 需要實現(xiàn)接口 ExecutionListener <activiti:executionListener event="end" class="com.xiaoyuxixi.TaskListener"></activiti:executionListener> | |
expression | 定義一個表達(dá)式镐牺,類似于el表達(dá)式 <activiti:executionListener event="end" expression="${pojo.method(execution.eventName)}"></activiti:executionListener> | |
delegateExpression | 利用spring代理實現(xiàn),<activiti:executionListener event="end" delegateExpression="${procinstCompleteListener}"></activiti:executionListener> |
選擇一種就好魁莉,通常我們都使用最后一種睬涧。
任務(wù)監(jiān)聽器
相對于執(zhí)行監(jiān)聽器的使用范圍,任務(wù)監(jiān)聽器的范圍就要小得多旗唁,因為他只能用于用戶任務(wù)畦浓。
- create 在任務(wù)被創(chuàng)建且所有任務(wù)屬性設(shè)置完成之后才觸發(fā)
- assignment 在任務(wù)被分配給某個辦理人之后觸發(fā),需要注意的是检疫,assignment事件總是在create事件被觸發(fā)之前觸發(fā)
- 在配置了監(jiān)聽器的上一個任務(wù)完成時觸發(fā)讶请,也就是在運(yùn)行時數(shù)據(jù)被刪除的時候觸發(fā)。
監(jiān)聽器執(zhí)行類 | 屬性說明和實例 | |
---|---|---|
class | 需要實現(xiàn)接口 TaskListener | |
expression | 定義一個表達(dá)式屎媳,類似于el表達(dá)式 <taskListener event="end" expression="${pojo.method(execution.eventName)}"></activiti:executionListener> | |
delegateExpression | 利用spring代理實現(xiàn)夺溢,<activiti:taskListener event="assignment" delegateExpression="${taskAssignmentListener}" </activiti:taskListener> |
好了,activiti理論部門終于告一段落了烛谊,后面都是對這些理論的一些實踐风响。理論確實枯燥了些,可是沒有理論的指導(dǎo)丹禀,也出不了實踐的真知状勤。