Обновите JSF / Mojarra в JBoss AS / EAP / WildFly

Как мне обновить Mojarra на сервере JBoss и сказать, что он использует заданные JAR Mojarra 2.x вместо собственного JBoss jboss-jsf-api_2.1_spec-2.0.1.Final.jar как указано в журнале запуска?

Если это актуально, я сейчас использую JBoss AS 7.1.

1 ответ

Решение

Описанная ниже процедура применяется к JBoss AS 7.2+, JBoss EAP 6.1+ и JBoss WildFly 8+ и предполагает, что вы полностью контролируете установку и настройку сервера. Это обновляет общесерверную версию JSF поумолчанию:

  • Загрузите отдельный API Mojarra и файлы impl(и, следовательно, не единственныйjavax.faces.jarфайл). Текущая последняя версия 2.1.x - 2.1.29, а текущая последняя версия 2.2.x - 2.2.14. Давайте предположим, что вы хотите обновить до 2.2.x. Вы можете скачать их по отдельности из репозитория Maven:
    • jsf-api-2.2.14.jar
    • jsf-impl-2.2.14.jar
  • Убедитесь, что JBoss выключен.
  • Обновите JSF API в /modules/system/layers/base/javax/faces/api/main:
    • Удалите или сделайте резервную копию старого файла JAR (НЕ храните его в той же папке, даже не переименованный!).
    • Положил jsf-api-2.2.14.jar файл там.
    • открыто module.xml файл и редактировать <resource-root> указать новое имя файла как в <resource-root path="jsf-api-2.2.14.jar"/>
  • Обновление JSF impl в /modules/system/layers/base/com/sun/jsf-impl/main:
    • Удалите или сделайте резервную копию старого файла JAR (НЕ храните его в той же папке, даже не переименованный!).
    • Положил jsf-impl-2.2.14.jar файл там.
    • открыто module.xml файл и редактировать <resource-root> указать новое имя файла как в <resource-root path="jsf-impl-2.2.14.jar"/>
  • Очистите кеш / рабочие данные JBoss просто для того, чтобы убедиться, что в них не осталось старых копий JAR из предыдущих развертываний, которые потенциально могли бы столкнуться только с новыми JAR:
    • Удалите все содержимое /standalone/data (конечно, кроме пользовательских папок с данными, таких как папки с загруженными файлами)
    • Удалите все содержимое /standalone/deployments
    • Удалите все содержимое /standalone/tmp
  • Запустите JBoss. Теперь он должен использовать новую версию JSF для всех развертываний.

Та же процедура применяется к JBoss AS 7.0/7.1 и JBoss EAP 6.0, вам нужно только просмотреть в /modules/* вместо /modules/system/layers/base/*и нужно явно удалить старую .index файл там, если есть (JBoss автоматически создаст один). Кроме того, если module.xml в папке API отсутствует <module name="com.sun.jsf-impl"/> внутри <dependencies>, то вам нужно вручную добавить его.

Важным примечанием является то, что версии Mojarra 2.2.x старше 2.2.7 не будут работать в AS/EAP во время развертывания со следующим исключением: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition, Тогда у вас есть 2 варианта: перейти на Mojarra 2.1.x или обновиться до версии 2.2.7 или выше.

В случае, если вы хотите перейти на Mojarra 2.3, который больше не предлагает вариант 2-JAR на Maven, вам нужно будет вручную создать вариант 2-JAR на основе javax.faces.jar файл согласно этой процедуре: Как установить один jar-вариант JSF (javax.faces.jar) на WildFly.

Другие вопросы по тегам