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

Spring Java Discussion :

Spring 3.0/JPA: Loader des beans contenus dans un .jar [Data]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Finlande

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut Spring 3.0/JPA: Loader des beans contenus dans un .jar
    Bonjour,

    J'ai un petit problème avec Spring 3.0 et JPA. Je travaille sur un projet pour lequel les DAO se trouve dans une jar.
    Les DAO sont déclarés de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Repository("TotoDAO")
    public class TotoDAO{ ...}
    Dans mon service Spring, je récupère les DAO de la façon suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @Resource(name = "TotoDAO")
    TotoDAO totodao;
    Pour certaines raisons, je ne peux pas (et ne veux pas, sinon a quoi serviraient les annotations...) écrire les beans dans le fichier application-context.xml.

    Mon problème est que, lors du scan de Spring, les DAO dans les jar ne sont pas instancié et je me retrouve avec une belle NullPointerException.

    J'ai tenté de préciser dans le dispatcher les packages que je souhaité voir chargés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <context:component-scan base-package="org.projet" >
             <context:include-filter type="regex" expression="org.projet.monpackage.*"/>
             <context:include-filter type="regex" expression="org.projet.contenudujar.*"/>        
        </context:component-scan>
    Malheureusement, cette solution n'a pas l'air de fonctionner mieux.
    Quelqu'un aurait-il une solution? ou une piste?
    Pour info, je travaille avec java 1.5.

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Salut essaie de faire un @Autowired à la place de ton @Resource, car Spring utilise cette dernière pour faire une recherche par nom dans le conteneur mais si je me trompe pas cette recherche se fait uniquement sur les beans ayant leurs noms déclararés par l'attribut name (optionel) dans le conteneur... En même temps il ne faut pas que ta classe DAO implémente une interface ou possède des classes dérivées sinon il faut utiliser l'annotation @Resource comme tu l'as fait mais ce denier comme je l'ai dit doit être déclaré directement dans le conteneur enfin je pense pas que c'est une betise de dire ça, je vais regarder mes notes pour confirmer lol!

  3. #3
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Finlande

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut
    Malheureusement les DAO implémentent héritent d'un DAO générique qui implémente une interface.
    Cependant, en fouillant un peu j'ai appris que je pouvais utiliser la balise <import /> dans mon dispatcher-servlet.xml ou mon application-context.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <import resource="classpath*:applicationContext.xml"/>
    Cela permet de charger tous les contexts, même ceux contenus dans des .jar.

    J'ai cependant un petit problème. Là où j'arrive parfaitement à récupérer un service via annotation [ @Service("Toto") --> @Resource(name = "Toto") ], je n'y arrive pas pour les DAO.
    J'ai vérifié que les noms correspondent (sait-on jamais) mais rien n'y fait.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    En effet oui la balise te permet de récuperer un conteneur Spring situé dans un .jar mais il faut connaitre le nom du conteneur parce que avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <import resource="classpath*:applicationContext.xml"/>
    tu importes tous les fichiers nommés applicationContext.xml situés dans tes .jar, immagines toi que certains de ces fichiers font la même déclaration que toi pour le nom de leur bean, l'annotation @Resource ne passera pas. Le mieux pour toi c'est d'importer contexte par contexte et non de les appeler tous à la fois.
    PS:J'eesaie de comprendre ton problème mais la facon dont tu les poses je n'y arrive pas si tu peux la reformuler ta question.

  5. #5
    Membre averti
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Finlande

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Par défaut
    Je n'avais pas penser à ce soucis. Je vais essayer de préciser l'import voir si ça résout le problème.

    Merci

    Edit : Bon, même en précisant les contexts à importer ça ne fonctionne pas toujours. J'ai toujours un problème au niveau de l'inversion de dépendance.
    Ce qui est bizarre, c'est qu'en récupérant le context via un contextHolder, je vois que tous mes beans sont bien instanciés.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Affiche l'intégralité de tes applicationContext.xml, on verra peut être qu'il existe des erreurs dans les déclarations. et aussi les squeletes des classes Dao et Service enfin celles qui ne passent pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Spring 3.0/JPA: Loader des beans contenus dans un .jar
    Par lookthat dans le forum Spring Web
    Réponses: 0
    Dernier message: 21/01/2011, 14h14
  2. Définir le target des liens contenus dans une balise Object
    Par Booyakha dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/02/2007, 15h23
  3. Réponses: 1
    Dernier message: 09/11/2006, 13h34
  4. [PL/SQL] Parcours des enregistrements contenus dans 1 curso
    Par lapartdombre dans le forum Oracle
    Réponses: 6
    Dernier message: 01/12/2005, 13h50
  5. Réponses: 9
    Dernier message: 27/10/2005, 22h38

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