Websphere 7和JSF 1.2-应用程序在启动时未正确初始化,无法找到工厂
在我的例子中,JSF1.1和WebSphere6.1工作正常。将其部署到WebSphere7服务器后,我收到以下错误-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
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()
中执行此操作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()
中执行此操作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,并更改类加载策略。