JAR中的beans.xml导致java.lang.NoClassDefFoundError:javax.faces.component.behavior.Behavior

时间:2015-04-06 19:30:11

标签: jsf websphere cdi openwebbeans

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

我被告知我应该放一个" beans.xml"每个JAR中的文件,我希望CDI实现查找和管理bean。我做到了(那里有#34; beans.xml"文件在" META-INF"应用程序的文件夹和JAR的同一个文件夹中)一切都运行完美在Tomcat 7中(我可以在JSF页面上访问我的bean,一切都被注入并解决,没有任何问题等)。我在应用程序" WEB-INF / lib"中运行了Tomcat和Apache Open Web Beans 1.2以及MyFaces 2.0 JAR。

现在,问题是:在Websphere中,具有相同的配置(在应用程序内没有框架JAR" WEB-INF / lib",只是我的bean的JAR)我得到一个引用JSF类的NoClassDefFoundError," javax.faces.component.behavior.Behavior"每次我尝试加载页面(没有页面加载,顺便说一句)。奇怪的是,当我删除所有" beans.xml"来自应用程序和JAR的文件,一切都按预期的方式与JSF一起工作(当然,除了OpenWebBeans bean加载和管理之外,因为那里没有" beans.xml"存在)。

我到处寻找这个问题并且无法找到任何关于它的线索。我知道这个类可以用于websphere,因为我搜索了服务器JAR并在" WEBSPHERE_INSTALL \ plugins \ javax.j2ee.jsf.jar" (还因为没有" beans.xml",找到了这个类,一切正常),但我不知道为什么在任何" beans.xml&#时没有加载这个JAR 34;文件存在于应用程序的类加载器中。请问有人帮忙吗?

1 个答案:

答案 0 :(得分:0)

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

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