【发布时间】:2018-12-26 07:23:54
【问题描述】:
我们正在开发 Wildfly 11,需要在时间紧迫(低于 300 毫秒)的情况下应答休息呼叫。 我已经调整了计算结果的算法以回答低于这个阈值。但在我回答后,我想用计算结果触发一些预处理(创建一个对象,将其存储在数据库中)。
此预处理器注入部分是 SessionScoped 的服务。
我的第一次尝试是在计算出响应后立即触发 javax.enterprise.event。这行得通,但事实证明,CDI bean 中的事件不是异步的。所以 rest 调用花费的时间比必要的要长,因为它执行后处理器。
现在我按照this文章中的建议,将处理bean设为无状态并注释观察者方法@Asynchronous。
调用现在是异步触发的,但我会丢失预处理器中需要的 CDI 上下文。否则注入的服务将不起作用。
我现在 cdi 2.0 在 Event 上提供了一个 fireAsync,但 Wildfly 11 仅包含 cdi 1.2。所以这不是一个选择。
【问题讨论】:
-
不幸的是,在解决以下 CDI 问题之前,即使
fireAsync也无法使用:将上下文传播到异步调用。 issues.jboss.org/browse/CDI-635 -
哦。好的。因此,我们需要考虑在这一点上进行架构更改。谢谢。
标签: java asynchronous ejb wildfly cdi