日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers

發(fā)布時間:2023/12/10 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

事件機制從Activiti 5.15開始引入,這非常棒,他可以讓你實現(xiàn)委托。

可以通過配置添加事件監(jiān)聽器,也可以通過Runtime API加入注冊事件。

所有的事件參數(shù)子類型都來自org.activiti.engine.delegate.event.ActivitiEvent

包含的信息:

  • type
  • executionId
  • processInstanceId
  • processDefinitionId

?

事件監(jiān)聽

其中,JOB_EXECUTION_SUCCESS 和JOB_EXECUTION_FAILURE 是ActivitiEvent的?type 信息,即事件類型

public class MyEventListener implements ActivitiEventListener {@Overridepublic void onEvent(ActivitiEvent event) {switch (event.getType()) {case JOB_EXECUTION_SUCCESS:System.out.println("A job well done!");break;case JOB_EXECUTION_FAILURE:System.out.println("A job has failed...");break;default:System.out.println("Event received: " + event.getType());}}@Overridepublic boolean isFailOnException() {// The logic in the onEvent method of this listener is not critical, exceptions// can be ignored if logging fails...return false;} }

?

org.activiti.engine.delegate.event.BaseEntityEventListener

BaseEntityEventListener 是entity-events事件監(jiān)聽器的基類,不需要類型檢查,可以用來監(jiān)聽一種特定類型的實體或所有實體相關(guān)的事件:

  • onCreate(..)
  • onUpdate(..)
  • onDelete(..)
  • onEntityEvent(..)

?

通過配置注冊事件實例

配置方法:

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">...<property name="eventListeners"><list><bean class="org.activiti.engine.example.MyEventListener" /></list></property> </bean>

屬性eventListeners 用來設置org.activiti.engine.delegate.event.ActivitiEventListener 的實例,注意:它是列表,可以多個。

typedEventListeners?用來設置基于事件類型分發(fā)的ActivitiEventListener?的實例:

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">...<property name="typedEventListeners"><map><entry key="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE" ><list><bean class="org.activiti.engine.example.MyJobEventListener" /></list></entry></map></property> </bean>

?

通過Runtime API注冊事件實例

方法是通過RuntimeService

void addEventListener(ActivitiEventListener listenerToAdd);void addEventListener(ActivitiEventListener listenerToAdd, ActivitiEventType... types);void removeEventListener(ActivitiEventListener listenerToRemove);

?

通過流程定義注冊事件實例

可以將事件監(jiān)聽器添加到一個特定的流程定義中,偵聽器只會被調(diào)用與流程定義相關(guān)的事件,用于拋出message/signal/error 到BPMN event
而processEngineConfiguration配置的方法是全局的。
下面的例子:
第一個監(jiān)聽器將接收任何類型的事件,基于一個完全限定的類名稱(fully-qualified class name)的監(jiān)聽器實現(xiàn)。
第二個監(jiān)聽器只通知當一個作業(yè)成功執(zhí)行或失敗時,使用已被定義在進程引擎配置的bean屬性中的監(jiān)聽器。

<process id="testEventListeners"><extensionElements><activiti:eventListener class="org.activiti.engine.test.MyEventListener" /><activiti:eventListener delegateExpression="${testEventListener}" events="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE" /></extensionElements>...</process>

BaseEntityEventListener 也可以注冊:

entityType實體類型包含:

