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 :

SessionFactory non injectée


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 1
    Par défaut SessionFactory non injectée
    Bonjour,

    Je vous expose mon soucis... Je débute sur Spring/Hibernate et je n'arrive pas à injecter une sessionFactory dans mon DAO afin de pouvoir effectuer des requêtes en base par la suite.

    Mon DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    @Repository
    public class UtilisateurDAO implements IUtilisateurDAO{
     
        @Autowired @Qualifier("sessionFactory")
        private SessionFactory sessionFactory;
     
        public UtilisateurDAO() {
     
        }
     
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
     
        @Override    
        public void creerUtilisateur(Utilisateur utilisateur) {
            this.sessionFactory.getCurrentSession().save(utilisateur);
        }
    }
    Mon fichier de context :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://localhost:3306/maBase" />
            <property name="username" value="root" />
            <property name="password" value="" />
            <property name="validationQuery" value="select 1" />
        </bean>
     
        <bean id="mySessionFactory"
            class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    <prop key="hibernate.connection.release_mode">auto</prop>
                    <prop key="hibernate.bytecode.provider">javassist</prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.cache.use_second_level_cache">false</prop>
                </props>
            </property>
     
        </bean>
     
        <bean id="utilisateurDAO" class="com.projet.UtilisateurDAO">
            <property name="sessionFactory" ref="mySessionFactory" />
        </bean>
    En mode debug, je m’aperçois que lors de la requête, 'sessionFactory' est null.

    Quelqu'un peut m'aiguiller ?

    Merci beaucoup !

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Vos obtenez bien l'instance de votre DAO par spring et non pas via un new?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut
    Merci pour cette rapide réponse !

    En effet, nous devons toucher du doigt le problême...

    VOici comment je test à travers mon main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UtilisateurDAO utilisateurDAO = new UtilisateurDAO();
    utilisateurDAO.creerUtilisateur(new Utilisateur("test_utilisateur"));
    Comment puis-je tester sans instancier mon DAO avec un new ?

    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UtilisateurDAO utilisateurDAO = applicationContext.getBean(UtilisateurDAO.class);

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Par défaut
    Hum, c'est ok

    Merci beaucoup !


    J'ai maintenant un probleme de transaction non autorisée...
    org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
    J'ai pourtant mis l'annotation @Transactional sur ma class DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @Repository
    @Transactional 
    public class UtilisateurDAO implements IUtilisateurDAO{
    J'ai vu plusieurs contradictions sur internet... Certains disent qu'il faut utiliser seulement l'annotation, d'autre qu'il faut préciser dans le context un bean de transaction... D'autre qu'il faut étendre la DAO d'une classe d'hibernate...

    Je suis un peu perdu avec tout cela...

Discussions similaires

  1. [2.x] Injecter un service dans un non-service
    Par rolintoucour dans le forum Symfony
    Réponses: 1
    Dernier message: 27/04/2015, 09h25
  2. Réponses: 6
    Dernier message: 22/10/2009, 17h08
  3. [Framework] Initialisation à l'utilisation et non à l'injection
    Par Baptiste Wicht dans le forum Spring
    Réponses: 9
    Dernier message: 12/08/2009, 18h52
  4. [Framework] Injecter des objets non gérés par Spring
    Par elix63 dans le forum Spring
    Réponses: 1
    Dernier message: 21/07/2009, 12h51
  5. Réponses: 6
    Dernier message: 21/06/2002, 14h48

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