我使用的是Websphere 8.5及其内部Java框架,即用于DI的Apache和用于查看的Apache。我还有一个JAR,里面有一些带有"@Named“注释的bean(所以,它们是OpenWebBeans托管bean)。这个JAR位于我的web应用程序的"WEB-INF/lib“目录和应用程序的类路径中。
有人告诉我,我应该在每个JAR中放一个"beans.xml“文件,我希望CDI实现能够找到和管理bean。我就这样做了(在应用程序的META-INF文件夹和JAR的同一文件夹中都有一个"beans.xml“文件),并且在Tomcat7中一切都工作得无懈可击(我可以在JSF页面上访问我的bean,所有的东西都被注入并解决,没有任何问题,等等)。我在应用程序的“Web -INF/ MyFaces”中使用Apache Open WEB Beans 1.2和lib 2.0jar运行Tomcat。
现在,问题来了:在Websphere中,使用相同的配置(没有应用程序的"WEB-INF/lib“中的框架JAR,只是我的bean的JAR),每次我试图加载页面(没有页面加载,顺便说一下)时,我都会得到一个引用JSF类的NoClassDefFoundError "javax.faces.component.behavior.Behavior”。奇怪的是,当我从应用程序和JAR中删除所有"beans.xml“文件时,一切都像预期的那样工作(当然,除了OpenWebBeans bean加载和管理,因为没有"beans.xml”)。
我到处找这个问题,但找不到任何线索。我知道这个类对websphere是可用的,因为我搜索了服务器JAR并在"WEBSPHERE_INSTALL\plugins\javax.j2ee.jsf.jar“找到了它(而且因为如果没有"beans.xml",就会找到这个类,一切都会正常工作),但是我不知道为什么当应用程序的类加载器中存在任何”beans.xml“文件时,这个JAR不会被加载。有人能帮帮忙吗?
发布于 2015-04-09 05:05:10
WebSphere在WAR中确实需要一个WEB-INF/beans.xml文件!否则WAS不会“激活”CDI。这实际上并不是规范所要求的,但是添加这个文件至少是不被禁止的。它将简单地将所有类放入WEB-INF/classes CDI bean中。只将META-INF/beans.xml放在一些jars中是没有用的。
这就是WAS的工作方式,一旦你知道这是一件微不足道的事情。我甚至没有费心去创建一个PMR ;)
https://stackoverflow.com/questions/29478228
复制相似问题