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 :

Implémenter un DAO JDBC


Sujet :

Spring Java

  1. #1
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut Implémenter un DAO JDBC
    Bonjour à tous ,

    Je suis débutant en ce qui concerne spring et je ne vois pas très bien comment impémenter un DAO JDBC en utilisant spring :
    Est-ce une bonne idée de faire (concernant les annotations):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Scope("singleton")
    @Repository
    public class MonDAO {
     
        private JdbcTemplate jdbcTemplate;
     
        public void setDataSource(DataSource dataSource) {
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
     
        //implémentation des différentes méthodes d'acces à la base...
    Faut-il rendre toutes les méthodes synchronized ?
    Puis-je appeler mon Dao depuis des EJB 3 session stateless ? si oui, comment y injecter mon DAO ?

    Merci par avance pour votre aide

    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Bonjour
    il est existe 3 maniérés différentes pour injecter ou utiliser JdbcTemplate avec spring
    en fait j'ai une petite remarque a vous faire c'est que il vaut mieux développez vos DAO en interfaces qui permet de diminuer le couplage.

    pour l'utilisation de JdbcTemplate vous pouvez procéder ainsi

    1-injection de dépendance : private JdbcTemplate et un setter

    2-etendre ton service ( implementation ) de JdbcDAOSupport dans lequel la methode getJdbcTemplate renvoie directement un JDBCTemplate instancié

    3- qui est pour moi la plus flexible de toutes les methodes et moins dépendante à spring :

    injecter un SessionFactory dans ton implemtation
    et dans le cas d'insertion : trés simple
    SessionFactory.getCurrentSession().saveOrUpdate(Bean)
    fera l'affaire
    voili voilou
    a bientot

  3. #3
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut

    Citation Envoyé par afrikha Voir le message
    Est-ce une bonne idée de faire (concernant les annotations):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    @Scope("singleton")
    @Repository
    public class MonDAO {
     
        private JdbcTemplate jdbcTemplate;
     
        public void setDataSource(DataSource dataSource) {
            this.jdbcTemplate = new JdbcTemplate(dataSource);
        }
     
        //implémentation des différentes méthodes d'acces à la base...
    Il te manque la déclaration d'une dépendance envers le Datasource.
    Il suffit d'ajouter @Resource ou @Autowired à son setter.

    Citation Envoyé par afrikha Voir le message
    Faut-il rendre toutes les méthodes synchronized ?
    Surtout pas : faire ça avec un singleton va créer un goulot d'étranglement dans une application JEE (ou multi-thread en général).

    JdbcTemplacte est Thread-Safe, de même pour le RowMapper pour ce qui est de la côté de Sprting, tu n'as rien à craindre.
    Par contre, dans ton code, faut pas relier sur les champs par exemple pour rester Thread-Safe.


    Sinon, j'en parle un peu de ça dans mon blog:
    http://blog.developpez.com/djo-mos?t...vec_spring_2_5

  4. #4
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Merci beaucoup à vous deux pour vos réponses

    En fait, je veux juste utiliser spring JDBC et plus précisément SimpleJdbcTemplate et SimpleJdbcInsert dans mon application qui est une application Java EE 5.

    Mon DAO est donc un stateless session bean qui a à peu près cette tête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Stateless
    public class MonDao {
     
        private SimpleJdbcTemplate simpleJdbcTemplate;
        private SimpleJdbcInsert simpleJdbcInsert;
     
        @Resource(name = "maDataSource")    
        public void setDataSource(DataSource dataSource){
           // création et initialisation de simpleJdbcTemplate et simpleJdbcInsert.
        }
    Ici, l'annotation @Resource est une annotation Java EE 5 et non pas Spring !

    Je me pose donc la question de savoir si c'est dangereux ou pas de mélanger spring et EJB 3 de cette façon ?

    Merci

    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2005
    Messages : 489
    Points : 171
    Points
    171
    Par défaut
    Bonjour,

    Désolé de rouvrir ce sujet, mais je me retrouve dans ce cas de figure.

    J'ai développé des web services qui utilise spring et BoneCp et nous rencontrons vite des problèmes de saturation de connections au niveau de la base postgresql.

    Nous évoquions l'idée d'utiliser un singelton pour le jdbctemplate quand je suis tombé sur votre post.

    Quelle solution avez-vous adopté au final ? car certains de mes web services appellent plusieurs DAO, et chacun d'entrex eux instancient un jdbcTemplate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private JdbcTemplate jdbcTemplate;
     
    	public void setDataSource(DataSource dataSource) {
    	    this.jdbcTemplate = new JdbcTemplate(dataSource);
    	}
    	/**
             * @return the jdbcTemplate
             */
    	public JdbcTemplate getJdbcTemplate() {
    	    return jdbcTemplate;
    	}
    Merci de votre aide.

    Vincent

Discussions similaires

  1. Implémenter pattern DAO
    Par merlin1977 dans le forum Général Java
    Réponses: 4
    Dernier message: 29/01/2014, 10h30
  2. [Data] [Spring Dao][JDBC] SimpleJdbcTemplate, RowMapper et collections
    Par Invité dans le forum Spring
    Réponses: 2
    Dernier message: 22/05/2008, 17h07
  3. [Data] Problème spring DAO JDBC
    Par Ethylene dans le forum Spring
    Réponses: 1
    Dernier message: 07/03/2008, 20h34
  4. [EJB3] implémenter EJB3 et DAO
    Par toomsounet dans le forum Java EE
    Réponses: 4
    Dernier message: 14/05/2007, 09h30
  5. Réponses: 1
    Dernier message: 01/12/2006, 21h15

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