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

Persistance des données Java Discussion :

Persistence.xml introuvable JPA / H2 / GlassFish 4


Sujet :

Persistance des données Java

  1. #1
    Membre du Club Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Points : 57
    Points
    57
    Par défaut Persistence.xml introuvable JPA / H2 / GlassFish 4
    Bonjour,

    je me forme à JPA et essaie, sur la base d'un cas simple, de faire quelques INSERT et SELECT dans une database H2 avec GlassFish 4 comme serveur d'application.

    Dans Eclipse, j'ai commencé par créer un Simple JPA Project.
    J'ai ajouté quelques classes, défini les cardinalités / relations (je ne sais pas si tout est bon).
    Enfin j'ai construit un PERSISTENCE.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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence 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"
             version="2.1">
    	<persistence-unit name="CITIZEN2P0" transaction-type="RESOURCE_LOCAL">
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
    	    <class>com.citizen.entities.User</class>
    	    <class>com.citizen.entities.Groupe</class>
    	    <class>com.citizen.entities.Organisation</class>
    	    <class>com.citizen.entities.Message</class>
    	    <class>com.citizen.entities.RoleUserInGroup</class>
    	    <class>com.citizen.entities.Courrier</class>
    	    <properties>
    	        <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
    	        <property name="javax.persistence.jdbc.url" value="jdbc:h2:~/test"/>
    	        <property name="javax.persistence.jdbc.user" value="sa"/>
    	        <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    	    </properties>
    	</persistence-unit>
    </persistence>
    J'ai une classe "Run" qui fait appel à une Entity Manager Factory :

    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
     
    package com.citizen.run;
     
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.EntityTransaction;
    import javax.persistence.Persistence;
     
    import com.citizen.entities.User;
     
    public class Test {
     
    	  public static void main(String[]argv) {    
    		    EntityManagerFactory emf = Persistence.createEntityManagerFactory("Citizen2p0");    
    		    EntityManager em = emf.createEntityManager();    
    		    EntityTransaction transac = em.getTransaction();
    		    transac.begin();
    		    User user = new User();
    		    user.setNomUser("nom4");
    		    user.setPrenomUser("prenom4");
    		    em.persist(user);
    		    transac.commit();
     
    		    em.close();    
    		    emf.close();  
    		  }    
     
    }
    Lors de l'exécution j'obtiens toujours cette erreur :

    Exception in thread "main" javax.persistence.PersistenceException: Invalid persistence.xml.
    Error parsing XML (line-1 : column -1): cvc-elt.1 : Déclaration de l'élément 'persistence' introuvable.
    Cela fait quelques jours que je tourne en rond et je ne comprends pas où cela ne va pas.
    J'ai refait l'installation de GlassFish mais ne sais pas s'il est nécessaire de créer un Pool de Ressources pour H2 ou si mon Persistence.xml est suffisant.

    Je suis preneur de toute piste.

    Merci d'avance.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour,

    Peux tu éssayer plutot ceci dans l'entête de ton fichier de persistence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

  3. #3
    Membre du Club Avatar de Lovegiver
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2015
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2015
    Messages : 81
    Points : 57
    Points
    57
    Par défaut
    Bonsoir DevServlet,

    merci beaucoup pour ton conseil. Entre mon message initial et maintenant, il s'est passé beaucoup de temps au cours duquel j'ai apporté beaucoup de modifs au code, dont celui que tu indiques à juste titre.
    Mon problème est en partie résolue, mais il reste un détail que je vais expliciter.

    En premier lieu, comment ai-je résolu le problème ?
    Il se trouve que j'utilisais dans ma classe DAO une annotation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @PersistenceContext(name="MyPU")
    EntityManager em;
    Je pensais, comme je l'avais souvent lu, que celle-ci me permettrait de récupérer la persistence unit (PU) et de créer mon EntityManager dans la foulée. Or, j'ai appris que cette annotation ne fonctionnait que lorsque l'on travaillait dans un véritable contexte de serveur d'application et non en standalone. Du coup, j'ai contourné le problème de façon "classique" je dirais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EntityManager em = Persistence.createEntityManagerFactory("MyPU").createEntityManager();
    A présent mon code lit et écrit dans la base, et c'est bien.

    Mais il reste un détail à régler que ma jeunesse dans le métier explique :

    Chaque fois que je vais faire appel à cette classe DAO, je vais re-créer un EntityManager. Or cette classe est déclenchée par une classe "métier" qui peut faire appel à elle plusieurs fois au cours d'un même traitement (du moins c'est ce qui est prévu, là je débute ^^).
    Pour que ce soit vraiment parfait, cela implique, d'après la littérature, que je fasse de "l'injection de dépendance" mais je ne maîtrise pas encore à ce point les design patterns.
    Ce que j'en ai lu ne me parait pas excessivement compliqué, mais j'ai un doute quant à savoir à quel niveau cela doit se passer.

    Dois-je "injecter" cette dépendance seulement dans la classe "métier" ou encore avant, c'est à dire au moment où celle-ci est appelée depuis la classe de "run" ?
    Là c'est flou...

Discussions similaires

  1. JPA J2SE Persistence.xml
    Par Haziel Elijah dans le forum JPA
    Réponses: 2
    Dernier message: 14/12/2014, 23h14
  2. Questions sur persistence.xml -> intéropérabilité JPA
    Par Gugelhupf dans le forum Hibernate
    Réponses: 2
    Dernier message: 19/08/2014, 16h27
  3. Réponses: 6
    Dernier message: 13/07/2012, 22h02
  4. Réponses: 5
    Dernier message: 26/06/2012, 12h37
  5. Réponses: 7
    Dernier message: 07/01/2008, 15h56

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