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

Java EE Discussion :

Problème avec les annotations de type @OneToMany [EJB3 Entity]


Sujet :

Java EE

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Par défaut Problème avec les annotations de type @OneToMany
    Bonjour,

    Je n'arrive pas à utiliser un projet EJB (déployé dans JBoss) qui contient une annotation @OneToMany .


    Configuration : JBoss 4.0.5 ; eclipse Ganymede et mysql comme SGBD.

    Concernant les EJB Entity : j'ai créé 2 : "User" et "Privilege". Un Privilege posséde plusieurs User.

    Voici le code source de mes EJB Entity :


    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    package entities;
     
    import java.io.Serializable;
    import java.sql.Date;
    import java.util.Collection;
     
     
    import javax.persistence.*;
     
     
    @Entity
     
    public class User implements Serializable {
     
    	@Id
    	@Column(name = "UserID")
    	private int  UserID;
     
    	private String password;
    	private String login;
    	private String Name;
    	private String gender;
    	private String Phone;
    	private String Email;
    	private String Address;
    	private int isActive;
    	private Date lastLoginTime;
     
    	@ManyToOne(cascade=CascadeType.ALL)
    	@JoinColumn(name = "Privilege_idPrivilege")
    	private Privilege privilege;
     
    	public User() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
     
     
     
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public String getName() {
    		return Name;
    	}
    	public void setName(String name) {
    		Name = name;
    	}
    	public String getGender() {
    		return gender;
    	}
    	public void setGender(String gender) {
    		this.gender = gender;
    	}
    	public String getPhone() {
    		return Phone;
    	}
    	public void setPhone(String phone) {
    		Phone = phone;
    	}
    	public String getEmail() {
    		return Email;
    	}
    	public void setEmail(String email) {
    		Email = email;
    	}
    	public String getAddress() {
    		return Address;
    	}
    	public void setAddress(String address) {
    		Address = address;
    	}
    	public int getIsActive() {
    		return isActive;
    	}
    	public void setIsActive(int isActive) {
    		this.isActive = isActive;
    	}
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	public String getLogin() {
    		return login;
    	}
     
     
    	public int getUserID() {
    		return UserID;
    	}
     
     
    	public void setUserID(int userID) {
    		UserID = userID;
    	}
     
     
    	public void setLastLoginTime(Date lastLoginTime) {
    		this.lastLoginTime = lastLoginTime;
    	}
     
     
     
    	public Date getLastLoginTime() {
    		return lastLoginTime;
    	}
     
     
     
    	public Privilege getPrivilege() {
    		return privilege;
    	}
    	public void setPrivilege(Privilege privilege) {
    		this.privilege = privilege;
    	}
     
     
    }

    et
    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
    package entities;
     
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Collection;
     
    import javax.persistence.*;
     
     
     
     
     
    @Entity
     
    public class Privilege implements Serializable{
     
     
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	private int idPrivilege ;
     
    	private int Level ;
     
     
    	@OneToMany
    	private Collection<User> users = new ArrayList<User>();
     
    	public int getIdPrivilege() {
    		return idPrivilege;
    	}
    	public void setIdPrivilege(int idPrivilege) {
    		this.idPrivilege = idPrivilege;
    	}
    	public int getLevel() {
    		return Level;
    	}
    	public void setLevel(int level) {
    		Level = level;
    	}
     
     
    	public Collection<User> getUsers() {
    		return users;
    	}
     
    	public void setUsers(Collection<User> users) {
    		this.users = users;
    	}
    }


    Dans l'application de test j'obtient le message d'erreur suivant (sachant que l'app de test : GestionDeStockClient et "search_user" est la methode de l'EJB Session qui retourne l'EJB Entity User ) :


    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
    Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
    	at $Proxy0.search_user(Unknown Source)
    	at com.et.GestionDeStockClient.main(GestionDeStockClient.java:30)
    Caused by: java.lang.ClassNotFoundException: [Ljava.lang.StackTraceElement;
    	at java.net.URLClassLoader$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at org.jboss.remoting.loading.RemotingClassLoader.loadClass(RemotingClassLoader.java:50)
    	at org.jboss.remoting.loading.ObjectInputStreamWithClassLoader.resolveClass(ObjectInputStreamWithClassLoader.java:139)
    	at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
    	at java.io.ObjectInputStream.readClassDesc(Unknown Source)
    	at java.io.ObjectInputStream.readArray(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
    	at java.io.ObjectInputStream.readSerialData(Unknown Source)
    	at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    	at java.io.ObjectInputStream.readObject0(Unknown Source)
    	at java.io.ObjectInputStream.readObject(Unknown Source)
    	at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.receiveObject(JavaSerializationManager.java:128)
    	at org.jboss.remoting.marshal.serializable.SerializableUnMarshaller.read(SerializableUnMarshaller.java:66)
    	at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:279)
    	at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
    	at org.jboss.remoting.Client.invoke(Client.java:525)
    	at org.jboss.remoting.Client.invoke(Client.java:488)
    	at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:55)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:77)
    	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
    	at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:102)
    	... 2 more
    merci

  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
    Par défaut
    Peut on voir le code de ton EJB session?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Peut on voir le code de ton EJB session?
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    package sessions;
     
    import java.util.List;
    import javax.ejb.Remote;
     
    import entities.User;
     
    @Remote
    public interface UsersManager {
     
    	public User search_user(int id);
     
    }
    et

    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
     
    package sessions;
     
    import java.util.List;
     
    import javax.ejb.Stateless;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
     
    import entities.User;
     
    @Stateless
     
    public class UsersManagerBean implements UsersManager {
     
     
    	@PersistenceContext
    	EntityManager em;
     
     
    	public User search_user(int id){
     
    	    return em.find(User.class, id);
     
    	}
     
    }
    Le plus étonnant c'est que j'ai testé avec l'entité User toute seul (sans "Privilege" et donc sans la présence de @OneToMany et @ManyToOne) et tout ce passe bien !

  4. #4
    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
    Par défaut
    Il te manque la désignation du coté propriétaire de la relation oneToMany: essaie de mettre ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @OneToMany(mappedBy="privilege")
    	private Collection<User> users = new ArrayList<User>();
    Mais bon perso je vois pas trop le rapport avec l'erreur, mais normalement avec ce mapping il aurait ralé quand tu demarrais ton serveur . Peux tu nous montrer là où tu fais appel à ton EJB session? le code client je veux dire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Par défaut
    Citation Envoyé par DevServlet Voir le message
    Il te manque la désignation du coté propriétaire de la relation oneToMany: essaie de mettre ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @OneToMany(mappedBy="privilege")
    	private Collection<User> users = new ArrayList<User>();
    Non ..pas de changement

    Citation Envoyé par DevServlet Voir le message
    Mais bon perso je vois pas trop le rapport avec l'erreur, mais normalement avec ce mapping il aurait ralé quand tu demarrais ton serveur . Peux tu nous montrer là où tu fais appel à ton EJB session? le code client je veux dire.
    code de l'application de 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    package com.et;
     
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.List;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
     
    import entities.Produit;
     
    import sessions.GestionDeStock;
    import sessions.UsersManager;
     
    public class GestionDeStockClient {
     
       public static void main(String[] args) {
          try {
     
      		Hashtable ht=new Hashtable();
      		ht.put("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
      		ht.put("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
      		ht.put("java.naming.provider.url", "localhost:1099");
      		System.out.println("TEST");
     
      		Context context=new InitialContext(ht);
     
      		UsersManager mgr = (UsersManager) context.lookup("UsersManagerBean/remote");
     
      		System.out.println(mgr.search_user(2).getEmail());
     
    		System.out.println("test");
     
          } catch (NamingException e) {
             e.printStackTrace();
          }
       }
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 118
    Par défaut
    Bonjour,

    J'ai reglé ce problème en passant vers la jdk 1.5 (apparemment jboss 4.0 ne supporte pas la jdk 1.6)

    merci pour votre aide

  7. #7
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 11
    Par défaut
    C'est un bug connu de Java 1.6 essaye en mettant en VM arguments de ton client :

    -Dsun.lang.ClassLoader.allowArraySyntax=true

    Chez moi sa fonctionne.

    Lien : http://bugs.sun.com/view_bug.do?bug_id=6434149

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/08/2011, 20h28
  2. DuplicateMappingException : problème avec les annotations
    Par Spikuria dans le forum Hibernate
    Réponses: 1
    Dernier message: 30/08/2010, 17h26
  3. Hibernate 3.5 Problème avec les annotations
    Par irnbru dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/04/2010, 15h14
  4. [EJB3 Entity] Problème avec les annotations pour une List d'Enum
    Par uiscias dans le forum Java EE
    Réponses: 2
    Dernier message: 31/03/2009, 17h09
  5. Problème avec les champs de type table
    Par devdev dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/12/2004, 16h05

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