如何在Glassfish 3.1中组合@Asynchronous和Weld/CDI事件以及@Observes(在= TransactionPhase.AFTER_COMPLETION期间)

Mic*_*ael 6 events asynchronous java-ee cdi jboss-weld

首先让我说,下面的代码示例在GF 3.0.1中运行得很好.当我们切换到GF 3.1时,麻烦就开始了.

我正在使用一种方法

@Asynchronous
public void executeFlowStep(
    @Observes(during=TransactionPhase.AFTER_COMPLETION) 
    ExecuteFlowStepEvent executeFlowStepEvent) { 
Run Code Online (Sandbox Code Playgroud)

自从切换,每当这应该收到ExecuteFlowStepEvent我得到以下错误信息:

WELD-000401 Failure while notifying an observer of event [package].ExecuteFlowStepEvent
Run Code Online (Sandbox Code Playgroud)

没有给出进一步的信息或堆栈跟踪.如果我删除@Asynchronous注释和AFTER_COMPLETION属性,它可以工作,当然这会打破程序,因为我依赖于AFTER_COMPLETION时间.

我试图在Weld论坛上寻求帮助,到目前为止无济于事,尽管似乎还有其他人有同样的问题:http://seamframework.org/Community/WeldUsers

我至少想知道:这是一个错误,还是这个想要的.这是否意味着Weld不能与Asynchronous方法/ AFTER_COMPLETION属性一起使用?为什么这在GF 3.0.1中有效?有没有人设法在GF 3.1上完成这项工作?

Mar*_*son 3

根据您作为对自己问题的评论发布的链接,这是 Wield 1.1.2 和 GlassFish 3.1.2(build 14+)中修复的错误。

免责声明:我发布了这个古老问题的答案,以帮助 SO (StackOverflow) 摆脱未解答的问题。