2013-06-13 4 views
29

Comment mettre à jour Mojarra dans le serveur JBoss et lui dire d'utiliser les JARs Mojarra 2.x donnés au lieu du JBoss propre jboss-jsf-api_2.1_spec-2.0.1.Final.jar comme indiqué dans le journal de démarrage?Mise à niveau de JSF/Mojarra dans JBoss AS/EAP/WildFly

Si cela est pertinent, j'utilise actuellement JBoss AS 7.1.

Répondre

57

La procédure ci-dessous applique à JBoss AS 7.2+, JBoss EAP 6.1+ et JBoss wildfly 8+ et suppose que vous avez un contrôle total sur l'installation du serveur et la configuration. Ceci met à jour le serveur à l'échelle par défaut version JSF:

  • Télécharger les fichiers individuels Mojarra API et impl (et donc pas le fichier javax.faces.jar simple). La dernière version 2.1.x actuelle est 2.1.29 et la dernière version 2.2.x actuelle est 2.2.14. Supposons que vous voulez passer à la version 2.2.x. Vous pouvez les télécharger individuellement à partir de leur dépôt Maven:
  • Assurez-vous que JBoss est à l'arrêt.
  • Mise à jour API JSF dans /modules/system/layers/base/javax/faces/api/main:
    • Supprimer ou sauvegarder le fichier ancien JAR (ne gardez pas dans le même dossier, même pas renommé!).
    • Mettez le fichier jsf-api-2.2.14.jar là-dedans.
    • Ouvrir le fichier module.xml et modifier <resource-root> pour spécifier le nouveau nom de fichier comme dans <resource-root path="jsf-api-2.2.14.jar"/>
  • Mise à jour JSF impl dans /modules/system/layers/base/com/sun/jsf-impl/main:
    • Supprimer ou sauvegarder le fichier ancien JAR (ne gardez pas la même dossier, même pas renommé!).
    • Mettez le fichier jsf-impl-2.2.14.jar là-dedans.
    • Ouvrir le fichier module.xml et modifier <resource-root> pour spécifier le nouveau nom de fichier comme dans <resource-root path="jsf-impl-2.2.14.jar"/>
  • Nettoyage JBoss Cache/données de travail juste pour vous assurer qu'il n'y a pas ancienne copie des fichiers JAR de précédents déploiements suspendus là-bas qui serait entrent en collision potentiellement seulement avec les nouveaux fichiers JAR:
    • Trash tout le contenu de /standalone/data (sauf des dossiers de données personnalisées comme le dossier contenant les fichiers téléchargés, bien sûr)
    • Trash tout le contenu de /standalone/deployments
    • Trash tout le contenu de /standalone/tmp
  • Démarrez JBoss. Il devrait maintenant utiliser la nouvelle version de JSF pour tous les déploiements.

La procédure est identique pour JBoss AS 7.0/7.1 et JBoss EAP 6.0, il vous suffit de naviguer dans /modules/* au lieu de /modules/system/layers/base/*, et vous devez supprimer explicitement l'ancien il y a fichier .index, le cas échéant (JBoss en créera un). En outre, si le module.xml dans le dossier API manque <module name="com.sun.jsf-impl"/> à l'intérieur de <dependencies>, vous devez l'ajouter manuellement. Remarque importante est que les versions Mojarra 2.2.x antérieures à 2.2.7 échoueront dans AS/EAP pendant le déploiement avec l'exception suivante: org.jboss.weld.context.ContextNotActiveException: WELD-001303 No active contexts for scope type javax.faces.flow.builder.FlowDefinition. Vous avez alors essentiellement 2 options: downgrade vers Mojarra 2.1.x, ou mise à niveau vers 2.2.7 ou plus récent.

Si vous souhaitez passer à Mojarra 2.3, qui ne propose pas une variante plus 2-JAR sur Maven, vous aurez besoin de créer manuellement la variante 2-JAR basé sur fichier javax.faces.jar selon cette procédure: How to install one jar variant of JSF (javax.faces.jar) on WildFly.

+2

Quel ensemble d'instructions propre. Ça a marché. Je vous remercie! – user2172625

+1

De rien. – BalusC

+0

J'ai suivi ces instructions mais quand je lance le serveur jboss7.1 je reçois l'erreur Erreur critique lors du déploiement:: java.lang.NoClassDefFoundError: com/sun/faces/spi/InjectionProvider, des indices? – simonC