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

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

Если это уместно, в настоящее время я использую JBoss AS 7.1.


person user2172625    schedule 13.06.2013    source источник


Ответы (1)


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

  • Download the individual Mojarra API and impl files (and thus not the single javax.faces.jar file). Current latest 2.1.x version is 2.1.29 and current latest 2.2.x version is 2.2.14. Let's assume that you want to upgrade to 2.2.x. You can download them individually from their Maven repository:
  • Убедитесь, что JBoss выключен.
  • Update JSF API in /modules/system/layers/base/javax/faces/api/main:
    • Delete or backup the old JAR file (do NOT keep it in the same folder, even not renamed!).
    • Поместите туда файл jsf-api-2.2.14.jar.
    • Откройте файл module.xml и отредактируйте <resource-root>, чтобы указать новое имя файла, как в <resource-root path="jsf-api-2.2.14.jar"/>.
  • Update JSF impl in /modules/system/layers/base/com/sun/jsf-impl/main:
    • Delete or backup the old JAR file (do NOT keep it in the same folder, even not renamed!).
    • Поместите туда файл jsf-impl-2.2.14.jar.
    • Откройте файл module.xml и отредактируйте <resource-root>, чтобы указать новое имя файла, как в <resource-root path="jsf-impl-2.2.14.jar"/>.
  • Cleanup JBoss cache/work data just to make sure that there's no old copy of the JARs from previous deployments hanging in there which would potentially only collide with the new JARs:
    • Trash all contents of /standalone/data (except of custom data folders like folder containing uploaded files, of course)
    • Удалить все содержимое /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. Затем у вас есть два основных варианта: перейти на Mojarra 2.1.x или обновить как минимум до 2.2.7 или новее.

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

person BalusC    schedule 13.06.2013
comment
Я следовал этим инструкциям, но когда я запускаю сервер jboss7.1, я получаю сообщение об ошибке Критическая ошибка во время развертывания:: java.lang.NoClassDefFoundError: com/sun/faces/spi/InjectionProvider, какие-либо подсказки? - person simonC; 20.09.2013
comment
Я забыл упомянуть, что я использую версию jsf 2.2.3, мне нужен @ViewScoped в bean-компоненте CDI, поскольку я понимаю, что эта поддержка была включена в JSF2.2. - person simonC; 20.09.2013
comment
Я думаю, что вместо того, чтобы говорить об отдельной Mojarra 2.x, следует говорить об отдельной Mojarra 2.1.x, потому что JSF2.2 требует другого подхода. 2.x может указывать пользователям, что 2.2.. также выполняет те же действия. - person kosa; 21.08.2014
comment
@Nambari: вышеприведенное также применимо к 2.2. По крайней мере, на WildFly, у которого больше нет файлов .index и уже есть право входа в модуль com.sun.jsf-impl. Еще не пробовал 2.2 на JBoss AS7/EAP6. - person BalusC; 21.08.2014
comment
Вы можете быть правы с WildFly. Мы все еще с 7.1.1 Final. Я наткнулся на этот ответ, собирался внести предложенные изменения, но в комментариях говорилось, что 2.2.. имеет разные инструкции, чувствовал, что ответ и комментарии передают другое сообщение. Мысль довести до вашего сведения. - person kosa; 21.08.2014
comment
Я добавил модуль jsfi-mpl в качестве зависимости. См. здесь: stackoverflow.com/questions/17138490/ - person Spindizzy; 05.10.2015