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 :

problème EntityManager NullpointerException


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Par défaut problème EntityManager NullpointerException
    Bonjour,
    Je travaille sur un projet Spring utilisant JPA, Lors de l'appel à une méthode de ma couche DAO, J'ai un NullPointerException sur l'entityManager alors que j'ai l'impression d'voir bien fait les injection de dépendance. Quelqu'un voit -il la faille? Merci.

    Mon applicationContext.xml
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    	                   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    	                   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
     
       <context:annotation-config></context:annotation-config>
       <context:component-scan base-package="com" />
     
     
       <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    		<property name="url" value="jdbc:mysql://localhost:3306/ma_bdd"></property>
    		<property name="username" value="root"></property>
    		<property name="password" value=""></property>
    	</bean>
     
    	<bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    		<property name="defaultDataSource" ref="datasource"></property>	
    		<property name="persistenceXmlLocations">
    		<list>
    			<value>classpath*:persistence.xml</value>		
    		</list>
    		</property>
    	</bean>
     
    	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="persistenceUnitManager" ref="persistenceUnitManager"></property>
    		<property name="persistenceUnitName" value="UP_P"></property>
    	</bean>
     
    	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory" ref="entityManagerFactory"></property>
    	</bean>
     
    	<tx:annotation-driven />
     
    </beans>
    L'implementation de 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    @Transactional
    @Repository
    public class SignUpDAOImpl implements ISignUpDAO {
     
        @PersistenceContext( name = "UP_P" )
        private EntityManager em;
     
        public void setEntityManager( EntityManager entityManager ) {
            this.em = entityManager;
        }
     
        @Override
        @Transactional
        public void register( User user ) {
            em.persist( user );
     
        }
     
        @Override
        public boolean connect( Long id_user ) {
     
            User u = em.find( User.class, id_user );
            if ( u != null ) {
                return true;
            } else {
                return false;
            }
     
        }
     
        @Override
        public void delete( Long id_user ) {
     
            User u = em.find( User.class, id_user );
            em.remove( u );
     
        }
     
        @Override
        public User update( User user ) {
     
            em.merge( user );
            return user;
        }
     
    }
    Ma class Test
    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
     
    public class Test {
     
     
        public static void main( String[] args ) {
     
     
            ApplicationContext context = new ClassPathXmlApplicationContext(
                    "applicationContext.xml" );
     
     
            ISignUpDAO d = new SignUpDAOImpl();
            User u =new User( "bertrand", "thomas", "berth", "bertra@g.com", "blabla" );
            d.register( u );
     
        }
     
    }
    Dans la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Exception in thread "main" java.lang.NullPointerException
    	at sap.ldee.dao.SignUpDAOImpl.register(SignUpDAOImpl.java:26)
    	at sap.ldee.test.Test.main(Test.java:60)

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 352
    Par défaut
    Salut.
    Où est ton fichier de configuration JPA?

  3. #3
    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
    1
    2
     
            ISignUpDAO d = new SignUpDAOImpl();
    Si tu fais ça, Spring ne risque pas d'injecter grand chose dans ton instance. Commence déjà par faire ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ISignUpDAO d = context.getBean(ISignUpDAO.class);

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 145
    Par défaut
    Merci ça a résolu le problème. pourquoi un simple new ne suffit pas?
    Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ISignUpDAO d = context.getBean( ISignUpDAO.class );
    Si j'avais eu deux implémentations de ISignUpDAO, comment le conteneur aurait su laquelle choisir?

  5. #5
    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
    Citation Envoyé par batanga09 Voir le message
    Merci ça a résolu le problème. pourquoi un simple new ne suffit pas?
    Parce que quand tu fais un new tu ne passe pas par Spring. Spring crée l'instance et l'initialise avec les points d'injection de la configuration
    Citation Envoyé par batanga09 Voir le message

    Si j'avais eu deux implémentations de ISignUpDAO, comment le conteneur aurait su laquelle choisir?
    Il ne saurait pas laquelle choisir si tu as configuré deux implémentation dans ta configuration et renverrait un erreur. Dans ce cas il faut passer par les méthode demandant un nom / alias pour préciser l'implémentation voulue.

    Note que en général, on laisse spring se débrouiller, devoir faire appel à context.getBean est considéré déjà comme une situation exceptionelle.

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

Discussions similaires

  1. Problème de nullpointerexception
    Par pyrro dans le forum Android
    Réponses: 18
    Dernier message: 08/06/2010, 18h22
  2. [EJB3 Entity] EntityManager & NullPointerException
    Par grediN- dans le forum Java EE
    Réponses: 9
    Dernier message: 29/01/2010, 16h29
  3. Réponses: 0
    Dernier message: 18/02/2009, 10h32
  4. Problème de NullPointerException
    Par Arkot dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2008, 20h09
  5. Réponses: 3
    Dernier message: 10/06/2008, 18h58

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