在 WildFly 上重新部署后,CDI 无法在 @Requestscoped REST 服务中将 @Singleton 设置为 @Provider

Posted

技术标签:

【中文标题】在 WildFly 上重新部署后,CDI 无法在 @Requestscoped REST 服务中将 @Singleton 设置为 @Provider【英文标题】:CDI can't set @Singleton into @Provider in @Requestscoped REST service after redeploy on WildFly 【发布时间】:2014-07-01 05:22:06 【问题描述】:

我有 AuthenticationFilter,它注入了带有 @Singleton 注释的 UserController。当我第一次部署我的应用程序时 - 一切都很好,但是当我重新部署应用程序然后我尝试从任何 REST 服务中获取一些东西时 - 我经常收到:

Can not set app.auth.UserController field
 app.web.rest.auth.AuthenticationFilter.userController to 
app.auth.UserController$Proxy$_$$_Weld$EnterpriseProxy$

即使我杀死服务器并重新启动它,问题仍然存在。但是经过几次重启问题终于消失了。

有人知道什么会导致这个错误吗?

【问题讨论】:

在重新部署之前尝试清理目标目录 事实上我总是在重新部署之前清除目标目录 单例、CDI 还是 EJB? 这是 EJB 单例 这里应该说明使用环境 【参考方案1】:

我也遇到过这个问题。每次部署我都会随机失败注入(EJB)@Singleton,甚至(CDI)ApplicationScoped。 我的问题是我确实没有拥有beans.xml。不知何故,没有beans.xml,项目无法正确初始化。

当我添加(完全为空的)beans.xml 时,它已解决。希望对您有所帮助。

【讨论】:

以上是关于在 WildFly 上重新部署后,CDI 无法在 @Requestscoped REST 服务中将 @Singleton 设置为 @Provider的主要内容,如果未能解决你的问题,请参考以下文章

Java 的 CDI 事件是不是聚集在 WildFly 中?

无法将 JSF + CDI 项目从 Tomcat 迁移到 Wildfly

在 Wildfly 8.2 上重新部署后从 Infinispan 缓存读取时发生 ClassCastException

找不到 CDI BeanManager

无法让CDI和JAX-RS在Glassfish中协同工作

使用捆绑在 webapp 中并在 Wildfly 上运行的 myfaces 时未调用 CDI Bean 方法