0

我正在使用 Websphere 8.5 及其内部 Java EE 框架、用于 DI 的 Apache OpenWebBeans 和用于查看的 Apache MyFaces。我还有一个 JAR,其中包含一些用“@Named”注释的 bean(因此,它们是 OpenWebBeans 管理的 bean)。此 JAR 位于我的 Web 应用程序的“WEB-INF/lib”目录和应用程序的类路径中。

有人告诉我,我应该在希望 CDI 实现查找和管理 bean 的每个 JAR 中放置一个“beans.xml”文件。我就是这样做的(在应用程序的“META-INF”文件夹和 JAR 的同一文件夹中有一个“beans.xml”文件)并且在 Tomcat 7 中一切正常(我可以在 JSF 页面上访问我的 bean,一切都被注入并解决,没有任何问题等)。我在应用程序的“WEB-INF/lib”中使用 Apache Open Web Beans 1.2 和 MyFaces 2.0 JAR 运行 Tomcat。

现在,问题是:在 Websphere 中,使用相同的配置(应用程序的“WEB-INF/lib”中没有框架 JAR,只有我的 bean 的 JAR)我得到一个 NoClassDefFoundError 指的是 JSF 类,“javax.faces.component。每次我尝试加载页面时(没有页面加载,顺便说一句)。奇怪的是,当我从应用程序和 JAR 中删除所有“beans.xml”文件时,一切都按预期使用 JSF(除了 OpenWebBeans bean 加载和管理,当然,因为不存在“beans.xml”)。

我到处搜索这个问题,但找不到任何线索。我知道这个类对 websphere 是可用的,因为我搜索了服务器 JAR 并在“WEBSPHERE_INSTALL\plugins\javax.j2ee.jsf.jar”找到了它(也因为没有“beans.xml”,找到了这个类并且一切正常),但我不知道为什么当应用程序的类加载器中存在任何“beans.xml”文件时没有加载这个 JAR。有人可以帮忙吗?

4

1 回答 1

0

WebSphere 确实需要 WAR 中的 WEB-INF/beans.xml 文件!否则 WAS 不会“激活”CDI。这实际上不是规范要求的,至少不禁止添加此文件。它只会在 WEB-INF/classes CDI bean 中创建所有类。只是在一些罐子里有 META-INF/beans.xml 并没有帮助。

这就是 WAS 的工作方式,一旦你知道它就是一件小事。我什至懒得创建 PMR ;)

于 2015-04-08T21:05:10.233 回答