Flowable6.8.0 流程监听事件Engine支持的事件类型

Flowable流程事件Engine支持的事件类型

关于流程定义监听器的说明
  • 事件监听器只能作为extensionElements的子元素,声明在process元素上。不能在个别节点(activity)上定义(事件)监听器。
  • delegateExpression中的表达式,与其他表达式(例如在网关中的)不一样,不可以访问执行上下文。只能够引用在流程引擎配置中beans参数定义的bean;或是在使用spring(且没有定义beans参数)时,引用任何实现了监听器接口的spring bean。
  • 使用监听器的class属性时,只会创建唯一一个该类的实例。请确保监听器实现不依赖于成员变量,或确保多线程/上下文的使用安全。
  • 如果events属性使用了不合法的事件类型,或者使用了不合法的throwEvent值,会在流程定义部署时抛出异常(导致部署失败)。如果classdelegateExecution指定了不合法的值(不存在的类,不存在的bean引用,或者代理类没有实现监听器接口),在流程启动(或该流程定义的第一个有效事件分发给这个监听器)时,会抛出异常。请确保引用的类在classpath中,并且保证表达式能够解析为有效的实例。
通过API分发事件

可以通过API提供事件分发机制,向任何在引擎中注册的监听器分发自定义事件。建议(但不强制)只分发CUSTOM类型的FlowableEvents。使用RuntimeService分发事件:

/**



 * 将给定事件分发给所有注册监听器。



 * @param event 要分发的事件。



 *



 * @throws FlowableException 当分发事件发生异常,或者{@link FlowableEventDispatcher}被禁用。



 * @throws FlowableIllegalArgumentException 当给定事件不可分发



 */



 void dispatchEvent(FlowableEvent event);
支持的事件类型

下表列出引擎中的所有事件类型。每种类型对应org.flowable.engine.common.api.delegate.event.FlowableEventType中的一个枚举值。

