2012-05-22 2 views
2

J'ai une application Web qui fonctionne sur JBoss AS 5.1.0 GA. Qui utilise des pots de Mojarra 2.0.4. Je suis en train de migrer ceci vers JBoss AS 7.1.1. Cette version de JBoss est fournie avec 2.1.7. J'ai donc dégradé la version de Mojarra en définissant des slots pour 2.0.4 et en les référant comme dépendances dans le META-INF/jboss-deployment-structure.xml ainsi que d'autres dépendances.Configuration de JBoss AS 7.1.1 avec les problèmes de Mojarra 2.0.4

jboss-déploiement structure.xml

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> 
    <deployment> 
    <exclusions> 
      <module name="javax.faces.api" slot="main"/> 
      <module name="com.sun.jsf-impl" slot="main"/> 
      <module name="javax.faces.api" slot="1.2"/> 
      <module name="com.sun.jsf-impl" slot="1.2"/>   
     </exclusions> 
     <dependencies> 
      <module name="org.hibernate.validator" export="true"/> 
      <module name="javax.validation.api" export="true"/> 
      <module name="com.google.gson" export="true"/> 
      <module name="org.codehaus.jettison" export="true"/> 
      <module name="org.jboss.resteasy.resteasy-jaxrs" export="true"/> 
      <module name="org.jboss.resteasy.resteasy-jackson-provider" export="true"/> 
      <module name="org.apache.log4j" export="true"/> 
      <module name="org.jboss.as.web" slot="main" export="true"/> 
      <module name="javax.faces.api" slot="2.0.4" export="true"/> 
      <module name="com.sun.jsf-impl" slot="2.0.4" export="true"/>  
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

Cela a provoqué l'exception suivante à être jeté au déploiement

12:51:18,761 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-3) Initializing Mojarra 2.0.4 (FCS b09) for context '' 
12:51:20,355 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-3) Unsanitized stacktrace from failed start...: javax.faces.FacesException: Class org.jboss.as.web.deployment.jsf.JandexAnnotationProvider is not an instance of com.sun.faces.spi.AnnotationProvider 

dont je parlais à this lien et modifié mes dépendances comme suit

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> 
    <deployment> 
     <exclusions> 
      <module name="javax.faces.api" slot="main"/> 
      <module name="com.sun.jsf-impl" slot="main"/> 
      <module name="javax.faces.api" slot="1.2"/> 
      <module name="com.sun.jsf-impl" slot="1.2"/> 
      <module name="org.jboss.as.web" slot="main" /> 
     </exclusions> 
     <dependencies> 
      <module name="org.hibernate.validator" export="true"/> 
      <module name="javax.validation.api" export="true"/> 
      <module name="com.google.gson" export="true"/> 
      <module name="org.codehaus.jettison" export="true"/> 
      <module name="org.jboss.resteasy.resteasy-jaxrs" export="true"/> 
      <module name="org.jboss.resteasy.resteasy-jackson-provider" export="true"/> 
      <module name="org.apache.log4j" export="true"/> 
      <module name="org.jboss.as.web" slot="main" export="true"/> 
      <module name="javax.faces.api" slot="2.0.4" export="true"/> 
      <module name="com.sun.jsf-impl" slot="2.0.4" export="true"/> 
      <module name="org.jboss.as.web" slot="main"> 
      <imports> 
      <include path="/org/**" /> 
      <exclude path="/META-INF/**" /> 
      </imports> 
      </module> 
     </dependencies> 
    </deployment> 
</jboss-deployment-structure> 

Ce qui est débarrassé de l'erreur au moment du déploiement, mais introduit l'exception d'exécution suivant

12:59:19,434 ERROR [stderr] (http--0.0.0.0-8080-4) java.lang.IllegalArgumentException: null source 
12:59:19,435 ERROR [stderr] (http--0.0.0.0-8080-4) at java.util.EventObject.<init>(EventObject.java:38) 
12:59:19,436 ERROR [stderr] (http--0.0.0.0-8080-4) at javax.faces.event.SystemEvent.<init>(SystemEvent.java:71) 
12:59:19,444 ERROR [stderr] (http--0.0.0.0-8080-4) at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:73) 

et

12:59:19,489 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[Faces Servlet]] (http--0.0.0.0-8080-4) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException 
    at com.sun.faces.context.PartialViewContextImpl.createPartialResponseWriter(PartialViewContextImpl.java:431) [jsf-impl.jar:2.0.4-b09] 
    at com.sun.faces.context.PartialViewContextImpl.access$300(PartialViewContextImpl.java:72) [jsf-impl.jar:2.0.4-b09] 
    at com.sun.faces.context.PartialViewContextImpl$DelayedInitPartialResponseWriter.getWrapped(PartialViewContextImpl.java:559) [jsf-impl.jar:2.0.4-b09] 

