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

Maven Java Discussion :

Problème de dépendance maven - bean spring non trouvé.


Sujet :

Maven Java

  1. #1
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut Problème de dépendance maven - bean spring non trouvé.
    Bonjour à tous,

    Il y a quelques jours que je bloque sur un problème de dépendance maven, et je sollicite vivement votre aide.

    Depuis le bean JSF du projet spring-jsf j'essaye d'accéder au service déclaré dans le projet spring-hibernate. Le bean JSF et le service sont déclarés via spring.
    Les deux projets sont des projets maven. spring-jsf est packagé en war et le projet spring-hibernate est packagé en jar.

    La pièce jointe PJ_1 illustre :
    1. L'arborescene des deux projets.
    2. Le backing bean de JSF (TestBean)
    3. La conf spring du projet spring-hibernate ou le bean introuvable est déclaré (testServiceProxy).
    4. La console où affichée l'exception : "No bean named 'testServiceProxy' is defined".
    Nom : PJ_1.png
Affichages : 491
Taille : 99,2 Ko
    La pièce jointe PJ_2 montre que le jar représentant le projet spring-hibernate se trouve parmi les dépendances maven du projet spring-jsf.
    Nom : PJ_2.png
Affichages : 432
Taille : 32,7 Ko
    N.B. Le jar spring-hibernate-1.0-SNAPSHOT se trouve bien dans le repository local.

    Je reste à votre disposition pour toute autre information.

    Je vous remercie par avance.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Points : 7 275
    Points
    7 275
    Par défaut
    Hello,

    Comme ça, ça a l'air correct d'un point de vue Maven.
    Comment tes projets chargent-ils les fichiers de configuration Spring ?
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Comme te l'indique Romain, je ne crois pas que celà un quelconque rapport avec Maven et/ou M2E

    Ton contexte de test ne semble pas chargé...

    Pour des tests unitaires avec JUNit tu peux indiquer les fichiers de contexte à l'aide l'annotation
    @ContextConfiguration(locations = {"classpath:tonpath/toncontexte.xml"})

    Hors test, tu peux faire des inclusions <import resource="toncontexte.xml"/> et parametrer ton web.xml (balise <context-param> )...
    De manière générale, tu peux aussi indiquer au lancement de ton appli la localisation des fichiers à prendre en compte. Par exemple :
    ApplicationContext context =
    new ClassPathXmlApplicationContext(new String[] {"fichier.xml", "fichier2.xml","fichier3.xmll"});
    Les 3 fichiers doivent se trouver dans ton classpath

    a+
    Philippe

  4. #4
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Messieurs bonjour,

    Je vous remercie de votre réponse.
    Grace à vos clarifications, je réalise qu'il s'agit plutôt d'un problème de chargement de contexte spring. Je retourne vers vous pour un plus de précision.

    Je souhaite inclure le fichier applicationContext.xml du projet spring-hibernate dans celui du projet spring-jsf.
    Pour cela, dans applicationContext.xml du projet spring-jsf j'ai rajouté la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <import resource="spring/applicationContext.xml"/>
    en espérant que cela pointe vers le fichier applicationContext.xml du projet spring-hibernate. Hélas! l'exception
    Caused by: java.io.FileNotFoundException: jndi:/localhost/spring-jsf/WEB-INF/spring/applicationContext.xml
    remonte lors du déploiement de war (spring-jsf).

    Ma question, Comment faire pour indiquer le chemin vers le fichier applicationContext.xml du projet spring-hibernate?

    Dans web.xml j'avais déjà inséré la balise :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
      </context-param>

    Merci par avance,

  5. #5
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Il faut indiquer tous tes contextes dans ton web.xml !

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <context-param>     
        <param-name>contextConfigLocation</param-name> 
        <param-value>       
             /WEB-INF/applicationContext.xml /WEB-INF/spring/applicationContext.xml 
        </param-value>
    </context-param>

    a+
    Philippe

  6. #6
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Bonjour Philippe,

    Merci encore de ta réponse.

    Le /WEB-INF/spring/applicationContext.xml que tu m'as conseillé d'ajouter dans <param-value>, ne semble pas fonctionner. Je suppose c'est du fait que le répértoire spring ne se trouve pas dans WEB-INF.

    Après quelques recherches sur le net, j'ai compris que les deux context spring (celui de spring-jsf et celui de spring-hibernate) doivent être chargé par par le même ClassLoader (ou dans la même hiérarchie de ClassLoader). J'avoue que je ne sais pas où il fait le faire (que cela soit en xml ou en java).

    Dans ApplicationContext.xml du projet spring-jsf, j'ai tenté cet import :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <import resource="classpath*:spring/applicationContext.xml"/>
    L'exception
    Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManager
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1718)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1569)
    ... 30 more
    surgit, sachant que j'ai bien la dépendance maven de spring-tx.

    Auriez-vous de nouvelles suggestions pour me remettre sur les bons rails?

    Merci,

  7. #7
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Si tes fichiers sont tous dans le classpath :

    Dans ton web.xml / balise <param-value>
    classpath*:context1.xml
    classpath*:context2.xml
    etc

    Tu noteras le *

    Ensuite pour l'inclusion (ex context2 dans context1) :
    <import resource="classpath:context2.xml"/>

  8. #8
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Philippe,

    Citation Envoyé par Philippe Bastiani Voir le message
    Si tes fichiers sont tous dans le classpath :
    Context1.xml se trouve dans l'arborescence src/main/resources, donc forcément il se trouve dans le classpath.
    Context2.xml se trouve dans le répértoire WEB-INF.

    La pièce jointe illustre les modifications que j'ai faites. Elle illustre également l'exception indiquant que le fichier applicationContext.xml (de l'autre projet) n'est pas trouvé.
    Nom : PJ_4.png
Affichages : 504
Taille : 177,4 Ko
    Je te remercie de ton précieuse aide, et en même temps je m'excuse du temps que je te fas perdre

  9. #9
    Membre éprouvé

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Points : 1 230
    Points
    1 230
    Par défaut
    Le * aurait du résoudre ton problème...

    Celà ressemble à un problème de classloader de ton container d'application. As-tu regardé comment été déployée ton application ? En particulier le contenu de WEB-INF

    c.f. cet article pour Tomcat et l'extrait de la doc spring

    Classpath*: portability
    The wildcard classpath relies on the getResources() method of the underlying classloader. As
    most application servers nowadays supply their own classloader implementation,
    the behavior might differ especially when dealing with jar files. A simple test
    to check if classpath* works is to use the
    classloader to load a file from within a jar on the classpath: getClass().getClassLoader().getResources("<someFileInsideTheJar>").
    Try this test with files that have the same name but are placed inside two
    different locations. In case an inappropriate result is returned, check the
    application server documentation for settings that might affect the classloader
    behavior.

    Regarde cet exemple https://github.com/davidmendoza/MultiModuleSpringMVC

  10. #10
    Membre habitué Avatar de ziad.shady
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 212
    Points : 139
    Points
    139
    Par défaut
    Bonjour Philippe,

    Après une longue absence suite à des soucis de santé... me voilà de retour.
    Je vais éplucher les liens que tu m'avais envoyé et je te tiendrai informé ainsi que les chers membres de ce forum.

    Merci,

Discussions similaires

  1. [2.x] Problème sous Wamp : fichier d'autochargement non trouvé
    Par Likan dans le forum Symfony
    Réponses: 4
    Dernier message: 16/01/2013, 11h53
  2. [Problème montage disque dur] fichier device non trouvé dans /dev/
    Par 19dev86 dans le forum Administration système
    Réponses: 3
    Dernier message: 19/08/2010, 08h39
  3. Problème de dépendance mais en fait non
    Par rodbeck dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 02/11/2009, 09h43
  4. probléme de création des bean Spring
    Par lionel84 dans le forum Spring Web
    Réponses: 1
    Dernier message: 20/08/2008, 20h38

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