web-dev-qa-db-fra.com

java.lang.ClassNotFoundException: com.Sun.faces.config.ConfigureListener

Nous sommes trois personnes développant un projet JSF et nous n'avons jamais été dans JSF auparavant. Curieusement, avec les mêmes données extraites de SVN, l'un des membres de l'équipe obtient une erreur 404 à chaque fois en utilisant Tomcat 7.0.27.

Au moment du démarrage de Tomcat (utilisé dans Eclipse), le journal suivant est écrit:

01.06.2012 11:45:16 org.Apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the Java.library.path: ......
01.06.2012 11:45:16 org.Apache.Tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.Eclipse.jst.jee.server:SnapManCloud' did not find a matching property.
01.06.2012 11:45:16 org.Apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
01.06.2012 11:45:16 org.Apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
01.06.2012 11:45:16 org.Apache.catalina.startup.Catalina load
INFO: Initialization processed in 677 ms
01.06.2012 11:45:16 org.Apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
01.06.2012 11:45:16 org.Apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.12
01.06.2012 11:45:17 org.Apache.catalina.core.StandardContext listenerStart
FATAL: Error configuring application listener of class com.Sun.faces.config.ConfigureListener
Java.lang.ClassNotFoundException: com.Sun.faces.config.ConfigureListener
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1676)
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1521)
    at org.Apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.Java:415)
    at org.Apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.Java:397)
    at org.Apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.Java:118)
    at org.Apache.catalina.core.StandardContext.listenerStart(StandardContext.Java:4638)
    at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5204)
    at org.Apache.catalina.core.StandardContext$1.call(StandardContext.Java:5199)
    at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:303)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:138)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908)
    at Java.lang.Thread.run(Thread.Java:662)
01.06.2012 11:45:17 org.Apache.catalina.core.StandardContext listenerStart
FATAL: Skipped installing application listeners due to previous error(s)
01.06.2012 11:45:17 org.Apache.catalina.core.StandardContext startInternal
FATAL: Error listenerStart
01.06.2012 11:45:17 org.Apache.catalina.core.StandardContext startInternal
FATAL: Context [/SnapManCloud] startup failed due to previous errors
01.06.2012 11:45:17 org.Apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8080"]
01.06.2012 11:45:17 org.Apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
01.06.2012 11:45:17 org.Apache.catalina.startup.Catalina start
INFO: Server startup in 1279 ms

Nous utilisons Mojarra 2.0.3 comme implémentation JSF qui a été incluse par Eclipse dans le projet (et probablement dans le chemin de classe).

En effet, il existe une entrée pour com.Sun.faces.config.ConfigureListener dans web.xml

<listener>
     <listener-class>com.Sun.faces.config.ConfigureListener</listener-class>
</listener>

Quelqu'un at-il un point de départ où chercher l'erreur? De plus, si des informations supplémentaires sont nécessaires, veuillez me le faire savoir.

16
Wolfgang Gaar

JSF est généralement regroupé dans des serveurs d'application Java EE à part entière tels que GlassFish, JBoss AS/EAP, WildFly, WebSphere, WebLogic, etc. Cependant, Tomcat est un conteneur JSP/Servlet barebones qui ne regroupe que le JSP et API de servlet, pas d'API JSF.

Si vous souhaitez utiliser JSF sur Tomcat, vous devez regrouper les bibliothèques JSF avec la webapp dans son dossier /WEB-INF/lib, Ou installer JSF dans Tomcat en plaçant les bibliothèques JSF dans son /lib dossier. Apparemment, cette application est conçue pour de vrais serveurs d'applications Java EE et ne regroupe donc pas les bibliothèques JSF dans /WEB-INF/lib.

Deux implémentations JSF sont disponibles, Mojarra et MyFaces . Le package com.Sun.faces Indique Mojarra, alors téléchargez celui-ci et placez-le dans le chemin de classe d'exécution de l'application Web (c'est-à-dire soit dans /WEB-INF/lib De l'application Web, soit dans /lib De Tomcat).


Une autre cause possible est que vous avez déployé le projet sur un serveur d'applications Java EE qui utilise MyFaces au lieu de Mojarra, alors que le projet a apparemment été initialement développé pour Mojarra. Cet auditeur est spécifiquement Mojarra. Dans ce cas, vous feriez mieux de supprimer l'intégralité de l'entrée <listener> De web.xml.

Dans tous les cas, l'enregistrement explicite du ConfigureListener de Mojarra dans web.xml N'est en fait nécessaire que pour contourner les anciens serveurs de bogues tels que GlassFish v3 et Jetty qui n'ont pas réussi à trouver l'écouteur dans le fichier TLD de Mojarra. Lorsqu'elle est déployée sur un serveur décent, toute l'entrée <listener> N'est pas nécessaire.

Voir également:

41
BalusC