在Glassfish 3.1上部署时,我在使用依赖注入(使用CDI / Weld)在战争中使用的库中时遇到了麻烦。我有两个库,比如说:
WEB-INF/lib/library1.jar
WEB-INF/lib/library2.jar
library1包含一个公共类,比如说“InjectMe”。 Library2包含另一个公共类,比如“InjectionTarget”,注入站点如“@Inject public InjectMe injectMe”;
部署失败,并显示:
WELD-001408 Unsatisfied dependencies for type [InjectMe] with qualifiers [@Default] at injection point [[field] @Inject packagename.InjectionTarget.injectionSite].
这两个档案都是带有META-INF / beans.xml的有效CDI档案。
我在Glassfish 3.1中更新了weld-osgi-bundle.jar,但仍然看到了这个问题。
如果我手动解压缩library1和library2,将它们的类直接放入WEB-INF / classes,部署成功并且注入按预期工作。
这让我完全疯了。我正在重组我的模块,以便jar子包用maven-dependency-plugin解压缩并存档为合并的jar,然后我依赖于我的战争。但这非常令人毛骨悚然。
想法?这不应该“正常工作”吗?
答案 0 :(得分:3)
也许你遇到了这个错误?
https://issues.jboss.org/browse/WELD-846
http://java.net/jira/browse/GLASSFISH-15721
http://java.net/jira/browse/GLASSFISH-15735
我认为Glassfish 3.1.1-b04和更新版本使用Weld 1.1.1.Final,它被标记为底层Weld bug的修复版本。使用该确切版本进行测试可能足以确认它。
答案 1 :(得分:3)
原来是PEBKAC错误。我在台式机和工作站上更新了weld-osgi-bundle.jar,但没有更新笔记本电脑,但我认为我也在笔记本电脑上更新了它。
如果您正在阅读本文,则可能存在类似问题。检查您的weld-osgi-bundle版本:
asadmin list-modules | grep org.jboss.weld.osgi-bundle
(Windows用户:使用findstr而不是grep,但命令保持不变)。
你应该得到结果:
Module : org.jboss.weld.osgi-bundle:1.1.1.Final
如果您看到旧版本,请按照此处的说明更新weld-osgi-bundle:
http://seamframework.org/Seam3/CompatibilityHome#H-UpgradingWeldInGlassFish31
即使您不使用Seam,这些说明也适用。 Weld 1.1.1修复了CDI中的几个重要错误。为什么Glassfish 3.1.2还没有发布,因为它们是重要的修复,这超出了我的范围。