181 - flowable-cdi流程bean管理流程事件
Posted 分享牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了181 - flowable-cdi流程bean管理流程事件相关的知识,希望对你有一定的参考价值。
1、注入过程变量
过程变量可用于注射。流动的cdi支持
- 类型安全注射@BusinessProcessScoped豆使用@Inject [additional qualifiers] Type fieldName
- 使用@ProcessVariable(name?)限定符不安全地注入其他过程变量:
@Inject @ProcessVariable Object accountNumber;
@Inject @ProcessVariable("accountNumber") Object account
为了使用EL引用过程变量,我们有类似的选择:
- @Named @BusinessProcessScoped bean可以直接引用,
- 其他进程变量可以使用ProcessVariables-bean 引用:
#processVariables [ '使用accountNumber']
2、接收流程事件
可流动的可以连接到CDI事件总线。这使我们能够使用标准的CDI事件机制得到流程事件的通知。为了启用对Flowable的CDI事件支持,请在配置中启用相应的分析侦听器:
<property name="postBpmnParseHandlers">
<list>
<bean class="org.flowable.cdi.impl.event.CdiEventSupportBpmnParseHandler" />
</list>
</property>
现在,Flowable已配置为使用CDI事件总线发布事件。以下概述了如何在CDI bean中接收进程事件。在CDI中,我们可以使用@Observesannotation 声明性地指定事件观察者。事件通知是类型安全的。进程事件的类型是org.flowable.cdi.BusinessProcessEvent。以下是一个简单的事件观察者方法的例子:
public void onProcessEvent(@Observes BusinessProcessEvent businessProcessEvent)
// handle event
这个观察者将被通知所有的事件。如果我们想限制观察者收到的一组事件,我们可以添加限定符注释:
- @BusinessProcess:将一组事件限制在某个流程定义中。例:@Observes @BusinessProcess(“billingProcess”)
BusinessProcessEvent evt - @StartActivity:通过某个活动来限制事件集合。例如: @Observes @StartActivity(“shipGoods”) BusinessProcessEvent evt只要输入ID为“shipGoods”的活动就会被调用。
- @EndActivity:通过某个活动来限制事件集合。例如: @Observes @EndActivity(“shipGoods”) BusinessProcessEvent evt只要ID为“shipGoods”的活动被保留,就会被调用。
- @TakeTransition:通过一定的转换来限制事件集合。
- @CreateTask:通过创建特定任务来限制事件集。
- @DeleteTask:通过删除某个任务来限制事件集。
- @AssignTask:通过特定任务的分配来限制事件集合。
- @CompleteTask:通过某个任务的完成来限制事件集合。
上面提到的限定符可以自由组合。例如,为了接收在“shipmentProcess”中离开“shipGoods”活动时生成的所有事件,我们可以编写以下观察者方法:
public void beforeShippingGoods(@Observes @BusinessProcess("shippingProcess") @EndActivity("shipGoods")
BusinessProcessEvent evt)
// handle event
在默认配置中,事件侦听器是在同一事务的上下文中同步调用的。CDI事务观察者(只能与JavaEE / EJB结合使用)允许控制事件何时传递给观察者方法。使用事务性观察者,例如我们可以保证只有当事件被触发的事务成功时才会通知观察者:
public void onShipmentSuceeded(@Observes(during=TransactionPhase.AFTER_SUCCESS) @BusinessProcess("shippingProcess")
@EndActivity("shipGoods") BusinessProcessEvent evt)
// send email to customer.
3、附加功能
- ProcessEngine以及服务可用于注入:@Inject ProcessEngine, RepositoryService, TaskService,…
- 当前的流程实例和任务可以注入:@Inject ProcessInstance, Task,
- 目前的业务密钥可以被注入: @Inject @BusinessKey String businessKey,
- 当前流程实例id被注入: @Inject @ProcessInstanceId String pid
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
以上是关于181 - flowable-cdi流程bean管理流程事件的主要内容,如果未能解决你的问题,请参考以下文章
Java基础学习总结(181)——NacosApolloConfig配置中心如何选型?