事件名称说明事件类
ENGINE_CREATED本监听器所属的流程引擎已经创建,并可以响应API调用。org.flowable…FlowableEvent
ENGINE_CLOSED本监听器所属的流程引擎已经关闭,不能再对该引擎进行API调用。org.flowable…FlowableEvent
ENTITY_CREATED新的实体已经创建。该实体包含在本事件里。org.flowable…FlowableEntityEvent
ENTITY_INITIALIZED新的实体已经创建并完全初始化。如果任何子实体作为该实体的一部分被创建,本事件会在子实体创建/初始化后触发,与 ENTITY_CREATE 事件相反。org.flowable…FlowableEntityEvent
ENTITY_UPDATED实体已经更新。该实体包含在本事件里。org.flowable…FlowableEntityEvent
ENTITY_DELETED实体已经删除。该实体包含在本事件里。org.flowable…FlowableEntityEvent
ENTITY_SUSPENDED实体已经暂停。该实体包含在本事件里。ProcessDefinitions(流程定义), ProcessInstances(流程实例)与Tasks(任务)会分发本事件。org.flowable…FlowableEntityEvent
ENTITY_ACTIVATED实体已经激活。该实体包含在本事件里。ProcessDefinitions, ProcessInstances与Tasks会分发本事件。org.flowable…FlowableEntityEvent
JOB_EXECUTION_SUCCESS作业已经成功执行。该作业包含在本事件里。org.flowable…FlowableEntityEvent
JOB_EXECUTION_FAILURE作业执行失败。该作业与异常包含在本事件里。org.flowable…FlowableEntityEventorg.flowable…FlowableExceptionEvent
JOB_RETRIES_DECREMENTED作业重试次数已经由于执行失败而减少。该作业包含在本事件里。org.flowable…FlowableEntityEvent
TIMER_SCHEDULED已创建一个定时作业,并预计在未来时间点执行。org.flowable…FlowableEntityEvent
TIMER_FIRED定时器已经触发。org.flowable…FlowableEntityEvent
JOB_CANCELED作业已经取消。该作业包含在本事件里。作业会由于API调用取消,任务完成导致关联的边界定时器取消,也会由于新流程定义的部署而取消。org.flowable…FlowableEntityEvent
ACTIVITY_STARTED节点开始执行org.flowable…FlowableActivityEvent
ACTIVITY_COMPLETED节点成功完成org.flowable…FlowableActivityEvent
ACTIVITY_CANCELLED节点将要取消。节点的取消有三个原因(MessageEventSubscriptionEntity, SignalEventSubscriptionEntity, TimerEntity)。org.flowable…FlowableActivityCancelledEvent
ACTIVITY_SIGNALED节点收到了一个信号org.flowable…FlowableSignalEvent
ACTIVITY_MESSAGE_RECEIVED节点收到了一个消息。事件在节点接收消息前分发。节点接收消息后,会为该节点分发 ACTIVITY_SIGNALACTIVITY_STARTED 事件,取决于其类型(边界事件,或子流程启动事件)。org.flowable…FlowableMessageEvent
ACTIVITY_MESSAGE_WAITING一个节点已经创建了一个消息事件订阅,并正在等待接收消息。org.flowable…FlowableMessageEvent
ACTIVITY_MESSAGE_CANCELLED一个节点已经取消了一个消息事件订阅,因此接收这个消息不会再触发该节点。org.flowable…FlowableMessageEvent
ACTIVITY_ERROR_RECEIVED节点收到了错误事件。在节点实际处理错误前分发。该事件的activityId为处理错误的节点。如果错误成功传递,后续会为节点发送 ACTIVITY_SIGNALLEDACTIVITY_COMPLETE 消息。org.flowable…FlowableErrorEvent
UNCAUGHT_BPMN_ERROR抛出了未捕获的BPMN错误。流程没有该错误的处理器。该事件的activityId为空。org.flowable…FlowableErrorEvent
ACTIVITY_COMPENSATE节点将要被补偿(compensate)。该事件包含将要执行补偿的节点id。org.flowable…FlowableActivityEvent
MULTI_INSTANCE_ACTIVITY_STARTED多实例节点开始执行org.flowable…FlowableMultiInstanceActivityEvent
MULTI_INSTANCE_ACTIVITY_COMPLETED多实例节点成功完成org.flowable…FlowableMultiInstanceActivityEvent
MULTI_INSTANCE_ACTIVITY_CANCELLED多实例节点将要取消。多实例节点的取消有三个原因(MessageEventSubscriptionEntity, SignalEventSubscriptionEntity, TimerEntity)。org.flowable…FlowableMultiInstanceActivityCancelledEvent
VARIABLE_CREATED流程变量已经创建。本事件包含变量名、取值,及关联的执行和任务(若有)。org.flowable…FlowableVariableEvent
VARIABLE_UPDATED变量已经更新。本事件包含变量名、取值,及关联的执行和任务(若有)。org.flowable…FlowableVariableEvent
VARIABLE_DELETED变量已经删除。本事件包含变量名、最后取值,及关联的执行和任务(若有)。org.flowable…FlowableVariableEvent
TASK_ASSIGNED任务已经分派给了用户。该任务包含在本事件里。org.flowable…FlowableEntityEvent
TASK_CREATED任务已经创建。本事件在 ENTITY_CREATE 事件之后分发。若该任务是流程的一部分,本事件会在任务监听器执行前触发。org.flowable…FlowableEntityEvent
TASK_COMPLETED任务已经完成。本事件在 ENTITY_DELETE 事件前分发。若该任务是流程的一部分,本事件会在流程前进之前触发,并且会跟随一个 ACTIVITY_COMPLETE 事件,指向代表该任务的节点。org.flowable…FlowableEntityEvent
PROCESS_CREATED流程实例已经创建。已经设置所有的基础参数,但还未设置变量。org.flowable…FlowableEntityEvent
PROCESS_STARTED流程实例已经启动。在启动之前创建的流程时分发。PROCESS_STARTED事件在相关的ENTITY_INITIALIZED事件,以及设置变量之后分发。org.flowable…FlowableEntityEvent
PROCESS_COMPLETED流程实例已经完成。在最后一个节点的 ACTIVITY_COMPLETED 事件后分发。当流程实例没有任何路径可以继续时,流程结束。org.flowable…FlowableEntityEvent
PROCESS_COMPLETED_WITH_TERMINATE_END_EVENT流程已经到达终止结束事件(terminate end event)并结束。org.flowable…FlowableProcessTerminatedEvent
PROCESS_CANCELLED流程已经被取消。在流程实例从运行时中删除前分发。流程实例由API调用RuntimeService.deleteProcessInstance取消。org.flowable…FlowableCancelledEvent
MEMBERSHIP_CREATED用户已经加入组。本事件包含了相关的用户和组的id。org.flowable…FlowableMembershipEvent
MEMBERSHIP_DELETED用户已经从组中移出。本事件包含了相关的用户和组的id。org.flowable…FlowableMembershipEvent
MEMBERSHIPS_DELETED组的所有用户将被移出。本事件在用户移出前抛出,因此关联关系仍然可以访问。因为性能原因,不会再为每个被移出的用户抛出 MEMBERSHIP_DELETED 事件。org.flowable…FlowableMembershipEvent

