2013-06-13 5 views
29

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

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

ответ

57

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

  • Скачать отдельный Mojarra API и impl файлы (и, следовательно, не единственный javax.faces.jar файла). Текущая версия 2.1.x - 2.1.29, а текущая версия 2.2.x - 2.2.14. Предположим, что вы хотите перейти на 2.2.x. Вы можете скачать их по отдельности из их репозитория Maven:
  • Убедитесь, что JBoss отключен.
  • Update 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"/>
  • Update JSF осущ в /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 кэш/рабочих данных, просто чтобы убедиться, что нет старой копии баночки из предыдущих внедрений висит там, которые бы потенциально только сталкивается с новыми баночками:
    • Мусорных все содержимое /standalone/data (кроме папок пользовательских данных, таких как папки, содержащих загружаемые файлы, конечно)
    • Trash все содержимого /standalone/deployments
    • Trash все содержимое /standalone/tmp
  • Start 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 файла, как в эта процедура: How to install one jar variant of JSF (javax.faces.jar) on WildFly.

+2

Какой чистый набор инструкций. Это сработало. Спасибо! – user2172625

+1

Добро пожаловать. – BalusC

+0

Я рассматривал эту инструкцию, но я, когда запускаю сервер jboss7.1, получаю ошибку Критическая ошибка во время развертывания:: java.lang.NoClassDefFoundError: com/sun/faces/spi/InjectionProvider, любые подсказки? – simonC

Смежные вопросы