2010-05-13 51 views
0

JSF 1.1和websphere 6.1在我的情況下正常工作。有一次,我部署了到WebSphere 7服務器,我收到以下錯誤 -Websphere 7和JSF 1.2 - 應用程序在啓動時未正確初始化,找不到工廠

Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactoryat javax.faces.FactoryFinder.getFactory(FactoryFinder.java:270) 
    at javax.faces.webapp.FacesServlet.init(FacesServlet.java:164) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.init(ServletWrapper.java:358) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.init(ServletWrapperImpl.java:168) 

不知道這意味着什麼,我已經啓用JSF1.2爲工程方面的RAD,但仍不斷收到上述錯誤信息和沒有我的jsf文件正在工作。

編輯

以下BalusC的評論後,我看到下面的目錄是通過查找該代碼(這是url.getPath()的O/P)

/C:/IBM/SDP/runtimes/base_v7/profiles/AppSrv01/properties/ 
/C:/IBM/SDP/runtimes/base_v7/properties/ 
/
/C:/IBM/SDP/runtimes/base_v7/java/lib/ 
/C:/IBM/SDP/runtimes/base_v7/lib/ 
/C:/IBM/SDP/runtimes/base_v7/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime/ 
/C:/IBM/SDP/runtimes/base_v7/installedConnectors/sib.api.jmsra.rar/ 
/C:/IBM/SDP/runtimes/base_v7/installedConnectors/wmq.jmsra.rar/ 
/C:/DETSphere10/DET_FALL9.0/DETEJB/classes/ 
/C:/DETSphere10/DET_FALL9.0/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/DETWEB/ 

沒有jsf impl在這些目錄中。現在我更加困惑,因爲原始lib應該出現在c:\ IBM \ SDP \ runtimes \ base_v7 \ plugins下!

回答

3

這是在類路徑中存在多個不同版本的JSF庫時的典型錯誤。 Websphere附帶內置的JSF庫。如果您想使用webapp提供的JSF庫,那麼在部署後需要將類加載策略設置爲module。這通常默認爲application,這意味着webapp庫由主類加載器加載。主要的類加載器可能碰巧加載了JSF API庫。當它的版本與web應用程序中的JSF IMPL庫不同時,則可能會收到此類錯誤。


更新幫助釘落下病根更好這裏有2點建議:

  1. ,您可以顯示本地磁盤文件系統上的所有使用的類路徑根如下:

    for (URL url : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) { 
        System.out.println(url.getPath()); 
    } 
    

    ServletContextListener#contextInitialized()左右執行此操作。

  2. (最終發現了之後),安裝WinRAR,它關聯與JAR文件類型和使用它的文件搜索功能,可搜索諸如FacesContext.classFacesContextImpl.class一個JSF特定的文件,這樣就可以找到所有JAR的含有JSF API/impl。通過提取JAR並讀取MANIFEST文件,您可以找到確切的JSF版本。

+0

就我而言,我試圖使用任何websphere提供的東西,並且在我的類路徑中沒有任何其他impl的JSF lib。儘管如此,我一直在收到這個錯誤。 – Shamik 2010-05-14 01:14:05

+0

這只是一個髒類路徑的標誌。檢查它們不屬於的地方的任何重複的不同版本庫。掃描webapp庫,Websphere庫和JRE/lib(/ ext)。 – BalusC 2010-05-14 02:04:37

+0

對不起BalusC,但這個問題真的很困擾我。我知道我討厭websphere,但這次它是極端的:(我仍然沒有找到任何重複的jsf impl lib在我的webapp/web-inf/lib下,或者WebSphere的C:\ IBM \ SDP \ runtimes \ base_v7 \ lib目錄下或者在plugins文件夾,只有com.ibm.ws.webcontainer.jar文件具有默認的sun impl,它是我的類路徑中唯一包含的jar,任何更多的指針都會有幫助。 – Shamik 2010-05-14 14:34:47

1

你需要保持JSF JAR的(icu4j.jarjsf-ibm.jar如果您正在使用IBM的組件庫)在/WEB-INF/lib文件夾中。

相關問題