Websphere 7和JSF 1.2 - 应用程序在启动时未正确初始化,无法找到Factory

时间:2010-05-13 22:54:43

标签: jsf websphere

JSF 1.1和websphere 6.1在我的案例中正常运行。一旦我将其部署到websphere 7服务器,我收到以下错误 -

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)

不确定这意味着什么,我已经在RAD中启用了JSF1.2作为项目方面但仍然收到上述错误消息,并且我的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 !!

2 个答案:

答案 0 :(得分:3)

当类路径中有多个不同的版本化JSF库时,这是一个典型错误。 Websphere附带内置的JSF库。如果您想使用webapp提供的JSF库,则需要在部署后将类加载策略设置为module。这通常默认为application,这意味着主应用类加载器会加载webapp库。主类加载器可能碰巧加载了JSF API库。当它的版本与webapp中的JSF IMPL库不同时,您可能会收到此类错误。


更新以帮助确定更好的根本原因,这里有2条建议:

  1. 您可以在本地磁盘文件系统上显示所有使用的类路径根,如下所示:

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

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

  2. (最终在找到之后),安装WinRAR,将其与JAR文件类型相关联,并使用其文件搜索工具搜索特定于JSF的文件,如FacesContext.class和{{ 1}}这样你就可以找到包含JSF API / impl的所有JAR。您可以通过提取JAR并读取MANIFEST文件来找到确切的JSF版本。

答案 1 :(得分:1)

您需要在icu4j.jar文件夹中保留JSF JAR(jsf-ibm.jar/WEB-INF/lib,如果您使用的是IBM的组件库)。