Configurazione di JBoss come 7.1.1 con problemi di Mojarra 2.0.4
Domanda
Ho un webapp funzionante su JBoss come 5.1.0 GA. Che utilizza i barattoli Mojarra 2.0.4. Sono in un processo di migrazione di questo su JBoss come 7.1.1. Questa versione di JBoss viene spedita con 2.1.7. Così ho declassato la versione Mojarra definendo gli slot per 2.0.4 e riferendosi a loro come dipendenza nel META-INF/jboss-deployment-structure.xml
insieme ad altre dipendenze.
JBoss-Deployment-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>
.
Ciò ha causato la lancia della distribuzione
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
.
a cui mi riferivo a link e modifica le mie dipendenze come segue che si è liberato dell'errore alla distribuzione ma ha introdotto la seguente eccezione di runtime
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)
.
e
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]
.
I figurato (da Google, ovviamente) che l'eccezione è spesso causata da tre cose
- .
- Tag non validi / non incluiti utilizzati in XHTML (un'eccezione erroneamente propagata)
- timeout della sessione (un'eccezione erroneamente propagata)
- Limite su No dei parametri post in Tomcat
Sfortunatamente, i primi due non erano le cause. Ho corso le mie errate pagine XHTML attraverso i validatori e ho scoperto che Markup era valido, né la mia sessione era scaduta. Ho anche aumentato il org.apache.tomcat.util.http.Parameters.MAX_COUNT
a 5000 in standalone.xml
per affrontare il terzo punto. L'errore persiste ancora.
Ho anche provato a migrare alla versione predefinita Mojarra 2.7.1. Che ha impedito la prima eccezione di runtime ma il secondo è rimasto. L'unica cosa particolare di quelle pagine che causano questo errore è che hanno chiamate ajax in loro. Abbastanza divertente, l'applicazione funziona bene con come 5.1.0 GA, quindi se il mio markup è errato, mi avrebbe dato un momento difficile su 5.1.0, che non è stato. Quindi il markup non valido è improbabile. Tutti i puntatori molto apprezzati!
Aggiornamento : Ho appena scoperto che la linea su PartialViewContextImpl.java:431
mostra che il ctx.getRenderKit()
sta valutando null
. Nessuna idea Perché però
Update2 : Si scopre che il problema è visto solo se utilizzo i componenti in ingresso HTML pure all'interno del modulo IE <input type="text">, <select>
ecc. Se rimuovo quelli dal <h:form>
o lo converti in corrispondenti tag JSF , funziona bene. Qualcosa sta andando terribilmente sbagliato da qualche parte. Non sono in grado di capire esattamente se questo è causato da Jboss, Mojarra o in particolare la mia app. L'ho provato con una semplice app Vanilla JSF e non ho avuto errori se utilizzo o meno i tag di input HTML. Quindi è la combinazione della mia app e JBoss 7.x che sta causando questo. Qualche idea?
Soluzione
Infine!Il problema è stato correlato a un bug in Mojarra 2.1.7 come riportato qui
La soluzione è dare un nome <h:form>
.La parte che non riuscivo a capire che questo bug sembra essere correlato a Mojarra 2.1.7.E i vasi che ho configurato per la mia app erano la versione 2.0.4, eppure l'errore è stato visto.