Weblogic 11g(10.3.5.0)上JSF2的回退工厂失败

Weblogic 11g(10.3.5.0)上JSF2的回退工厂失败,jsf,weblogic,el,Jsf,Weblogic,El,我有一个正常工作的JSF2应用程序,它通常在Tomcat6/7上运行。 由于它现在也需要在weblogic上运行,我对projectsetup做了一些更改,包括将el-impl-2.2.jar添加到war的WEB-INF/lib中 我还向web.xml添加了以下内容: <context-param> <param-name>com.sun.faces.expressionFactory</param-name> <param-value>c

我有一个正常工作的JSF2应用程序,它通常在Tomcat6/7上运行。 由于它现在也需要在weblogic上运行,我对projectsetup做了一些更改,包括将el-impl-2.2.jar添加到war的WEB-INF/lib中

我还向web.xml添加了以下内容:

<context-param>
  <param-name>com.sun.faces.expressionFactory</param-name>
  <param-value>com.sun.el.ExpressionFactoryImpl</param-value>
</context-param>

com.sun.faces.expressionFactory
com.sun.el.ExpressionFactoryImpl
weblogic.xml部署描述符包含:

<container-descriptor>
    <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

真的
虽然所有这些在Tomcat中仍能完美工作,但此设置在wls中失败,原因是:

[HTTP:101216]Servlet: "Faces Servlet" failed to preload on startup in Web application: "app.war". java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key severe.no_factory_backup_failed at 
java.util.ResourceBundle.getObject(ResourceBundle.java:393) at
java.util.ResourceBundle.getString(ResourceBundle.java:353) at 
javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1002) at 
javax.faces.FactoryFinder.getFactory(FactoryFinder.java:316) at 
javax.faces.webapp.FacesServlet.init(FacesServlet.java:302) at
weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:299) at
weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:250) at
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at 
weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) at 
weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:94) at 
weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:82) at 
weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:74) 
at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:60) at 
weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:34) at
weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:638)
at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:579) at
[HTTP:101216]Servlet:“Faces Servlet”无法在Web应用程序“app.war”中启动时预加载。java.util.MissingResourceException:找不到捆绑包java.util.PropertyResourceBundle的资源,密钥严重。没有工厂备份失败
getObject(ResourceBundle.java:393)位于
getString(ResourceBundle.java:353)位于
javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1002)位于
getFactory(FactoryFinder.java:316)位于
javax.faces.webapp.FacesServlet.init(FacesServlet.java:302)位于
weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:299)位于
weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:250)位于
weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)位于
weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)位于
weblogic.servlet.provider.wlssobjecthandle.run(wlssobjecthandle.java:57)位于
weblogic.servlet.internal.StubSecurityHelper.initServletInstance(StubSecurityHelper.java:94)位于
weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:82)位于
weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:74)
位于weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:60)
weblogic.servlet.internal.StubLifecycleHelper.(StubLifecycleHelper.java:34)位于
weblogic.servlet.internal.ServletStubImpl.initStubLifecycleHelper(ServletStubImpl.java:638)
位于weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:579)

以前有人遇到过类似的问题吗?

我不确定这样做是否正确。在我看来,您缺少WLS的DI绑定。如果比较wlserver_10.3\common\deployable libraries\jsf-2.0.war\WEB-INF\lib\中的可部署库,您就会看到要升级到JSF2,必须在war中提供什么。最值得注意的是,您的设置中缺少DI绑定


试试看。

事实证明,在我的项目中包含el-api.jar和el-impl.jar对我来说是一个解决方案。此外,我必须在weblogic.xml中指定这些包需要首先从war加载,如下所示:

    <prefer-application-packages>
        <package-name>com.sun.el.*</package-name>
        <package-name>javax.el.*</package-name>
    </prefer-application-packages>

com.sun.el*
javax.el*

这表明Weblogic仍在使用自己的捆绑JSF impl,它的版本比您在
/WEB-INF/lib
中看到的JSF API要旧。实际上,BalusC不是。我成功地安装并运行了我的应用程序,这个错误显示的唯一问题似乎是使用了太旧的EL版本。我需要使用el2.2(我的war中的那个),以便正确解析我的el2.2表达式。而atm机并非如此。