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 Web Java Discussion :

[Spring MVC] Traitement à effectuer au lancement de l'application


Sujet :

Spring Web Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 20
    Points
    20
    Par défaut [Spring MVC] Traitement à effectuer au lancement de l'application
    Bonjour,

    Je développe actuellement une application web J2EE à l'aide de Spring et je ne sait pas où placer ma connection à la base de données.
    Pour le moment je fais la connection à chaque fois qu'un utilisateur se connecte, mais cela ne sert à rien de le faire pour chaque utilisateur. Je voudrais n'avoir à le faire qu'une seule fois : au lancement de l'application.

    Où placer alors ce genre de traitement ? Spring doit certainement offrir ce genre de possibilités mais je ne vois pas comment procéder.

  2. #2
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Pourquoi n'utilises-tu pas le IoC Container de Spring pour initialiser un datasource que tu injectes ensuite dans tes DAO ?

    Tu trouveras toute la documentation nécessaire ici : http://static.springframework.org/sp...ence/jdbc.html.
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Heu, je ne vois aps ce qu'il y a d'anormal à se connecter à la base souvent.
    La plupart du temps, on fait même une connexion par requête !

    Peut-être que tu veux parler de pool de connexion en fait ? En ce cas désolé, je ne sais pas comment on les gère en Spring.

    Comment gères-tu, pour l'instant, tes connexions BDD ? Peux-tu poster du code explicatif, comme celui de ton fichier de config Spring ?

    EDIT : cf. le post de aJavaDevelopper pour avoir une vraie info utile

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Je ne vais pas rentrer dans les détails pour expliquer pourquoi je veux faire ma connection une seule fois ce serait un peu long et c'était un exemple, j'aimerais savoir comment faire un traitement en général, au lancement de l'application.

    Ensuite après avoir lu la réponse de aJavaDeveloper je me rend compte qu'il y a plusieurs choses que je ne suis pas sûre de comprendre.

    Quelle est la différence entre déclarer un bean dans le fichier xxx-servlet.xml ou applicationContext.xml ?
    Un bean est par défaut un singleton et je dois déclarer explicitement que je ne veux pas que ce soit le cas c'est bien ça ?
    Quel est le cycle de vie des beans ? Un bean singleton sera-t-il créer pour toute la durée de vie de l'application ?

    Bon ça fait beaucoup de questions d'un coup mais je commence à m'embrouiller là...

  5. #5
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Quelle est la différence entre déclarer un bean dans le fichier xxx-servlet.xml ou applicationContext.xml ?
    Le fichier xxx-servlet.xml contient la déclaration de tes Controller, de tes Intercepter, de tes mappings URL, ...
    En fait, tous ces éléments font partie de Spring MVC.
    Ils sont propres à une application web (d'où le suffixe du nom du fichier : -servlet).

    Le fichier applicationContext.xml contient la déclaration des objets que tu souhaites voir créés au lancement de ton application.

    Un bean est par défaut un singleton et je dois déclarer explicitement que je ne veux pas que ce soit le cas c'est bien ça ?
    Effectivement, les beans que tu déclares dans le fichier applicationContext.xml seront placés, par défaut, dans le contexte de l'application (d'où le nom du fichier).
    Autrement dit, une même instance de chacun de ces beans sera partagée par tous les utilisateurs.
    Si ce comportement ne te convient pas, tu peux spécifier un autre scope pour tes beans (session ou request, par exemple).

    Quel est le cycle de vie des beans ?
    Un bean singleton sera-t-il créer pour toute la durée de vie de l'application ?
    Oui.
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  6. #6
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Pour plus d'infos sur le singleton, voir ici.
    Modératrice Java - Struts, Servlets/JSP, ...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Merci pour ces explications et le lien.

    Mais quand aJavaDeveloper dit :
    les beans que tu déclares dans le fichier applicationContext.xml seront placés, par défaut, dans le contexte de l'application
    Est-ce que ça signifie que un bean déclaré dans le fichier xxx-servlet.xml ne sera pas placé par défaut dans le contexte de l'application ? Que le comportement par défaut d'un bean ne sera pas le même suivant le fichier xml dans lequel il est déclaré ?

  8. #8
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Est-ce que ça signifie que un bean déclaré dans le fichier xxx-servlet.xml ne sera pas placé par défaut dans le contexte de l'application ?
    Que le comportement par défaut d'un bean ne sera pas le même suivant le fichier xml dans lequel il est déclaré ?
    Le fichier xxx-servlet.xml contient principalement la déclaration de tes servlets (~ Controller).
    Chacune de ces servlets sera instanciée lors du déploiement de ton application.
    Toutefois, les servlets ne sont pas placées dans le contexte de l'application.
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Dans quel contexte alors ?

  10. #10
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par Ouguiya
    Dans quel contexte alors ?
    Les servlets ne sont pas placées dans un contexte particulier.
    Elles sont gérées par ton conteneur de JSP/servlets (Tomcat, par exemple) ou par ton serveur d'applications (WebLogic, par exemple).
    Les différents contextes (application, session, request, ...) te permettent de stocker des beans de façon à pouvoir les réutiliser ailleurs ou plus tard.

    Par exemple, tu peux utiliser le contexte request pour transférer un bean d'une servlet vers une page JSP (la durée de vie de ce bean sera celle d'une requête).
    Tu peux utiliser le contexte session pour stocker un bean contenant toutes les actions réalisées par un utilisateur (la durée de vie de ce bean sera celle de la session de l'utilisateur).
    Tu peux utiliser le contexte application pour stocker un bean contenant un historique des connexions à ton application (la durée de vie de ce bean sera celle de ton application).
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Ok donc pour en revenir à mon problème, pour faire un traitement au lancement de mon application il me suffit de déclarer un bean dans le fichier applicationContext.xml avec une méthode connection() par exemple et ce bean sera instancié une et une seule fois et pour toute la durée de vie de mon application.

    Mais même si mon objet est instancié au lancement de l'application, ma méthode connection() ne sera pas appelée pour autant. Comment l'éxécuter également au lancement de l'application ?

    Edit : je viens de tester en plaçant ma connexion dans le constructeur de mon bean : ça marche très bien. Mais si je veux garder ma méthode connection() et non pas passer par le constructeur, comment je peux faire ?

  12. #12
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Mais si je veux garder ma méthode connection() et non pas passer par le constructeur, comment je peux faire
    Le tag <bean> via lequel tu déclares tes beans dans le fichier applicationContext.xml possède un attribut init-method.
    Cet attribut représente la méthode appelée après l'instanciation du bean.
    Tu peux donc déclarer ton bean de la façon suivante :
    <bean id="..." class="..." init-method="connection"/>
    Note qu'il existe également un attribut destroy-method.
    Cet attribut représente la méthode appelée avant la destruction du bean.
    Pour être propre, tu pourrais donc faire quelque chose comme
    <bean id="..." class="..." init-method="connection" destroy-method="closeConnection"/>
    Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie.
    Confucius

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Ok parfait ! Merci bien.

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

Discussions similaires

  1. [Spring MVC] Récupérer des valeurs de formulaires sur n pages
    Par ran_hery dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2006, 07h23
  2. Réponses: 2
    Dernier message: 16/02/2006, 10h29
  3. [Spring MVC][Validator] Ne stop pas si il y a une erreurs
    Par Hikage dans le forum Spring Web
    Réponses: 3
    Dernier message: 15/02/2006, 09h43
  4. [Débat] Spring MVC versus Struts
    Par alheim dans le forum Frameworks Web
    Réponses: 6
    Dernier message: 19/12/2005, 10h13
  5. [Spring MVC] Formulaire dynamique
    Par partyboy dans le forum Spring Web
    Réponses: 7
    Dernier message: 17/10/2005, 10h52

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