Actualice JSF / Mojarra en JBoss AS / EAP / WildFly

¿Cómo actualizo Mojarra en el servidor de JBoss y le digo que use los jboss-jsf-api_2.1_spec-2.0.1.Final.jar Mojarra 2.x en lugar del propio JBoss jboss-jsf-api_2.1_spec-2.0.1.Final.jar como se indica en el registro de inicio?

Si eso es relevante, actualmente estoy usando JBoss AS 7.1.

El siguiente procedimiento se aplica a JBoss AS 7.2+ , JBoss EAP 6.1+ y JBoss WildFly 8+ y asume que usted tiene el control total sobre la instalación y configuración del servidor. Esto actualiza la versión JSF predeterminada en todo el servidor:

  • Descargue la API de Mojarra individual y los archivos impl (y, por lo tanto, no el único archivo javax.faces.jar ). La última versión 2.1.x actual es 2.1.29 y la última versión 2.2.x actual es 2.2.14. Supongamos que desea actualizar a 2.2.x. Puede descargarlos individualmente desde su repository Maven:
    • jsf-api-2.2.14.jar
    • jsf-impl-2.2.14.jar
  • Asegúrate de que JBoss esté apagado.
  • Actualizar API JSF en /modules/system/layers/base/javax/faces/api/main :
    • Elimine o haga una copia de seguridad del archivo JAR anterior (NO lo guarde en la misma carpeta, ¡ni cambie el nombre!).
    • Coloque el archivo jsf-api-2.2.14.jar allí.
    • Abra el archivo module.xml y edite para especificar el nuevo nombre de archivo como en
  • Actualice JSF impl en /modules/system/layers/base/com/sun/jsf-impl/main :
    • Elimine o haga una copia de seguridad del archivo JAR anterior (NO lo guarde en la misma carpeta, ¡ni cambie el nombre!).
    • Coloque el archivo jsf-impl-2.2.14.jar allí.
    • Abra el archivo module.xml y edite para especificar el nuevo nombre de archivo como en
  • Limpie los datos de caché / trabajo de JBoss solo para asegurarse de que no haya una copia antigua de los archivos JAR de las implementaciones anteriores que colisionen, lo que podría colisionar con los nuevos JAR:
    • Trash todo el contenido de /standalone/data (excepto las carpetas de datos personalizados como la carpeta que contiene los archivos cargados, por supuesto)
    • Papelera de todo el contenido de /standalone/deployments
    • Basure todos los contenidos de /standalone/tmp
  • Comienza JBoss. Ahora debería usar la nueva versión JSF para todas las implementaciones.

El mismo procedimiento se aplica a JBoss AS 7.0 / 7.1 y JBoss EAP 6.0 , solo necesita navegar en /modules/* lugar de /modules/system/layers/base/* , y debe eliminar explícitamente el viejo archivo .index allí , si hay alguno (JBoss autocreará uno). Además, si el module.xml en la carpeta de API pierde dentro de , entonces necesita agregarlo manualmente.

Una nota importante es que las versiones de Mojarra 2.2.x anteriores a la 2.2.7 fallarán en AS / EAP durante la implementación con la siguiente excepción: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition . Básicamente tiene 2 opciones: cambiar a Mojarra 2.1.x, o actualizar a 2.2.7 o más reciente.

En caso de que desee actualizar a Mojarra 2.3 , que ya no ofrece una variante 2-JAR en Maven, deberá crear manualmente la variante 2-JAR basada en el archivo javax.faces.jar según este procedimiento. : Cómo instalar una variante jar de JSF (javax.faces.jar) en WildFly .