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

Websphere 7和JSF 1.2-应用程序在启动时未正确初始化,无法找到工厂,jsf,websphere,Jsf,Websphere,在我的例子中,JSF1.1和WebSphere6.1工作正常。将其部署到WebSphere7服务器后,我收到以下错误- Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactoryat javax.faces.FactoryFinder.getFactory(FactoryFinder.java:270) at jav

在我的例子中,JSF1.1和WebSphere6.1工作正常。将其部署到WebSphere7服务器后,我收到以下错误-

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)


在这些目录中没有jsf impl。现在我更困惑了,因为原来的lib应该出现在c:\IBM\SDP\runtimes\base\u v7\plugins

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


更新为了更好地确定根本原因,这里有两条建议:

  • 您可以按如下方式显示本地磁盘文件系统上所有使用的类路径根:

    for (URL url : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) {
        System.out.println(url.getPath());
    }
    
    ServletContextListener#contextInitialized()
    中执行此操作

  • (最终找到后),安装,将其与JAR文件类型关联,并使用其文件搜索功能搜索特定于JSF的文件,如
    FacesContext.class
    FacesContextImpl.class
    ,以便您可以找到包含JSF API/impl的所有JAR。通过提取JAR并读取清单文件,您可以找到确切的JSF版本


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


    更新为了更好地确定根本原因,这里有两条建议:

  • 您可以按如下方式显示本地磁盘文件系统上所有使用的类路径根:

    for (URL url : Collections.list(Thread.currentThread().getContextClassLoader().getResources(""))) {
        System.out.println(url.getPath());
    }
    
    ServletContextListener#contextInitialized()
    中执行此操作

  • (最终找到后),安装,将其与JAR文件类型关联,并使用其文件搜索功能搜索特定于JSF的文件,如
    FacesContext.class
    FacesContextImpl.class
    ,以便您可以找到包含JSF API/impl的所有JAR。通过提取JAR并读取清单文件,您可以找到确切的JSF版本


  • 您需要将JSF JAR(
    icu4j.JAR
    JSF ibm.JAR
    如果您使用的是ibm的组件库)保存在
    /WEB-INF/lib
    文件夹中

    您需要将JSF JAR(
    icu4j.JAR
    JSF ibm.JAR
    如果您使用的是ibm的组件库)保存在
    /WEB-INF/lib
    文件夹中

    在我的例子中,我尝试使用websphere提供的任何东西,并且在我的类路径中没有任何其他的JSF库impl。但我还是不断地遇到这个错误。这只是一个脏类路径的标志。在不属于不同版本库的位置检查是否存在任何重复的不同版本库。扫描webapp库、Websphere库和JRE/lib(/ext)。我知道我讨厌websphere,但这次它是极端的:(在我的webapp/web inf/lib、WebSphere的C:\IBM\SDP\runtimes\base\u v7\lib dir或plugins文件夹下,我仍然找不到任何重复的jsf impl lib。只有com.IBM.ws.webcontainer.jar文件有默认的sun impl,它是我的类路径中包含的唯一jar。更多的指针会有帮助。您是否也检查了JRE(和JDK)库?这些也是在类路径中使用的。作为最后的解决方案,您可以考虑在自己的Web应用程序中包含JSF-LIBs,并更改类加载策略。在我的例子中,我尝试使用任何WebSphere提供程序,并且在我的类路径中没有任何其他的JSF-LIB IMPL。但是,我始终会得到这个错误。这只是一个脏的标志。类路径。在不属于它们的地方检查任何重复的不同版本库。扫描webapp库、Websphere库和JRE/lib(/ext)。抱歉,BalusC,但这个问题确实困扰着我。我知道我讨厌Websphere,但这次它是极端的:(在我的webapp/web inf/lib、WebSphere的C:\IBM\SDP\runtimes\base\u v7\lib dir或plugins文件夹下,我仍然找不到任何重复的jsf impl lib。只有com.IBM.ws.webcontainer.jar文件有默认的sun impl,它是我的类路径中包含的唯一jar。更多的指针会有帮助。您是否也检查了JRE(和JDK)库?这些也是在类路径中使用的。作为最后的解决方案,您可以考虑在自己的Web应用程序中包括JSF-LIBs,并更改类加载策略。