Exception: impossible de trouver de l'Usine: javax.des visages.contexte.FacesContextFactory
Je suis de la migration de JBoss 5.1.0.GA pour JBoss 6.0.0-Finale et en face de l'exception suivante lors de l'FacesServler initialisation
2011-03-09 18:07:24,574 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/].[Faces Servlet]] (http-0.0.0.0-8080-4) Allocate exception for servlet Faces Servlet: java.lang.IllegalStateException: Application was not properly initialized at startup, could not find Factory: javax.faces.context.FacesContextFactory
at javax.faces.FactoryFinder$FactoryManager.getFactory(FactoryFinder.java:725) [:1.2_15-20100816-SNAPSHOT]
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:239) [:1.2_15-20100816-SNAPSHOT]
at javax.faces.webapp.FacesServlet.init(FacesServlet.java:164) [:1.2_15-20100816-SNAPSHOT]
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1208) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:955) [:6.0.0.Final]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:188) [:6.0.0.Final]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.0.0.Final]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [:6.0.0.Final]
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.0.0.Final]
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.0.0.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [:6.0.0.Final]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.0.0.Final]
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.0.0.Final]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.0.0.Final]
at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.0.0.Final]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.0.0.Final]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.0.0.Final]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.0.0.Final]
at java.lang.Thread.run(Thread.java:619) [:1.6.0_14]
J'ai regardé dans le code et découvert que FactoryFinder recherche correspondant FactoryManager, sur la base actuelle fil du chargeur de classe. J'ai aussi constaté que mon FactoryFinder.FACTORIES_CACHE contient deux entrées pour deux chargeurs de classe:
* BaseClassLoader which loads my EAR and
* WebCtxLoader.ENCLoader which is used during web app running and which was current context classloaded for failed thread.
Mon déployer la structure est la suivante:
* deploy
o myapplication.ear
+ lib
# richfaces jars (3.3.1.GA)
# seam jars (2.2.1.Final)
# openfaces jar (2.0.0)
# other jars
+ META-INF
# jboss-app.xml
# application.xml
+ myapplication.war
# WEB-INF
* web.xml
* faces-config.xml
* components.xml
* deployers
o jbossweb.deployer
o jsf.deployer
o and others
Je suis en utilisant Mojarra-1.2, comme le JSF mise en œuvre
<param-name>org.jboss.jbossfaces.JSF_CONFIG_NAME</param-name>
<param-value>Mojarra-1.2</param-value>
Après un peu de débogage, j'ai pu sumup:
1. all JSF initialization is made in BaseClassLoader thread, i.e. when javax.faces.FactoryFinder#setFactory(..) is invoked getClassLoader() returns EAR BaseClassLoader
2. A servlet thread (which cause exception) tries to look FactoryManager but his current classloader ( Thread.currentThread().getContextClassLoader()) is WebCtxLoader.ENCLoader. So nothing is returned and exception is thrown.
J'ai vérifié JBoss 5.1.0 et veillé à ce que l'initialisation et l'accès pour FactoryManager ont été fait en fils ayant la même classe loader.
J'ai essayé de google en n'ai pas trouver beaucoup d'informations sur la personne ayant le même problème, ce qui me fait penser à quelque chose qui est faux dans mon environnement.
Quelqu'un peut-il commenter ou aider?
OriginalL'auteur Yury Litvinov | 2011-03-10
Vous devez vous connecter pour publier un commentaire.
C'est un signe de classpath de la pollution. JBoss déjà livré avec JSF groupés. Cette exception peut se produire si vous le bundle JSF dans votre GUERRE. Il ne fera que s'affrontent.
Il y a 2 solutions:
Se débarrasser de
jsf-api
etjsf-impl
Pots dans votre GUERRE (c'est à dire qu'ils ne doivent pas finir dans/WEB-INF/lib
après la construction/déploiement.Dire JBoss que vos navires de GUERRE avec sa propre version de JSF pour que JBoss de ne pas utiliser son propre.
Je n'ai pas vu votre commentaire mise à jour: eh bien, nous sommes en cours d'exécution JSF 1.2 et 2.0 apps ici qui utilise JBoss 6.0.0.Final livré JSF impls. Pour votre problème, il doit sûrement y avoir un autre JSF impl quelque part dans l'OREILLE/GUERRE ou même dans JRE/lib(/ext), qui est la collision de celui fourni par JBoss.
Je suis aussi d'avoir l'erreur que l'OP. Ma guerre de fichier n'inclut pas JSF impl. Je ne suis pas sûr au sujet de la re6 bien, même si j'ai un oeil à la lib ne pouvais pas trouver toutes. Ne re6 est livré avec un jsf impl?
Non, JRE n'est pas par défaut. Il peut arriver que vous (ou quelqu'un d'autre) a chuté dans le cadre du programme Pots de JRE lib. Si après tout toujours en vain, essayer de nettoyer JBoss data, temp et de travailler les dossiers.
J'ai finalement résolu le problème. Ajoutez à cela web.xml travaillé ` <auditeur> <listener-class>com.soleil.des visages.config.ConfigureListener</listener-class> </auditeur>`
OriginalL'auteur BalusC
J'ai eu le même problème, mais avec embedded GlassFish v3. J'ai ajouté ceci et cela a fonctionné:
Voici la page web explique le problème: En utilisant JSF 1.2 avec Facelets sur Google App Engine.
Notez que cette réponse est spécifique à GlassFish v3, pas de JBoss as demandé à ce sujet dans la question. Cette GlassFish-le bogue a déjà été fixé dans 3.1.x et puis il n'est pas nécessaire d'inscrire explicitement la configuration de l'auditeur.
OriginalL'auteur sarahTheButterFly
J'ai eu le même problème avec Jboss EAP 6.1 et 6.3.
Im en utilisant Maven, alors, mon problème est sur la génération de l'OREILLE fichier, lors de l'Im à l'aide de Maven, j'ai découvert que mon OREILLE fichier a été déployé avec dépendances "explosé", c'est-à-dire, mon OREILLE fichier a été déployé avec un dossier contenant les fichiers de mon projet, et non pas une GUERRE et un des fichiers JAR.
Lorsque l'on étudie les différences entre le schéma de l'OREILLE répertoire et l'OREILLE de l'archive, j'ai découvert que ce que vous voyez n'est pas ce que vous obtenez avec Maven. Je pense que le problème est que les différents plugins Maven pour la GUERRE et l'OREILLE de construction ne sont pas appliqués lors de la création du explosé répertoires.
Pour le fixer, j'ai juste enlevé le "décortiquent" les directives de la POM pour l'OREILLE.
En plus, je ne le recommande pas explosé répertoires doivent être utilisés dans un fichier EAR.
OriginalL'auteur Edson Cezar