2015-04-06 44 views
0

我正在使用Websphere 8.5及其內部Java EE框架,Apache OpenWebBeans用於DI & Apache MyFaces用於查看。我也有一個JAR,用一些用「@Named」註解的bean(所以它們是OpenWebBeans託管的bean)。此JAR位於我的Web應用程序的「WEB-INF/lib」目錄中以及應用程序的類路徑中。JAR中的beans.xml導致java.lang.NoClassDefFoundError:javax.faces.component.behavior.Behavior

有人告訴我,我應該在每個JAR中放入一個「beans.xml」文件,以便CDI實現可以找到並管理bean。我這樣做了(在應用程序的「META-INF」文件夾中有一個「beans.xml」文件,並且位於JAR的同一個文件夾中),並且在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。請有人幫忙嗎?

+0

您是否在部署到websphere之前將戰場上的OWB和OWB從戰爭中抽出,還是仍然存在? – covener

+0

是的,戰爭中沒有框架的JAR。 –

回答

0

WebSphere確實需要WAR中的WEB-INF/beans.xml文件!否則WAS不會'激活'CDI。這實際上不是規範所要求的,而且至少添加這個文件是不會被禁止的。它將簡單地在WEB-INF/classes CDI beans中創建所有類。 僅僅在某些jar文件中使用META-INF/beans.xml並沒有幫助。

這就是WAS的工作方式,一旦你知道它是一件小事。我甚至沒有打算創建一個PMR;)

+0

我現在可以看到問題中的含糊之處,但是我發現OP更有可能已經有一個很長的時間,並且只是讓它們在JAR中也造成麻煩。 – BalusC