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管理流程事件的主要内容,如果未能解决你的问题,请参考以下文章

180 - flowable-cdi流程bean管理

180 - flowable-cdi流程bean管理

Java基础学习总结(181)——NacosApolloConfig配置中心如何选型?

Java基础学习总结(181)——NacosApolloConfig配置中心如何选型?

179 - 流程的部署与关联会话

179 - 流程的部署与关联会话