迁移到 Jboss EAP7 时出现 WELD 异常

Posted

技术标签:

【中文标题】迁移到 Jboss EAP7 时出现 WELD 异常【英文标题】:WELD Exception while Migrating to Jboss EAP7 【发布时间】:2020-08-30 20:32:36 【问题描述】:

我在从 EAP 6.4.9 迁移到 JBOSS EAP 7.3 时遇到以下异常。

错误 [org.jboss.as.controller.management-operation] (ServerService 线程池 -- 72) WFLYCTL0013:操作(“添加”)失败 - 地址: ([("deployment" => "xxx.war")]) - 失败描述:"WFLYCTL0080: 失败的服务” => "jboss.deployment.unit.\"xxx.war\".WeldStartService" => "失败 启动服务 原因:org.jboss.weld.exceptions.DefinitionException: WELD-000805: 不能有多个后构造方法注释 使用 [EnhancedAnnotatedTypeImpl] 的 @PostConstruct 公开 @ManagedBean 类 com.xxxx.xxxx.SampleManagedBean" 错误 [org.jboss.as.server] (ServerService 线程池 -- 72) WFLYSRV0021: 部署“xxxx.war”的部署已回滚,内容如下 失败消息:“WFLYCTL0080:失败的服务”=> "jboss.deployment.unit.\"xxxx.war\".WeldStartService" => "失败 启动服务 原因:org.jboss.weld.exceptions.DefinitionException: WELD-000805: 不能有多个后构造方法注释 使用 [EnhancedAnnotatedTypeImpl] 的 @PostConstruct 公开 @ManagedBean 类 com.xxxx.xxxxx.SampleManagedBean"

它在 EAP6.4 中运行良好。该问题出现在 EAP 7 及更高版本中。 对此的任何建议都会有很大帮助。 提前致谢。

【问题讨论】:

检查您的 com.xxxx.xxxx.SampleManagedBean 类,它显然有两个 EAP 7.3 似乎不喜欢的 @PostConstruct 方法。我建议创建一个新方法 @PostConstruct,它将调用两个当前的 @PostConstruct 方法,您应该从中删除注释 除了更改代码之外,我们还有其他选择吗?我的意思是,比如导入任何依赖库? 我怀疑,您的 JBoss EAP 是否正确遵循规范。我很惊讶 EAP 6.4 没有,因为这个约束 isn't new 如果 this 仍然为真并且您的应用程序在 Spring 上运行,那么您可以尝试停用 WELD。也就是说,更新您的代码以符合标准肯定是最好的 【参考方案1】:

The javadoc for @PostConstruct 指定:

这个注解只能注解一个方法

错误日志显示 JBoss EAP 7.3 抱怨 com.xxxx.xxxx.SampleManagedBean 类有不止一种这样的方法。我建议在这个类中创建一个新方法@PostConstruct,它会调用另外两个方法,应该从中删除注释。

这不是 JBoss EAP 7.3 的错误,我怀疑你可以避免修复这个类。

【讨论】:

以上是关于迁移到 Jboss EAP7 时出现 WELD 异常的主要内容,如果未能解决你的问题,请参考以下文章

org.jboss.weld.exceptions.IllegalArgumentException: WELD-001456: 参数resolvedBean 不能为空

不能使用jconsole连接到JBoss eap7.1

JBoss Weld + java.lang.OutOfMemoryError:PermGen 空间

org.jboss.weld.exceptions.DefinitionException:在payara / glassfish中部署时的WELD-001113

将 GWT 部署到 JBoss 时出现 web.xml 问题

使用JBoss部署REST服务时出现问题