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

时间:2011-04-29 13:35:37

标签: 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) { 

自切换以来,每当收到ExecuteFlowStepEvent时,我都会收到以下错误消息:

WELD-000401 Failure while notifying an observer of event [package].ExecuteFlowStepEvent

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

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

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

1 个答案:

答案 0 :(得分:3)

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

disclamer :我将这个答案发布在一个古老的问题上,以帮助SO(StackOverflow)摆脱未解答的问题。