Aggiorna JSF / Mojarra in JBoss AS / EAP / WildFly

Come posso aggiornare Mojarra nel server JBoss e dirgli di usare i jboss-jsf-api_2.1_spec-2.0.1.Final.jar Mojarra 2.x invece di JBoss proprio jboss-jsf-api_2.1_spec-2.0.1.Final.jar come indicato nel log di avvio?

Se ciò è rilevante, attualmente sto usando JBoss AS 7.1.

La seguente procedura si applica a JBoss AS 7.2+ , JBoss EAP 6.1+ e JBoss WildFly 8+ e presuppone il pieno controllo sull’installazione e sulla configurazione del server. Questo aggiorna la versione JSF predefinita del server:

  • Scarica i singoli file API e impl di Mojarra (e quindi non il singolo file javax.faces.jar ). La versione 2.1.x attuale è la 2.1.29 e la versione 2.2.x attuale 2.2.14. Supponiamo che vogliate effettuare l’aggiornamento a 2.2.x. Puoi scaricarli singolarmente dal loro repository Maven:
    • jsf-api-2.2.14.jar
    • jsf-impl-2.2.14.jar
  • Assicurati che JBoss sia spento.
  • Aggiornamento dell’API JSF in /modules/system/layers/base/javax/faces/api/main :
    • Elimina o fai il backup del vecchio file JAR (NON tenerlo nella stessa cartella, nemmeno rinominato!).
    • Metti il ​​file jsf-api-2.2.14.jar lì.
    • Aprire il file module.xml e modificare per specificare il nuovo nome del file come in
  • Aggiorna JSF impl in /modules/system/layers/base/com/sun/jsf-impl/main :
    • Elimina o fai il backup del vecchio file JAR (NON tenerlo nella stessa cartella, nemmeno rinominato!).
    • Metti il ​​file jsf-impl-2.2.14.jar lì.
    • Aprire il file module.xml e modificare per specificare il nuovo nome del file come in
  • Ripulire i dati della cache / lavoro di JBoss solo per assicurarsi che non ci sia una vecchia copia dei JAR dalle precedenti distribuzioni appese lì che potenzialmente si scontrano solo con i nuovi JAR:
    • Cestino tutti i contenuti di /standalone/data (ad eccezione delle cartelle di dati personalizzate come la cartella contenente i file caricati, ovviamente)
    • Cestino tutti i contenuti di /standalone/deployments
    • Elimina tutti i contenuti di /standalone/tmp
  • Avvia JBoss. Dovrebbe ora utilizzare la nuova versione JSF per tutte le distribuzioni.

La stessa procedura si applica a JBoss AS 7.0 / 7.1 e JBoss EAP 6.0 , è sufficiente navigare in /modules/* invece di /modules/system/layers/base/* , ed è necessario eliminare esplicitamente il vecchio file .index lì , se ce ne sono (JBoss ne autocreane uno). Inoltre, se il module.xml nella cartella API manca all’interno di , è necessario aggiungerlo manualmente.

Nota importante: le versioni Mojarra 2.2.x precedenti alla 2.2.7 falliscono in AS / EAP durante la distribuzione con la seguente eccezione: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition . In pratica hai 2 opzioni: esegui il downgrade a Mojarra 2.1.x, o esegui l’aggiornamento almeno al 2.2.7 o più recente.

Nel caso in cui desideri eseguire l’upgrade a Mojarra 2.3 , che non offre più una variante 2-JAR su Maven, devi creare manualmente la variante 2-JAR basata sul file javax.faces.jar come da questa procedura : Come installare una variante jar di JSF (javax.faces.jar) su WildFly .