引擎中所有的 ENTITY_\* 事件都与实体关联。下表列出每个实体分发的实体事件:

  • ENTITY_CREATED, ENTITY_INITIALIZED, ENTITY_DELETED: 附件(Attachment),备注(Comment),部署(Deployment),执行(Execution),组(Group),身份关联(IdentityLink),作业(Job),模型(Model),流程定义(ProcessDefinition),流程实例(ProcessInstance),任务(Task),用户(User)。
  • ENTITY_UPDATED: 附件,部署,执行,组,身份关联,作业,模型,流程定义,流程实例,任务,用户。
  • ENTITY_SUSPENDED, ENTITY_ACTIVATED: 流程定义,流程实例/执行,任务。
附加信息

**监听器只会响应其所在引擎分发的事件。**因此如果在同一个数据库上运行不同的引擎,则只有该监听器注册的引擎生成的事件,才会分发给该监听器。其他引擎生成的事件不会分发给这个监听器,而不论这些引擎是否运行在同一个JVM下。

某些事件类型(与实体相关)暴露了目标实体。按照事件类型的不同,有些实体不能被更新(如实体删除事件中的实体)。如果可能的话,请使用事件暴露的EngineServices来安全地操作引擎。即使这样,更新、操作事件中暴露的实体仍然需要小心。

历史不会分发实体事件,因为它们都有对应的运行时实体分发事件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程是《Flowable流程入门课程》的后续高级课程。在学习本课程前,应先学习入门课程,以掌握相关基础知识。高级课程着重讲解Flowable工作流的高级概念、复杂理论和实战应用。课程内容包括流程管理思想、技术与标准、工作流的控制模式和资源模式;Flowable数据库表及变量;与Spring、Spring Boot的集成;BPMN 2.0主要类图;Flowable高级服务如JAVA服务任务、脚本任务、Web Service任务、外部工作者任务、多实例任务、补偿处理程序、子流程和调用活动等;Flowable事件侦听器、执行侦听器和任务侦听器;Flowable历史和REST API;Flowable事务、并发性、身份管理及LDAP集成;Flowable高级主题如流程实例迁移、异步执行器的设计与配置、用于高并发的UUID ID生成器、多租户、高级流程引擎配置、执行自定义SQL和实验性流程调试器等;Flowable Eclipse设计器特性及定制;Flowable 事件注册;Flowable相关标准和规范如ISO8601标准和cron等。本课程对Flowable官方文档进行了彻底梳理和融汇贯通,并结合实践,形象生动、系统全面、简单易懂地呈现给大家,让大家从开源软件文档冗长耗时、英文晦涩难懂、概念理解困难、知识点分散等困境中解脱出来,从而能快速地将Flowable具有的高级特性应用到项目的高级需求和复杂实践中去。课程特色:案例和代码驱动、基础概念与经典实战相结合、知识环节融会贯通、关联知识平滑拓展、概念和原理展示形象生动。
在 Spring Boot 中使用 Flowable 6.8.0 自定义监听器时,可以通过实现 `org.flowable.common.engine.api.delegate.event.FlowableEventListener` 接口,并使用 `@Component` 注解将其注册为 Spring Bean,然后在 `ProcessEngineConfiguration` 中设置监听器的优先级。 具体来说,以下是设置监听器优先级的步骤: 1. 创建自定义的监听器类,实现 `org.flowable.common.engine.api.delegate.event.FlowableEventListener` 接口,并使用 `@Component` 注解将其注册为 Spring Bean,例如: ```java @Component public class CustomEventListener implements FlowableEventListener { @Override public void onEvent(FlowableEvent event) { // 处理事件 } @Override public boolean isFailOnException() { return false; } } ``` 2. 在 `ProcessEngineConfiguration` 中设置监听器的优先级,可以使用 `setEventListeners` 方法,例如: ```java @Bean public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager) { SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration(); // 其他配置... config.setDataSource(dataSource); config.setTransactionManager(transactionManager); // 设置监听器的优先级 Map<String, List<FlowableEventListener>> eventListeners = new HashMap<>(); List<FlowableEventListener> listeners = new ArrayList<>(); listeners.add(customEventListener()); eventListeners.put("TASK_CREATED", listeners); config.setEventListeners(eventListeners); return config; } ``` 在上述代码中,通过 `customEventListener()` 方法获取自定义的监听器,然后将其添加到 `TASK_CREATED` 事件监听器列表中。`TASK_CREATED` 是一个 Flowable 事件类型,表示任务创建事件Flowable 还提供了其他的事件类型,可以根据需要设置相应的监听器优先级。 注意,如果需要设置多个事件类型监听器优先级,可以在 `eventListeners` 中添加多个键值对。 另外,如果需要设置多个监听器的优先级,可以将它们添加到同一个事件类型监听器列表中,Flowable 会按照添加的顺序依次触发这些监听器。如果需要改变监听器的顺序,只需要改变它们在列表中的位置即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值