2013-06-13 34 views
29

Jak mogę uaktualnić Mojarrę na serwerze JBoss i powiedzieć, że używa on podanych JARów Mojarra 2.x zamiast JBoss, które mają jboss-jsf-api_2.1_spec-2.0.1.Final.jar jak wskazano w logu uruchamiania?Uaktualnienie JSF/Mojarra w JBoss AS/EAP/WildFly

Jeśli jest to istotne, obecnie używam JBoss AS 7.1.

Odpowiedz

57

Poniższa procedura dotyczy JBoss AS 7.2+, JBoss EAP 6.1+ i JBoss JBoss Application Server 8+ i zakłada, że ​​masz pełną kontrolę nad instalacją i konfiguracją serwera. Ten uaktualnia domyślną wersję JSF całego serwera:

  • pobrać poszczególne Mojarra API i impl plików (a zatem nie pojedynczy javax.faces.jar pliku). Aktualna wersja 2.1.x to 2.1.29, a aktualna najnowsza wersja 2.2.x to 2.2.14. Załóżmy, że chcesz dokonać aktualizacji do wersji 2.2.x. Można je pobrać z ich indywidualnie repozytorium Maven:
  • Upewnij się, że JBoss jest wyłączony.
  • Aktualizacja JSF API w /modules/system/layers/base/javax/faces/api/main:
    • Usuń lub backup stary plik JAR (nie przechowywać go w tym samym folderze, nawet nie zmieniona!).
    • Umieść tam plik jsf-api-2.2.14.jar.
    • Otwarte module.xml plik i edytować <resource-root> aby określić nową nazwę pliku jak w <resource-root path="jsf-api-2.2.14.jar"/>
  • Aktualizacja JSF IMPL w /modules/system/layers/base/com/sun/jsf-impl/main:
    • Usuń lub backup stary plik JAR (nie przechowywać go w taki sam folder, nawet nie zmieniono nazwy!).
    • Umieść tam plik jsf-impl-2.2.14.jar.
    • Otwarte module.xml plik i edytować <resource-root> aby określić nową nazwę pliku jak w <resource-root path="jsf-impl-2.2.14.jar"/> danych
  • Cleanup JBoss cache/działać tak, aby upewnić się, że nie ma stary egzemplarz słoi z poprzednich wdrożeń wisi tam, które tylko potencjalnie kolidować z nowymi JAR:
    • Trash całą zawartość /standalone/data (z wyjątkiem folderów niestandardowych danych, takich jak folder zawierający pliki przesłane, oczywiście)
    • kosza Cała zawartość /standalone/deployments
    • Trash cała zawartość /standalone/tmp
  • start JBoss. Powinien teraz używać nowej wersji JSF do wszystkich wdrożeń.

Taką samą procedurę stosuje się do JBoss AS 7.0/7.1 i JBoss EAP 6.0, trzeba tylko przeglądać w /modules/* zamiast /modules/system/layers/base/* i trzeba jawnie usuwać tam starą .index pliku, jeśli w ogóle (JBoss utworzy jedno). Ponadto, jeśli katalog module.xml w interfejsie API brakuje <module name="com.sun.jsf-impl"/> wewnątrz <dependencies>, musisz go ręcznie dodać.

Ważna informacja jest taka, że ​​wersje Mojarra 2.2.x starsze niż 2.2.7 ulegną awarii w AS/EAP podczas wdrażania z następującym wyjątkiem: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition. Zasadniczo masz 2 opcje: obniżenie wersji do wersji 2.1.x lub uaktualnienie do wersji co najmniej 2.2.7 lub nowszej.

W przypadku chcesz uaktualnić do Mojarra 2.3, który nie oferuje wariant 2-JAR już na Maven, to trzeba ręcznie utworzyć wariant 2-JAR na podstawie javax.faces.jar pliku, jak na ta procedura: How to install one jar variant of JSF (javax.faces.jar) on WildFly.

+2

Co za czysty zestaw instrukcji. Zadziałało. Dziękuję Ci! – user2172625

+1

Nie ma za co. – BalusC

+0

Mam następujące instrukcje, ale ja po uruchomieniu serwera jboss7.1 otrzymuję błąd krytyczny podczas wdrażania:: java.lang.NoClassDefFoundError: com/sun/faces/spi/InjectionProvider, wszelkie wskazówki? – simonC