  • attachment
  • comment
  • execution
  • identity-link
  • job
  • process-instance
  • process-definition
  • task
<process id="testEventListeners"><extensionElements><activiti:eventListener class="org.activiti.engine.test.MyEventListener" entityType="task" /><activiti:eventListener delegateExpression="${testEventListener}" events="ENTITY_CREATED" entityType="task" /></extensionElements>...</process>
throwing BPMN events
<process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="signal" signalName="My signal" events="TASK_ASSIGNED" /></extensionElements> </process><process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="globalSignal" signalName="My signal" events="TASK_ASSIGNED" /></extensionElements> </process><process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="message" messageName="My message" events="TASK_ASSIGNED" /></extensionElements> </process><process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="error" errorCode="123" events="TASK_ASSIGNED" /></extensionElements> </process>

只能通過RuntimeService 分發(fā):

void dispatchEvent(ActivitiEvent event);

?

事件類型

事件名稱 ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 事件類型

ENGINE_CREATED監(jiān)聽器監(jiān)聽的流程引擎已經(jīng)創(chuàng)建完畢,并準備好接受API調(diào)用。org.activiti...ActivitiEvent
ENGINE_CLOSED監(jiān)聽器監(jiān)聽的流程引擎已經(jīng)關(guān)閉,不再接受API調(diào)用。org.activiti...ActivitiEvent
ENTITY_CREATED創(chuàng)建了一個新實體。實體包含在事件中。org.activiti...ActivitiEntityEvent
ENTITY_INITIALIZED創(chuàng)建了一個新實體,初始化也完成了。如果這個實體的創(chuàng)建會包含子實體的創(chuàng)建,這個事件會在子實體都創(chuàng)建/初始化完成后被觸發(fā),這是與?ENTITY_CREATED的區(qū)別。org.activiti...ActivitiEntityEvent
ENTITY_UPDATED更新了已存在的實體。實體包含在事件中。org.activiti...ActivitiEntityEvent
ENTITY_DELETED刪除了已存在的實體。實體包含在事件中。org.activiti...ActivitiEntityEvent
ENTITY_SUSPENDED暫停了已存在的實體。實體包含在事件中。會被ProcessDefinitions, ProcessInstances 和 Tasks拋出。org.activiti...ActivitiEntityEvent
ENTITY_ACTIVATED激活了已存在的實體,實體包含在事件中。會被ProcessDefinitions, ProcessInstances 和 Tasks拋出。org.activiti...ActivitiEntityEvent
JOB_EXECUTION_SUCCESS作業(yè)執(zhí)行成功。job包含在事件中。org.activiti...ActivitiEntityEvent
JOB_EXECUTION_FAILURE作業(yè)執(zhí)行失敗。作業(yè)和異常信息包含在事件中。org.activiti...ActivitiEntityEvent?and?org.activiti...ActivitiExceptionEvent
JOB_RETRIES_DECREMENTED因為作業(yè)執(zhí)行失敗,導致重試次數(shù)減少。作業(yè)包含在事件中。org.activiti...ActivitiEntityEvent
TIMER_FIRED觸發(fā)了定時器。job包含在事件中。org.activiti...ActivitiEntityEvent
JOB_CANCELED取消了一個作業(yè)。事件包含取消的作業(yè)。作業(yè)可以通過API調(diào)用取消, 任務完成后對應的邊界定時器也會取消,在新流程定義發(fā)布時也會取消。org.activiti...ActivitiEntityEvent
ACTIVITY_STARTED一個節(jié)點開始執(zhí)行org.activiti...ActivitiActivityEvent
ACTIVITY_COMPLETED一個節(jié)點成功結(jié)束org.activiti...ActivitiActivityEvent
ACTIVITY_SIGNALED一個節(jié)點收到了一個信號org.activiti...ActivitiSignalEvent
ACTIVITY_MESSAGE_RECEIVED一個節(jié)點收到了一個消息。在節(jié)點收到消息之前觸發(fā)。收到后,會觸發(fā)?ACTIVITY_SIGNAL或?ACTIVITY_STARTED,這會根據(jù)節(jié)點的類型(邊界事件,事件子流程開始事件)org.activiti...ActivitiMessageEvent
ACTIVITY_ERROR_RECEIVED一個節(jié)點收到了一個錯誤事件。在節(jié)點實際處理錯誤之前觸發(fā)。 事件的?activityId對應著處理錯誤的節(jié)點。 這個事件后續(xù)會是?ACTIVITY_SIGNALLED或?ACTIVITY_COMPLETE, 如果錯誤發(fā)送成功的話。org.activiti...ActivitiErrorEvent
UNCAUGHT_BPMN_ERROR拋出了未捕獲的BPMN錯誤。流程沒有提供針對這個錯誤的處理器。 事件的?activityId為空。org.activiti...ActivitiErrorEvent
ACTIVITY_COMPENSATE一個節(jié)點將要被補償。事件包含了將要執(zhí)行補償?shù)墓?jié)點id。org.activiti...ActivitiActivityEvent
VARIABLE_CREATED創(chuàng)建了一個變量。事件包含變量名,變量值和對應的分支或任務(如果存在)。org.activiti...ActivitiVariableEvent
VARIABLE_UPDATED更新了一個變量。事件包含變量名,變量值和對應的分支或任務(如果存在)。org.activiti...ActivitiVariableEvent
VARIABLE_DELETED刪除了一個變量。事件包含變量名,變量值和對應的分支或任務(如果存在)。org.activiti...ActivitiVariableEvent
TASK_ASSIGNED任務被分配給了一個人員。事件包含任務。org.activiti...ActivitiEntityEvent
TASK_CREATED創(chuàng)建了新任務。它位于?ENTITY_CREATE事件之后。當任務是由流程創(chuàng)建時, 這個事件會在TaskListener執(zhí)行之前被執(zhí)行。org.activiti...ActivitiEntityEvent
TASK_COMPLETED任務被完成了。它會在?ENTITY_DELETE事件之前觸發(fā)。當任務是流程一部分時,事件會在流程繼續(xù)運行之前, 后續(xù)事件將是?ACTIVITY_COMPLETE,對應著完成任務的節(jié)點。org.activiti...ActivitiEntityEvent
TASK_TIMEOUT任務已超時,在?TIMER_FIRED事件之后,會觸發(fā)用戶任務的超時事件, 當這個任務分配了一個定時器的時候。org.activiti...ActivitiEntityEvent
PROCESS_COMPLETED流程已結(jié)束。在最后一個節(jié)點的?ACTIVITY_COMPLETED事件之后觸發(fā)。 當流程到達的狀態(tài),沒有任何后續(xù)連線時, 流程就會結(jié)束。org.activiti...ActivitiEntityEvent
MEMBERSHIP_CREATED用戶被添加到一個組里。事件包含了用戶和組的id。org.activiti...ActivitiMembershipEvent
MEMBERSHIP_DELETED用戶被從一個組中刪除。事件包含了用戶和組的id。org.activiti...ActivitiMembershipEvent
MEMBERSHIPS_DELETED所有成員被從一個組中刪除。在成員刪除之前觸發(fā)這個事件,所以他們都是可以訪問的。 因為性能方面的考慮,不會為每個成員觸發(fā)單獨的?MEMBERSHIP_DELETED事件。org.activiti...ActivitiMembershipEvent

轉(zhuǎn)載于:https://www.cnblogs.com/starcrm/p/5948278.html

總結(jié)

以上是生活随笔為你收集整理的Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。