Erreur d'Application avec MyFaces 1.2: java.lang.IllegalStateException: Pas d'Usines configuré pour cette Application

Pour mon application que je suis en utilisant Tomcat 6.0.x et Mojarra 1.2_04 JSF mise en œuvre.
Il fonctionne très bien, seulement je voudrais maintenant passer à MyFaces 1.2_10 impl de JSF.

Lors du déploiement de mon application une obtiens l'erreur suivante:

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)
...

Ici une partie de mes web.xml configuration:

    <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>

Quelqu'un a une expérience similaire d'erreur, et que dois-je faire j'ai afin de résoudre ce problème? Merci!

EDIT:

J'ai été en mesure de résoudre le problème. Depuis que je suis à l'aide de délégataire pour FacesServlet, il s'est avéré que cette délégataire a été à l'origine du problème.
Tout ce que je nécessaire à faire est de faire de cette classe implémente DelegatedFacesServlet, et j'ai supprimé org.apache.myfaces.webapp.StartupServletContextListener. Voici mon web.xml maintenant:

    <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>

et voici 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...
}

EDIT 2:

Suivantes BalusC conseils, j'ai édité mon web.xml un peu, voici la version finale:

<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>
Je ne fais pas MyFaces, mais en fait, je suis très surpris de voir qu'apparemment, vous avez besoin de outcomment la JSF 2.0 de l'API spécifié <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> et l'utilisation de la MyFaces spécifique. Cela signifierait que MyFaces n'est pas compatible avec JSF 2.0 de l'API. Ou était-ce juste ton ignorance? Annuler ce outcomment et de se débarrasser de MyFaces impl des déclarations précises et réessayer. Cela fonctionne?
Il est de travail. Merci BalusC pour le rappeler. Quand j'étais à la recherche de ce qui pourrait être la cause du problème initial, j'ai probablement fait ce changement. Je vais modifier ma question en suivant vos conseils...
Juste pour répondre à un commentaire précédent et de le rendre clair, MyFaces de Base est 100% compatible avec JSF 2.0 de l'API, car faire quelques essais avant chaque sortie, vérifiez que. Remplacer la valeur par défaut standard FacesServlet et utiliser un délégué est mise en œuvre spécifique, ce qui signifie que c'est un hack de "l'extérieur" de la spec. Il y a quelques valide les cas d'utilisation pour le faire, mais comme une "pratique exemplaire" vous ne devriez pas compter sur cela. Si vous avez d'autres questions sur MyFaces, vous pouvez en outre demander sur MyFaces les utilisateurs et les dev listes de diffusion

OriginalL'auteur Igor | 2011-06-22