簡體   English   中英

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

[英]beans.xml in JAR causes java.lang.NoClassDefFoundError: javax.faces.component.behavior.Behavior

我正在使用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”。每次我嘗試加載頁面(沒有頁面加載,順便說一句)的“ behavior.Behavior”。 奇怪的是,當我從應用程序和JAR中刪除所有“ beans.xml”文件時,JSF都能按預期工作(當然,除了OpenWebBeans bean的加載和管理,因為不存在“ beans.xml”)。

我到處搜索此問題,但找不到任何線索。 我知道該類適用於Websphere,因為我搜索了服務器JAR,並在“ WEBSPHERE_INSTALL \\ plugins \\ javax.j2ee.jsf.jar”中找到了它(並且因為沒有“ beans.xml”,所以找到了該類並一切正常),但是我不知道為什么當應用程序的類加載器中存在任何“ beans.xml”文件時,為什么不加載此JAR。 有人可以幫忙嗎?

WebSphere確實在您的WAR中需要WEB-INF / beans.xml文件! 否則,WAS不會“激活” CDI。 規范實際上並不需要這樣做,至少不禁止添加此文件。 它只會使您的所有類都位於WEB-INF / classes CDI bean中。 僅將META-INF / beans.xml放在一些罐子中是沒有幫助的。

這就是WAS的工作方式,一旦您知道,這是一件小事。 我什至不用去創建PMR;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM