我正在尝试将 JSF 应用程序迁移到 CDI。我实施了以下更改:
- 添加一个空的 beans.xml 文件到 WEB-INF
- 将 @ManagedBean 更改为 @Named
- 将我拥有的所有范围更改为 CDI 范围(会话、视图、请求)
- 将所有 @EJB 和 @ManagedProperty 更改为 @Inject
但是,Omnifaces 错误阻止了部署,因为我收到以下错误 3 次:
org.jboss.weld.exceptions.DeploymentException:WELD-001409 类型 [EagerBeansRepository] 与注入点 [[BackedAnnotatedField] @Inject private org.omnifaces.ApplicationListener.eagerBeansRepository] 处的限定符 [@Default] 存在不明确的依赖关系。可能的依赖项 [[带有限定符 [@Any @Default] 的托管 Bean [class org.omnifaces.cdi.eager.EagerBeansRepository],带有限定符 [@Any @Default] 的托管 Bean [class org.omnifaces.cdi.eager.EagerBeansRepository]] ]
我已经降级到Omnifaces 1.8.1并且部署成功。为什么 Omnifaces 2.0 会导致此错误?
开发环境:
- 玻璃鱼4
- 全能脸2.0
- JSF(莫贾拉 2.2.0)
- WELD-000900 2.0.0 (SP1)
此异常表明 OmniFaces JAR(具体来说,包含提到的不明确类的 JAR,在您的特定情况下EagerBeansRepository
) 在运行时类路径中重复。前提是 JAR 正确放置在/WEB-INF/lib
如果在部署之前未正确清理 GlassFish 工作文件夹,则可能会发生这种情况。尤其是 GlassFish Eclipse 插件在这方面会失败。您需要手动清理 GlassFish 工作文件夹/glassfish/domains/[domainname]
.
顺便说一句,当您使用它时,我强烈建议您也升级到 GlassFish 4.1。 GlassFish 4.0 与每个第一个 GlassFish 版本一样(将其准备为“第一个 Java EE X 应用程序服务器”以及每个新的 Java EE API 版本都非常麻烦),有太多的童年错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)