雅加达 ee - 玻璃鱼:在 WEB-INF/lib 中,Weld 不会从一个罐子里的类注入到相邻罐子里的类



在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中,则部署成功,注入工作正常。

这很快就把我逼疯了。我即将重组我的模块,以便使用maven依赖插件来解包jar子包,并将其归档为一个合并的jar,然后我就可以从战争中依赖它了。不过这很可怕。

想法?这不应该"只是工作"吗?

也许你遇到了这个bug?

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错误的修复版本。用那个确切的版本进行测试可能足以证实这一点。

这是PEBKAC错误。我在台式机和工作站上更新了weld-osgi-bundle.jar,但没有在笔记本电脑上更新,但我认为我也在笔记本电脑中更新了它。

如果你正在读这篇文章,你可能也有类似的问题。使用检查您的焊接osgi捆绑包版本

asadmin list-modules | grep org.jboss.weld.osgi-bundle

(Windows用户:使用findstr而不是grep,但该命令在其他方面保持不变)。

你应该得到结果:

Module : org.jboss.weld.osgi-bundle:1.1.1.Final

如果您看到旧版本,请根据此处的说明更新weld-osgi捆绑包:

http://seamframework.org/Seam3/CompatibilityHome#H-UpgradingWeldInGlassFish31

即使您不使用Seam,这些说明也适用。Weld 1.1.1修复了CDI中的几个重要错误。我无法理解为什么Glassfish 3.1.2没有与它一起发布,因为它们是重要的修复程序。

最新更新