180 - flowable-cdi流程bean管理
Posted 分享牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了180 - flowable-cdi流程bean管理相关的知识,希望对你有一定的参考价值。
1、从流程中引用Bean
Flowable-cdi使用自定义解析器将CDI bean展示给Flowable El。这使得可以从流程中引用bean:
<userTask id="authorizeBusinessTrip" name="Authorize Business Trip"
flowable:assignee="#authorizingManager.account.username" />
“授权管理器”可以是生产者方法提供的bean:
@Inject @ProcessVariable Object businessTripRequesterUsername;
@Produces
@Named
public Employee authorizingManager()
TypedQuery<Employee> query = entityManager.createQuery("SELECT e FROM Employee e WHERE e.account.username='"
+ businessTripRequesterUsername + "'", Employee.class);
Employee employee = query.getSingleResult();
return employee.getManager();
我们可以使用相同的特性来使用flowable:expression=“myEjb.method()”-extension 在服务任务中调用EJB的业务方法。请注意,这需要-class @Named在MyEjb-class上。
2、使用@BusinessProcessScoped bean
使用flowable-cdi,bean的生命周期可以绑定到一个流程实例。为此,提供了一个自定义上下文实现,即BusinessProcessContext。
BusinessProcessScoped bean的实例作为流程变量存储在当前流程实例中。BusinessProcessScoped bean需要是钝化能力(例如Serializable)。以下是一个进程范围的bean的例子:
@Named
@BusinessProcessScoped
public class BusinessTripRequest implements Serializable
private static final long serialVersionUID = 1L;
private String startDate;
private String endDate;
// ...
有时,我们希望在流程实例没有关联的情况下使用流程范围的bean,例如在启动流程之前。如果当前没有任何流程实例处于活动状态,则BusinessProcessScoped bean的实例将临时存储在本地范围内(即对话或请求,具体取决于上下文)。如果此范围稍后与业务流程实例关联,则将bean实例刷新为流程实例。
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
以上是关于180 - flowable-cdi流程bean管理的主要内容,如果未能解决你的问题,请参考以下文章
181 - flowable-cdi流程bean管理流程事件