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 :

JPA 2 (implém. Hibernate) : bean entité invisible


Sujet :

JPA Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut JPA 2 (implém. Hibernate) : bean entité invisible
    Bonjour à tous.

    J'ai JBoss 6.4,
    OpenJDK 1.7 et des poussières,
    une base HSQLDB qui tourne bien,
    et un DataSource correctement configuré dans JBoss, et dans mon fichier persistence.xml qui se trouve sous META-INF.

    Jusqu'ici tout va à merveille.

    J'ai créé une classe Budy, déclarée avec @Entity et @Table(name="budies").
    Elle a un constructeur vide, des getters, des setters,
    tout ce qu'il faut, et pourtant JBoss prétend que mon bean entité n'existe pas :

    13:18:32,662 ERROR [stderr] (http-localhost/127.0.0.1:8080-1) java.lang.IllegalArgumentException: Unknown entity: org.gfarny.ejb3.EntityBudy

    En principe, nous sommes dans JPA 2, les fichiers de mapping d'hibernate ne sont pas obligatoires et les annotations suffisent...

    à tout hasard, voici ici ma classe et persitence.xml, si quelque chose vous semble anormal, merci de me le préciser :

    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
    package org.gfarny.ejb3;
     
    // (imports)
     
    @Entity
    @Table(name="budies")
    public class EntityBudy {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="id", nullable=false)
    	private int id;
     
    	@Column(name="first", length=30, nullable=false)
    	private String first;
     
    	@Column(name="family", length=30, nullable=false)
    	private String family;
     
    	@Column(name="born")
    	@Temporal(TemporalType.DATE)
    	private Date born;
     
    	@OneToMany(mappedBy="entityBudy", cascade={CascadeType.REMOVE})
    	private Set<EntityBudyPhone> entityBudyPhoneSet = new HashSet<EntityBudyPhone>();
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
    	public String getFirst() {
    		return first;
    	}
     
    	public void setFirst (String f) {
    		this.first = f;
    	}
     
    	public String getFamily() {
    		return family;
    	}
     
    	public void setFamily(String f) {
    		this.family = f;
    	}
     
    	public Date getBorn() { return born; }
     
    	public void setBorn(Date dte) {
    		this.born = dte;
    	}
     
    	public EntityBudy() {}
     
    	public EntityBudy(String fst, String fam) {
    		setFirst(fst);
    		setFamily(fam);
    	}
     
    	public EntityBudy(String fst, String fam, Date dte) {
    		setFirst(fst);
    		setFamily(fam);
    		setBorn(dte);
    	}
     
    	public Set<EntityBudyPhone> getEntityBudyPhoneSet() {
    		return entityBudyPhoneSet;
    	}
     
    	// adding to Set is delegated to EntityBudyPhone.new()
    	public void addEntityBudyPhone(EntityPhone ep) {
    		new EntityBudyPhone(this, ep);
    	}
     
    	public boolean equals(EntityBudy b) {
    		if (this.first == b.getFirst())
    			if (this.family == b.getFamily())
    				if (this.born == b.getBorn())
    					return true;
    		return false;
    	}
    }
    persistence.xml

    Code xml : 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
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    	<persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
    		<!-- provider -->
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
    		<properties>
    			<!-- Classes persistantes -->
    			<property name="hibernate.archive.autodetection" value="class, hbm" />
     
    			<!-- logs SQL
    			<property name="hibernate.show_sql" value="true"/>
    			<property name="hibernate.format_sql" value="true"/>
    			<property name="use_sql_comments" value="true"/>
    			-->
     
    			<!-- connexion JDBC -->
    			<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbc.JDBCDriver" />
    			<!--  <property name="hibernate.connection.url" value="jdbc:hsqldb:file:/opt/data/lag;ifexists=true" /> -->
     
    			<!-- start HSQLDB Server (README.txt) -->
    			<property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost/lag;ifexists=true" />
    			<property name="hibernate.connection.username" value="LAG" />
    			<property name="hibernate.connection.password" value="LAG" />
    			<!-- création automatique du schéma -->
    			<!-- <property name="hibernate.hbm2ddl.auto" value="create" /> -->
     
    			<!-- Dialecte -->
    			<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
     
    			<!-- propriétés DataSource c3p0 -->
    			<property name="hibernate.c3p0.min_size" value="5" />
    			<property name="hibernate.c3p0.max_size" value="20" />
    			<property name="hibernate.c3p0.timeout" value="300" />
    			<property name="hibernate.c3p0.max_statements" value="50" />
    			<property name="hibernate.c3p0.idle_test_period" value="3000" />
    		</properties>
    	</persistence-unit>
    </persistence>

    D'ailleurs en passant, Hibernate n'utilise plus c3p0, mais c'est une autre question.

    Merci d'avance.

  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
    tu peux donner le log complet du jboss, le code qui tente de charger ton entité et ton web.xml? Avoir aussi les import dans ta classe entité aiderait

  3. #3
    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
    Hallo,
    il ne te manque pas ceci:
    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
      
      <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    	<persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
    		<!-- provider -->
    		<provider>org.hibernate.ejb.HibernatePersistence</provider>
                    <class>org.gfarny.ejb3.EntityBudy</class>
    		<properties>
    			<!-- Classes persistantes -->
    			<property name="hibernate.archive.autodetection" value="class, hbm" />
     
    			<!-- logs SQL
    			<property name="hibernate.show_sql" value="true"/>
    			<property name="hibernate.format_sql" value="true"/>
    			<property name="use_sql_comments" value="true"/>
    			-->
     
    			<!-- connexion JDBC -->
    			<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbc.JDBCDriver" />
    			<!--  <property name="hibernate.connection.url" value="jdbc:hsqldb:file:/opt/data/lag;ifexists=true" /> -->
     
    			<!-- start HSQLDB Server (README.txt) -->
    			<property name="hibernate.connection.url" value="jdbc:hsqldb:hsql://localhost/lag;ifexists=true" />
    			<property name="hibernate.connection.username" value="LAG" />
    			<property name="hibernate.connection.password" value="LAG" />
    			<!-- création automatique du schéma -->
    			<!-- <property name="hibernate.hbm2ddl.auto" value="create" /> -->
     
    			<!-- Dialecte -->
    			<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
     
    			<!-- propriétés DataSource c3p0 -->
    			<property name="hibernate.c3p0.min_size" value="5" />
    			<property name="hibernate.c3p0.max_size" value="20" />
    			<property name="hibernate.c3p0.timeout" value="300" />
    			<property name="hibernate.c3p0.max_statements" value="50" />
    			<property name="hibernate.c3p0.idle_test_period" value="3000" />
    		</properties>
    	</persistence-unit>
    </persistence>
    eric

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut résolu (en partie)
    tchize_,
    merci, effectivement il y a des "caused by..." plus loin dans les trace d'erreur...

    jeffray03,
    effectivement j'ai "forcé" <class>org.gfarny.ejb3.MaClasse</class>
    et ça a fait réagir JBoss...

    donc je suis "décoinçé" et reparti

    mais qqchose me dit que mon fichier persistence.xml n'est pas à jour par rapport à ma version de JPA / Hibernate :

    <property name="hibernate.archive.autodetection" value="class, hbm" />

    n'a l'air de pas bien marcher puisque Hibernate ne détecte pas mes classes annotées, il faut donc que je trouve la bonne doc, sans doute les specs du JCP si je n'ai pas le choix...

    D'autre part JBoss ne trouve pas le package c3p0, donc quel gestionnaire de connexions configurer et comment ? là encore il va falloir que je creuse...

    Merci à tous cependant.
    Si quelqu'un veut ajouter qqchose je laisse ce billet ouvert un jour ou deux.

  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 laglumie Voir le message
    il faut donc que je trouve la bonne doc, sans doute les specs du JCP si je n'ai pas le choix...
    Ou tu fournis ce qui t'a été demandé...

    Citation Envoyé par laglumie Voir le message
    D'autre part JBoss ne trouve pas le package c3p0, donc quel gestionnaire de connexions configurer et comment ?
    ben tu prends un datasource, c'est plus simple, comme ça jboss gère le pool tranquille.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ou tu fournis ce qui t'a été demandé...
    tchize_,
    Hibernate ne détecte pas que EntityBudy est une entité, si je ne "force" pas sa déclaration dans persistence.xml. Pourquoi ?

    Voici le trace plus loin :

    17:12:29,728 ERROR [stderr] (http-/127.0.0.1:8080-2) java.lang.IllegalArgumentException: Unknown entity: org.gfarny.ejb3.EntityBudy
    17:12:29,729 ERROR [stderr] (http-/127.0.0.1:8080-2) at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:878)
    17:12:29,729 ERROR [stderr] (http-/127.0.0.1:8080-2) at org.gfarny.ejb3.Tests.test1(Unknown Source)
    17:12:29,730 ERROR [stderr] (http-/127.0.0.1:8080-2) at org.apache.jsp.target_jsp._jspService(target_jsp.java:103)
    17:12:29,730 ERROR [stderr] (http-/127.0.0.1:8080-2) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:69)
    17:12:29,730 ERROR [stderr] (http-/127.0.0.1:8080-2) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    ...

    la tête de l'appel à persist() qui déclenche l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ...
    	EntityBudy b1 = new EntityBudy(
    				"Martin", "Paul", new SimpleDateFormat("dd/MM/yy").parse("31/01/2000"));
    
    	EntityBudy b2 = new EntityBudy(
    			"Jacqueline", "Duchemin", new SimpleDateFormat("dd/MM/yy").parse("12/02/1980"));
    
    	em.persist(b1);     // <= l'erreur est déclenchée ici
    	
    	...
    il faut que je trouve le xsd de persistence.xml , qui est défini par JPA normalement, ceci dit les propriétés que réclame Hibernate pour fonctionner correctement doivent être dans la doc Hibernate...

    la ligne en faute dans persistence.xml doit être la suivante :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <property name="hibernate.archive.autodetection" value="class, hbm" />

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut Formation JBoss ?
    Je fouille les exemples de codes exemples distribués avec JBoss, la version 6.4 utilise Hibernate 4 par défaut...
    Tout ça me confirme que je vais devoir fouiller les doc JBoss et Hibernate, impossible d'y couper ! c'est juste quelques centaines de pages en anglais

    Voir peut-être WildFly 8 tout de suite tant qu'à me former...

    billet clos !

  8. #8
    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 laglumie Voir le message
    tchize_,
    Hibernate ne détecte pas que EntityBudy est une entité, si je ne "force" pas sa déclaration dans persistence.xml. Pourquoi ?
    C'est censé être le comportement par défaut. C'est pour ca que j'aurais aimé le log complet de jboss, le web.xml, le code de test1(je suppose que c'est un session bean ). Ça permet d'analyser le comportement de jboss. Normalement tu n'a pas a mettre des propriétés hibernate dans ton persistance car tu es censé être indépendant de l'implémentation jpa.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 18
    Par défaut Ah bon ?
    Bon j'ai un petit peu avancé : effectivement j'utilisais un persistence.xml issu de JPA 1.
    J'ai remplacé la déclaration de schemas dans l'en-tête xml par celui de la version 2.

    En revanche le schemas de fichier de mapping JPA 2 ne défini pas de balises <class/>...

    Je devine donc que c'est défini par Hibernate, et je creuserai donc dans la doc Hibernate.

    Mon problème s'est un peu déplacé, je vais ouvrir une seconde discussion.

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

Discussions similaires

  1. Mise à jour d'un bean entité en cascade
    Par loopx dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 16/02/2008, 19h14
  2. [ManyToMany] problème de bean entité détaché
    Par loopx dans le forum Hibernate
    Réponses: 5
    Dernier message: 17/01/2008, 00h48
  3. Réponses: 4
    Dernier message: 15/02/2007, 10h06
  4. Count sur une propriété d'un bean entité
    Par dmetzler dans le forum JSF
    Réponses: 11
    Dernier message: 14/02/2007, 21h35
  5. [Debutant] Bean entité BMP - problème JNDI
    Par Tanahjampea dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 17/01/2006, 09h00

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