Para mi aplicación que estoy utilizando Tomcat 6.0.x y Mojarra 1.2_04 aplicación JSF.
Funciona bien, solo me gustaría pasar ahora a MyFaces 1.2_10 impl de JSF.

Durante el despliegue de mi app sale el siguiente error:

ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/myApp]] StandardWrapper.Throwable
java.lang.IllegalStateException: No Factories configured for this Application. This happens if the faces-initialization does not work at all - make sure that you properly include all configuration settings necessary for a basic faces application and that all the necessary libs are included. Also check the logging output of your web application and your container for any exceptions!
If you did that and find nothing, the mistake might be due to the fact that you use some special web-containers which do not support registering context-listeners via TLD files and a context listener is not setup in your web.xml.
A typical config looks like this;
<listener>
  <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>

    at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:106)
    at javax.faces.webapp.FacesServlet.init(FacesServlet.java:137)
    at org.apache.myfaces.webapp.MyFacesServlet.init(MyFacesServlet.java:113)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:992)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4371)
...

Aquí es parte de mi web.xml configuración:

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <!-- <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> -->
        <servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    ...
    <listener>
         <listener- class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
    </listener>

¿Alguien ha experimentado de error similar, y lo que debo hacer para solucionarlo? Thanx!

EDICIÓN:

Yo era capaz de solucionar el problema. Desde que estoy usando el delegador para FacesServlet, resultó que este delegador estaba causando el problema.
Todo lo que necesitaba para hacer es hacer esta clase de implementar DelegatedFacesServlet, y me he quitado org.apache.myfaces.webapp.StartupServletContextListener. Aquí está mi web.xml ahora:

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <!-- <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> -->
        <servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>Faces Servlet Delegator</servlet-name>
        <servlet-class>com.myapp.web.FacesServletDelegator</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet Delegator</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>

y aquí es FacesServletDelegator

public class PLMFacesServlet extends HttpServlet implements DelegatedFacesServlet {

    private MyFacesServlet delegate;

    public final void init(ServletConfig servletConfig) throws ServletException {
        delegate = new MyFacesServlet();
        delegate.init(servletConfig);
    }

    public final void destroy() {
        delegate.destroy();
    }

    public final ServletConfig getServletConfig() {
        return delegate.getServletConfig();
    }

    public final String getServletInfo() {
        return delegate.getServletInfo();
    }

    public final void service(HttpServletRequest request, HttpServletResponse response) throws ServletException {

       try {
           delegate.service(request, response);
       } catch(Exception e) {}
    }
    //some other code...
}

EDITAR 2:

Siguientes BalusC consejos, he editado mi web.xml un poco, aquí está la versión final:

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <servlet-name>Faces Servlet Delegator</servlet-name>
    <servlet-class>com.myapp.web.FacesServletDelegator</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet Delegator</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>
  • Yo no MyFaces, pero yo, de hecho, muy sorprendido de que al parecer necesita outcomment el JSF 2.0 API especifica <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> y el uso de la MyFaces específica. Esto significaría que MyFaces no es compatible con JSF 2.0 API. O era solo su ignorancia? Deshacer la outcomment y deshacerse de MyFaces impl declaraciones específicas y vuelva a intentarlo. Funciona?
  • Se está trabajando. Gracias BalusC para señalar esto. Cuando yo estaba buscando lo que podría ser la causa del problema inicial, probablemente he hecho este cambio también. Voy a editar mi pregunta siguiendo su consejo…
  • Sólo para responder a un comentario anterior y que quede claro, MyFaces Núcleo es 100% compatible con JSF 2.0 API, debido a que algunos exámenes antes de cada lanzamiento de verificación que. Reemplazar el valor predeterminado estándar FacesServlet y el uso de un delegado de uno es la aplicación específica, lo que significa, que es un hack «fuera» de la especificación. Hay algunos válido casos de uso para hacer eso, pero como una «mejor práctica» usted no debe confiar en que. Si usted tiene más preguntas acerca de MyFaces, además se puede pedir en MyFaces usuarios y dev listas de correo
InformationsquelleAutor Igor | 2011-06-22

1 Comentario

  1. 5

    En mi caso, la eliminación de la línea siguiente de mi web.xml:

    <load-on-startup>1</load-on-startup>

    …fue lo que hizo que el error desaparezca.

    (Fue la fijación de un puro Tomcat 7 para trabajar con JSF.)

Dejar respuesta

Please enter your comment!
Please enter your name here