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 d'utilisation distante d'EJB faisant appel à des Entity contenant des collections


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Par défaut Problème d'utilisation distante d'EJB faisant appel à des Entity contenant des collections
    Bonjour à tous,

    Je rencontre un problème jusqu'ici insolvable et j'aurais bien besoin d'un petit coup de pouce !

    J'ai mis en place des Entity Beans qui mappent ma base de données (Toplink & SQL SERVER). Ils sont donc liés entre eux et notamment par des List pour les relations onetomany et manytomany.

    J'ai ensuite mis en place mes EJB3. J'utilise les interface @local coté Web et tout fonctionne.

    Me voilà donc partie coté Swing où je comptais utiliser mes interfaces @remote. Et là, catastrophe: les EJB faisant appel à des Entity liés à d'autres via mes List sont inutilisables.

    Je rencontre l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    26 janv. 2010 09:20:00 com.sun.corba.ee.impl.encoding.CDRInputStream_1_0 readRMIIIOPValueType
    ATTENTION: "IOP00810211: (MARSHAL) Exception from readValue on ValueHandler in CDRInputStream"
    org.omg.CORBA.MARSHAL:   vmcid: SUN  minor code: 211 completed: Maybe
     
    ...
     
    Caused by: java.io.IOException: Mismatched serialization UIDs : Source (Rep. IDRMI:oracle.toplink.essentials.indirection.IndirectList:C736541957C385C5:7070E88CAC21B40B) = 7070E88CAC21B40B whereas Target (Rep. ID RMI:oracle.toplink.essentials.indirection.IndirectList:C736541957C385C5:8CE233D0CA77EED4) = 8CE233D0CA77EED4
            at com.sun.corba.ee.impl.util.RepositoryId.useFullValueDescription(RepositoryId.java:650)
            at com.sun.corba.ee.impl.io.ValueHandlerImpl.useFullValueDescription(ValueHandlerImpl.java:420)
            at com.sun.corba.ee.impl.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:419)
    Il s'agirait donc d'un problème de sérialisation ...

    J'ai effectué plusieurs tests :
    - utiliser mes interfaces @remote en local (tout fonctionne).
    - utiliser des Collection à la place des List.
    - passer en EAGER plutôt qu'en LAZY.

    J'ai parcouru plusieurs forums sur lesquels j'ai pu lire qu'il pouvait s'agir d'une différence de versions entre les deux JVM, ce qui n'est pas mon cas.

    Rien n'y fait...

    Un peu d'aide pour une débutante ?!

    Merci d'avance!

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Peux-tu montrer le mapping de ton Entity "maître" ?
    Je suppose que tes listes font référence à un proxy (qui ne doit pas être serializable)

    Autre point, pour une utilisation des entity liés, il faut qu'ils soient chargés avant de rendre la main à l'application appelante. Hors du conteneur d'EJB, le lazy loading n'est plus possible (session fermée)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Par défaut
    Mon entity "maître" ? C'est à dire ?

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    celui qui encapsule les listes
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Par défaut
    J'en ai plusieurs, tous codés de la même manière, donc en voici un exemple:

    Auteur.java
    __
    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
     
    @Entity
    @Table(name = "AUTEUR")
    @NamedQueries({@NamedQuery(name = "Auteur.findAll", query = "SELECT a FROM Auteur a"), @NamedQuery(name = "Auteur.findById", query = "SELECT a FROM Auteur a WHERE a.id = :id"), @NamedQuery(name = "Auteur.findByNom", query = "SELECT a FROM Auteur a WHERE a.nom = :nom"), @NamedQuery(name = "Auteur.findByPrenom", query = "SELECT a FROM Auteur a WHERE a.prenom = :prenom"), @NamedQuery(name = "Auteur.findByNationalite", query = "SELECT a FROM Auteur a WHERE a.nationalite = :nationalite"), @NamedQuery(name = "Auteur.findByPresentation", query = "SELECT a FROM Auteur a WHERE a.presentation = :presentation")})
    public class Auteur implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @Basic(optional = false)
        @Column(name = "id")
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Long id;
        @Basic(optional = false)
        @Column(name = "nom", nullable = false)
        private String nom;
        @Basic(optional = false)
        @Column(name = "prenom", nullable = false)
        private String prenom;
        @Basic(optional = false)
        @Column(name = "nationalite", nullable = false)
        private String nationalite;
        @Basic(optional = false)
        @Column(name = "presentation", nullable = false)
        private String presentation;
        @OneToMany(cascade = CascadeType.ALL, mappedBy = "idAuteur", fetch = FetchType.EAGER)
        @OrderBy("titre ASC")
        private List<Ouvrage> ouvrageList;
        @PrePersist
        @PreUpdate
        private void validerDonnees()
        {
            if ( nom == null || "".equals(nom) )
                throw new ValidationException("Nom invalide");
            if ( prenom == null || "".equals(prenom) )
                throw new ValidationException("Prenom invalide");
            if( nationalite == null || "".equals(nationalite) )
                throw new ValidationException("Nationalité invalide");
            if( presentation == null || "".equals(presentation) )
                throw new ValidationException("Presentation invalide");
        }
     
        public Auteur() {
        }
     
        public Auteur(Long id) {
            this.id = id;
        }
     
      (+ constructeurs, getters, setters, equals() et toString() )
     
    }
    L'Entity Ouvrage est du même type et emploie lui aussi d'autres Entity...

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu utilises ceci dans toutes tes classes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    
    private static final long serialVersionUID = 1L;
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/02/2013, 10h34
  2. Réponses: 1
    Dernier message: 29/12/2010, 13h50
  3. Réponses: 2
    Dernier message: 27/10/2009, 10h36
  4. Réponses: 3
    Dernier message: 10/12/2005, 19h56
  5. Réponses: 6
    Dernier message: 10/06/2005, 23h56

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