jsf jsf-2 factory illegalstateexception

jsf - java.lang.IllegalStateException: no se pudo encontrar la copia de seguridad para la fábrica javax.faces.application.ApplicationFactory



jsf-2 (2)

Estoy usando esto:

  • Tomcat 7.0
  • JSF 2.0
  • JRE 7

pero al intentar ejecutar mi aplicación, obtuve la siguiente excepción:

java.lang.IllegalStateException: Could not find backup for factory javax.faces.application.ApplicationFactory. at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:1011) at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:343) at org.apache.myfaces.context.servlet.FacesContextImplBase.getApplication(FacesContextImplBase.java:159) at org.apache.myfaces.context.servlet.FacesContextImplBase.getELContext(FacesContextImplBase.java:210) at javax.faces.component.UIViewRoot.setLocale(UIViewRoot.java:1463) at org.apache.myfaces.webapp.AbstractFacesInitializer._createFacesContext(AbstractFacesInitializer.java:477) at org.apache.myfaces.webapp.AbstractFacesInitializer.initStartupFacesContext(AbstractFacesInitializer.java:449) at org.apache.myfaces.webapp.StartupServletContextListener.contextInitialized(StartupServletContextListener.java:113) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4797) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5291) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

¿Alguna idea de por qué?

Gracias,


Como complemento a la respuesta de BalusC, recientemente recibí este error al intentar ejecutar un JAR independiente con una aplicación Spring Boot que tiene JSF como front-end con beans administrados por Spring. Cambiar el empaque de JAR a WAR resolvió el problema.


Eso puede suceder si el classpath de tiempo de ejecución de su webapp está contaminado con múltiples impls / versiones de JSF. Las entradas org.apache.myfaces en el seguimiento de la pila indican que está utilizando MyFaces. Por lo tanto, este problema sugiere que tiene otra implementación de JSF como Mojarra en el classpath de tiempo de ejecución de webapp que está en conflicto con él. Es reconocible por jsf-api.jar , o jsf-impl.jar , o javax.faces.jar . Si elimina todos ellos, entonces este problema debería desaparecer.

O bien, si realmente desea utilizar Mojarra en lugar de MyFaces (no mencionó explícitamente la versión impl / versión JSF inteteada en ninguna parte de su pregunta, sino que simplemente declaró genéricamente la especificación JSF como en "JSF 2.0", por lo que tal vez realmente no hay idea de lo que estabas haciendo), entonces deberías eliminar myfaces-*.jar archivos de tu aplicación web.

Ver también: