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

JPA Java Discussion :

Probleme injection entityManager


Sujet :

JPA Java

  1. #1
    Membre confirmé
    Probleme injection entityManager
    salut tout le monde,
    Je me met a JPA et je rencontre un probleme :

    Je travaille avec une architecture spring + jpa sur une webb app, avec un serveur tomcat 6.
    J'ai simplifié les classes pour plus de lisibilité.
    Mon problème est que dans mon dao mon entityManager est toujours null maigres l injection (qui ne marche pas donc) via spring.

    Mon Dao :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Transactional
    public class voitureDAO {
        @PersistenceContext(unitName = "car")
        EntityManager em;
     
    public void addCar() {
            Car carWash = new Car("4L");
            em.persist(warWash);
        }
    }


    Mon fichier persistence.xml (Qui est bel et bien lu):
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns<img src="images/smilies/icon_mad.gif" border="0" alt="" title=":x" class="inlineimg" />si="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
          http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
      version="1.0">
     
        <persistence-unit name="car" transaction-type="RESOURCE_LOCAL">
        <class>package.voitureDAO</class>
        </persistence-unit>
     
    </persistence>


    Et enfin ma déclaration du entityManagerFactory dans mon appContext.xml :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <bean id="entityManagerFactory"
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="persistenceUnitName" value="car" />
    		<property name="dataSource" ref="dataSource" />
    		<property name="jpaVendorAdapter" ref="vendorAdapter" />
    		<property name="loadTimeWeaver">
    			<bean
    				class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver">
    			</bean>
    		</property>
    	</bean>


    Mon entityManager dans mon dao reste toujours null... Des idées ?

  2. #2
    Membre actif
    dans ton entity managerfactory ajouter sa:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <property name="persistenceXmlLocation">
    			<value>classpath:ici chemin de votre fichier persistence.xml</value>
    		</property>

  3. #3
    Membre confirmé
    je vais le faire,pour tester, mais ce n'est pas le problème puisque mon fichier persistence.xml est bien lu.

  4. #4
    Expert éminent
    Bonjour,
    Tu n'as pas déclaré ton DAO en tant que SpringBean, il ne béénficie donc pas de DI.
    Ajoutes @Repository à ton DAO (avant ou après @Transactional)

    Mais sinon, as tu activé les annotations de Spring ? et le scan des beans ?

  5. #5
    Membre confirmé
    Ok, je l'ai ajouté, ça ne règle pas le problème. Toujours em qui n'est pas injecté.

  6. #6
    Membre confirmé
    Au temps pour moi, c'est good ^^ Merci a vous.

  7. #7
    Expert éminent
    Citation Envoyé par JoloKossovar Voir le message
    Au temps pour moi, c'est good ^^ Merci a vous.
    Ce serait sympa si tu pouvais montrer l'origine de l'erreur et ce que tu as fait pour corriger celà Comme ça, cette discussion pourrait servir à d'autres personnes.

  8. #8
    Membre confirmé
    Oui,
    mais la cause etait tellement idiote et spécifique a mon appli ... que ce n'est pas la peine ^^ Tout marche tres bien comme j'ai posté au début. Pas besoin du @repositery sur la classe DAO d'ailleurs, sauf si on utilise :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />


    j'ajoute aussi que le component-scan est inutile dans la plupart des cas.
    ++