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

JPA Java Discussion :

[EJB+JPA+CDI]EntityManager ne s'injecte pas


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut [EJB+JPA+CDI]EntityManager ne s'injecte pas
    Bonjour à tous,

    j'ai un petit soucis avec un module DAO...
    J'ai un module EJB, prévu pour être déployé sur un EAP6, qui refuse d'injecter son entity manager, sans que je comprenne pourquoi...

    Le persistence.xml me semble être complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1"
    	xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    	<persistence-unit name="test">
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
    		<jta-data-source>jdbc/arquillian</jta-data-source>
    		<class>org.javacrea.gestioncontacts.pu.Contact</class>
    		<properties>
    			<property name="hibernate.hbm2ddl.auto" value="create-drop" />
    			<property name="hibernate.show_sql" value="true" />
    		</properties>
    	</persistence-unit>
    </persistence>
    La classe de test qui vérifie la PU :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    @RunWith(Arquillian.class)
    public class TestPU {
     
    	@Deployment
    	public static JavaArchive createDeployment() {
    		return ShrinkWrap
    				.create(JavaArchive.class)
    				.addPackage(Contact.class.getPackage())
    				.addAsResource(EmptyAsset.INSTANCE, "beans.xml")
    				.addAsResource("test-persistence.xml",
    						"META-INF/persistence.xml")
    				.addAsResource("test-ds.xml");
    	}
     
    	private static Map<String, String> datas = new HashMap<String, String>();
     
    	@PersistenceContext
    	EntityManager em;
     
    	@Inject
    	UserTransaction utx;
     
    	@Before
    	public void preparePersistenceTest() throws Exception {
    		if(em==null){
    			System.out.println("Entity Manager non injecté!");
    		}
    		datas.put("François", "Delalleau");
    		datas.put("Yann", "Leroy");
    		clearData();
    		insertData();
    		startTransaction();
    	}
     
    	public void clearData() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    		System.out.println("Dumping old records...");
    		em.createQuery("delete from Game").executeUpdate();
    		utx.commit();
    	}
     
    	public void insertData() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    		System.out.println("Inserting records...");
    		for (String prenom : datas.keySet()) {
    			Contact contact = new Contact("Monsieur", prenom, datas.get(prenom));
    			em.persist(contact);
    		}
    		utx.commit();
    		// clear the persistence context (first-level cache)
    		em.clear();
    	}
     
    	public void startTransaction() throws Exception {
    		utx.begin();
    		em.joinTransaction();
    	}
     
    	@SuppressWarnings("unchecked")
    	@Test
    	public void retrouverLesDeux(){
    		String query = "Select c from Contact c order by c.id";
    		List<Contact> result = em.createQuery(query).getResultList();
    		assertContainsLesDeux(result);
    	}
     
     
     
    	public void assertContainsLesDeux(List<Contact> result) {
    		Assert.assertEquals(datas.size(), result);
    		Map<String, String> resultContent = new HashMap<String, String>();
    		for(Contact contact : result){
    		resultContent.put(contact.getPrenom(), contact.getNom());
    		}
    		Assert.assertEquals(resultContent, datas);
    	}
     
    	@After
    	public void commitTransaction() throws Exception {
    	    utx.commit();
    	}
     
    }
    Ma console m'indique bien que l'EntityManager n'est pas injecté, et j'ai un nullpointer dès que j'appel l'une de ses méthode... J'ai essayé d'injecter d'autre choses, notamment l'EJB de DAO lui-même. Il s'injecte, mais j'ai aussi un nullpointeur dès que j'appel une méthode...

    Si quelqu'un a une idée...

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bonjour

    As tu essayer de lui indiqué le nom de la PU a injecter ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	@PersistenceContext(unitName = "test")
    	private EntityManager em;
    Si cela ne change rien, alors le fichier persistance.xml se trouve t'il bien dans le repertoire src/META-INF ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    Oui, j'ai essayé avec "name=test".
    Pour le fichier de persistence, l'emplacement de test-persistence.xml, que j'ai posté et qui ne sert qu'au test, est précisé dans le pom. META-INF/persistence.xml est son emplacement dans l'archive de test Arquillian.

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    Citation Envoyé par Cafeinoman Voir le message
    Oui, j'ai essayé avec "name=test".
    le problème vient peut être de la !
    Regarde l'exemple que j'ai donné dans mon post précédent c'est pas "name" mais "unitName" qu'il faut renseigner.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    j'ai répondu trop vite, mais non, l'erreur n'est pas là... N'ayant qu'une seul persistenceUnit associé, il n'y a d'ailleurs pas de raison qu'il ne la trouve pas...

  6. #6
    Membre Expert Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Par défaut
    salut,
    as-tu essayé de mettre dans ton fichier de persistence.xml ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <persistence-unit name="test" transaction-type='JTA'>
    Eric

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/09/2009, 22h41
  2. JBoss + EJB + JPA
    Par ghnawfal dans le forum Wildfly/JBoss
    Réponses: 18
    Dernier message: 08/08/2008, 12h46
  3. Réponses: 4
    Dernier message: 02/08/2008, 18h56
  4. [EJB3] Injection @EJB dans le Client Web ne fonctionne pas
    Par warwink dans le forum Java EE
    Réponses: 9
    Dernier message: 04/12/2007, 00h28
  5. [JPA / Hibernate] Cascade qui ne cascade pas !
    Par dazz_x dans le forum Persistance des données
    Réponses: 1
    Dernier message: 11/09/2007, 13h35

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