Обновите 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.