IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Wildfly/JBoss Java Discussion :

[EAP6.4 / JBoss7] Préférer les libs de ma webapp plutôt que celles de JBoss


Sujet :

Wildfly/JBoss Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [EAP6.4 / JBoss7] Préférer les libs de ma webapp plutôt que celles de JBoss
    Hello,

    je migre uen webapp (WAR, Spring MVC/WS/Data) de Tomcat 7 vers JBoss EAP 6.4.

    J'utilise notamment JPA2.1 (mais pas que), or JBoss embarque JPA2.0.
    J'aurais aimé jouer avec les classloaders (parent-first, parent-last, comme on peut le faire sur la plupart des serveurs), mais visiblement ce n'est plus possible depuis JBoss7 où il faut maintenant jouer avec leur système de modules à inclure/exclure (via un fichier jboss-deployment-structure).
    J'ai pu trouver une solution pour déactiver le JPA de JBoss : https://issues.jboss.org/browse/WFCORE-209 mais j'ai pas mal d'autres libs à exclure.

    => Sauriez-vous s'il existe toujours un moyen de faire en sorte que ma webapp utilise en prio ses jars du WEB-INF/lib plutôt que ceux de JBoss ?

    Merci.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Peut-être pourrais-tu essayer de créer un ou plusieurs modules qui contiennent tes dépendances et les lier via le fichier manifest.mf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dependencies: clemessy.dsi.jaas.authentification, clemessy.dsi.commun
    (sans garantie)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Le soucis est que ma liste de dépendances risque de souvent changer.
    Je suis sur un projet Maven utilisant Spring Boot et un pom parent de Spring Boot pour gérer les dépandances et leurs versions.
    Je ne pense pas maintenir une liste de librairies à inclure dans un module JBoss.
    Le soucis étant aussi que çe ne me permettrait pas de maitriser les upgrades du serveur d'appli. Lors du passage de EAP 6.4 à 6.5 par exemple, je risque d'avoir des conflits sur les numéros de versions d'autres jars. Ca va être compliqué à gérer et pas très stable tout ça :p, d'autant que mes tests d'intégration (qui s'exécutent sur un tomcat embed) ne détecteront pas ce genre de soucis, ça ne surviendra qu'une fois sur JBoss.

    En fait je souhaiterais faire comme sur Tomcat ou WebSphere.
    - Sur Tomcat il n'y a rien à faire (bon, ce n'est pas non plus un serveur JavaEE, juste un moteur de servlets).
    - Sur WebSphere, je n'ai qu'à déclarer un classloader en parent-first (ou parent-last, je ne sais jamais...) pour prioriser les jars de ma webapp. C'est fait une fois et je suis tranquille pour 150 ans.

    => Est-il possible de faire la même chose sous JBoss (classloader parent-first/last) ?
    Ou doit-on forcément passer par leur système de modules ? J'ai lu pas mal de doc sur les classloaders JBoss, mais il semblerait que ce ne soit plus utilisable depuis JBoss7 (ce qu'utilise EAP 6.4), cette méthodo étant remplacée par les modules. Du moins je n'ai pas réussit à définir de classloader sur EAP 6.4.

    Merci

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ben, JBoss a souvent eu une politique un peu spéciale pour le classloader, pour la version 7, je ne sais pas si tu peux faire une application qui n'utiliserait que ses propres jar... ce n'est pas du tout ce qu'on fait nous, bien au contraire, on essaye de sortir un max pour centraliser.

    Si je tombe sur un truc, je te le dirai
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci

    En attendant je vais essayer de déclarer un module qui va référencer tous les jars. On verra bien ce que ça donne.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Ben, JBoss a souvent eu une politique un peu spéciale pour le classloader, pour la version 7, je ne sais pas si tu peux faire une application qui n'utiliserait que ses propres jar... ce n'est pas du tout ce qu'on fait nous, bien au contraire, on essaye de sortir un max pour centraliser.

    Si je tombe sur un truc, je te le dirai
    De mémoire mais ça remonte loin oui, suffit d'exclure tout les package jboss dans ta dependency list. Le problème, c'est que coup tu n'a plus ni jpa ni cdi, ni webservice, ni rien de ce qui fait un serveur J2EE.

    JPA faisant partie de la spec J2EE il est normal qu'il soit assez fortement lié au conteneur. C'est plus facile pour tomcat puisque tomcat n'est pas un conteneur j2EE

    Pour la plupart des libs, jboss prioritise les lib présentes dans le EAR / WAR. Sauf pour les libs faisant partie de la specs, là faut jouer avec le classloading de jboss7 qui n'est jamais qu'un système OSGi

    https://docs.jboss.org/author/displa...eference+Guide
    section "Updating the Hibernate 4.x jars to a different Hibernate 4.x version"

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Regarde ici, ils expliquent bien le fonctionnement du classloader de JBoss 7.

    Il semblerait que pour ce qui est des modules "system", tu seras obligé de passer par l'exclusion dans le jboss-deployment-structure (ou modifier le paramétrage de ton serveur pour changer la version système comme le dit tchize_ pour JPA)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éprouvé
    Avatar de hasalex
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 879
    Points : 1 269
    Points
    1 269
    Par défaut
    Ton problème avec JPA est un peu spécifique. Pour la plupart des librairies, la version que tu embarques dans ton war sera prioritaire. Par contre, pour tout ce qui concerne Java EE, JBoss joue le rôle de conteneur et impose donc ses librairies. Ça pose généralement problème pour JPA et JSF qui sont souvent utilisés avec Spring. Le même problème peut aussi se poser pour les logs.

    La solution, c'est donc celle que tchize_ a citée : court-circuiter le moteur de JBoss. Pour les autres librairies, il n'y a rien de plus à faire.

Discussions similaires

  1. Réponses: 19
    Dernier message: 11/03/2015, 16h23
  2. Réponses: 4
    Dernier message: 14/03/2011, 15h29
  3. Réponses: 1
    Dernier message: 13/04/2008, 10h17
  4. [kdevelop]linker les lib openGL sous kdevelop
    Par bafman dans le forum OpenGL
    Réponses: 6
    Dernier message: 16/12/2003, 08h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo