Ответ 1
Ниже приведена процедура JBoss AS 7.2 +, JBoss EAP 6.1 + и JBoss WildFly 8 +, и предполагается, что вы полный контроль над установкой и настройкой сервера. Это обновляет версию сервера по умолчанию:
- Загрузите отдельную Mojarra API и impl (и, следовательно, не единственный файл
javax.faces.jar
). Текущая версия 2.1.x - 2.1.29, а текущая версия 2.2.x - 2.2.14. Предположим, что вы хотите перейти на 2.2.x. Вы можете загрузить их отдельно из своего репозитория Maven: - Убедитесь, что JBoss отключен.
- Обновите API JSF в
/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.