je me suis dit (par googler, bien sûr) que l'exception est souvent causée par trois choses

  1. étiquettes non valide/non fermées utilisés dans xhtml (une exception à tort propagée)
  2. de délai d'attente de session (un tort propagé exception)
  3. limite en aucun cas des paramètres POST dans Tomcat

Malheureusement, les deux premiers ne sont pas les causes. J'ai couru mes pages xhtml erronées par des validateurs et ai trouvé que le balisage était valide, ni ma session avait expiré. J'ai également augmenté le org.apache.tomcat.util.http.Parameters.MAX_COUNT à 5000 en standalone.xml pour adresser le troisième point. L'erreur persiste toujours.

J'ai également essayé de migrer vers la version fournie par défaut de Mojarra 2.7.1. Cela a empêché la première exception d'exécution mais la deuxième est restée. La seule chose particulière à propos de ces pages causant cette erreur est qu'ils ont des appels ajax en eux. Assez drôle, l'application fonctionne très bien avec AS 5.1.0 GA, donc si mon balisage est erroné, cela m'aurait aussi donné du temps sur 5.1.0, ce qui n'était pas le cas. Un balisage non valide est donc improbable. Des pointeurs très appréciés!

MISE À JOUR: Je viens de trouver que la ligne à PartialViewContextImpl.java:431 montre que le ctx.getRenderKit() évalue à null. Aucune idée pourquoi si

MAJ2: Il se trouve que le problème est vu que si j'utilise des composants purs d'entrée HTML dans le formulaire c.-à-<input type="text">, <select> etc. Si je retire ceux du <h:form> ou je les convertir en correspondant Tags JSF, ça marche bien. Quelque chose va terriblement mal quelque part. Je ne suis pas capable de comprendre exactement si cela est causé par jboss, Mojarra ou spécifiquement mon application. Je l'ai essayé avec une application JSF plain vanilla et il n'y avait pas d'erreurs si j'utilise ou non les tags d'entrée html. Donc, c'est la combinaison de mon application et jboss 7.x qui cause cela. Des idées?

+0

Les deux exceptions ont la même cause: il n'y a pas de UIViewRoot du tout. En supposant que cela se produit uniquement sur POST, la restauration de la vue de la session a apparemment échoué. Je ne suis pas sûr, mais il est théoriquement possible que l'instance particulière de JBoss 7 ait un mécanisme différent de gestion de session qui sérialiserait les sessions. Est-ce que tous vos beans à portée de vue implémentent 'Serializable'? Essayez de tester avec la méthode d'économie d'état définie sur 'client', elle devrait produire des avertissements dans les journaux pour les classes qui ne sont pas implémentables par sérialisable mais devraient le faire. – BalusC

+0

@BalusC: Hmmm .. Oui, mon champ d'application scope les haricots implémentent 'Serializable'. J'avais aussi essayé de mettre la méthode d'économie d'état à 'client'. Je l'ai encore essayé maintenant, mais ça ne le résout pas! – Nikhil

+0

@BalusC: J'ai un certain nombre de paramètres de contexte définis dans 'web.xml' qui pourraient être en conflit ..? Veuillez regarder http://pastebin.com/5Z5e9usd – Nikhil

Répondre

2

Enfin! La question était liée à un bogue dans Mojarra 2.1.7 comme rapporté here

La solution est de donner un attribut name à chaque composant pur html inclus dans <h:form>. La partie que je ne pouvais pas comprendre que ce bug semble être lié à Mojarra 2.1.7. Et les pots que j'ai configurés pour mon application étaient version 2.0.4, mais l'erreur a été vue.

+0

Intéressant.Le problème s'est toutefois fermé avec un "juste utiliser un attribut de nom" comme solution. Je me demande si cela ne devrait pas être corrigé à la place. –

+0

À mon humble avis, il devrait être réparé. Dans mon cas, je n'ai vraiment pas besoin d'un attribut de nom! Je l'ajoute juste pour le faire fonctionner. – Nikhil

+0

De plus, j'utilise des plugins jQuery (le mien et des tiers) qui génèrent des entrées et sélectionnent des éléments côté client. Maintenant, je dois m'assurer que même * ils * ont un attribut de nom! -_- – Nikhil

Questions connexes