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

Eclipse Java Discussion :

Génération de serialVersionUID


Sujet :

Eclipse Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Génération de serialVersionUID
    Bonjour

    Une petite question pour comprendre. Lorsque je crée une classe à partir de l'interface Serializable, Eclipse me rajoute un petit warning. Jusqu'à présent, je ne me prenais pas la tête, je rajoutais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @SuppressWarnings("serial")
    Mais j'ai pu lire que c'était une solution pas glop du tout (le serialVersionUID servant à la déserialisation, il me semble).

    Alors, je demande à Eclipse de générer automatiquement ce serialVersionUID. Sur quels éléments se base-t-il pour cela ? Y aurait-il une doc quelque part, présentant l'algorithme ? Je sais juste que ce n'est pas un identifiant aléatoire, je l'ai généré deux fois, avec le même résultat.

    D'avance merci

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Je ne suis pas tout à fait sûr, mais il me semble qu'il le générait depuis le un hash du code de la classe.

    Mais j'ai pu lire que c'était une solution pas glop du tout (le serialVersionUID servant à la déserialisation, il me semble).
    Ce n'est effectivement pas l'idéal, mais si tu n'utilises pas la sérialisation sur tes classes, ce n'est pas un problème

    En fait cette variable est un identifiant permettant d'identifier (logique ^^) la version de la classe pour savoir si la version sérialisée peut-être désérialisée avec la version actuelle de la classe.

    Un problème qui peut néanmoins apparaître si tu ne spécifies par de serialVersionUID, c'est que the classes sérialisables compilées avec Eclipse ne seront pas compatibles avec les mêmes classes compilées avec Javac. Ceci est dû au fait que si tu ne définis pas explicitement cette variable, le compilateur doit en créer une et que le compilateur d'Eclipse ne la génère pas de la même manière que javac.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Baptiste Wicht Voir le message
    Un problème qui peut néanmoins apparaître si tu ne spécifies par de serialVersionUID, c'est que the classes sérialisables compilées avec Eclipse ne seront pas compatibles avec les mêmes classes compilées avec Javac. Ceci est dû au fait que si tu ne définis pas explicitement cette variable, le compilateur doit en créer une et que le compilateur d'Eclipse ne la génère pas de la même manière que javac.
    Le problème n'apparait pas entre eclipse et javac mais entre chaque compilation du source.

    Comme tu l'a dit la serialization se base sur ce champ pour déterminer s'il s'agit de la même version de la classe, et doit pour déterminer si la sérialization peu se faire. Si ce numéro varie cela provoquera un plantage de la sérialization...

    Théoriquement ce numéro devrait changer dès que qu'un champs non-transient est ajouté/modifier/supprimé.

    Le problème est que le numéro généré par les compilateurs varie énormément pour la moindre modif : une simple édition du source pourrait engendrer un nouveau numéro et donc casser la sérialization.

    Plus d'info : [Java 5.0] serial : "serializable class Main has no definition of serialVersionUID"


    Si tu utilises la sérialisation je penses qu'il est plus simple d'utiliser "1" et d'incrémenter à chaque modif

    a++

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Baptiste Wicht
    Ce n'est effectivement pas l'idéal, mais si tu n'utilises pas la sérialisation sur tes classes, ce n'est pas un problème
    Je ne l'utilise pas directement, mais j'imagine que les API de persistence de Java, si En fait, dans ce cas, je ne sais pas si le serial id est obligatoire, puisqu'un check est effectué avant le chargement des objets, afin de s'assurer de la compatibilité des entités et de leur image dans la base.

    Je vais quand même le laisser, dès fois qu'il y ait un problème avec la vérification et pour éviter ce warning (je n'aime pas avoir des warnings dans mon code).

    Merci pour vos réponses

Discussions similaires

  1. Automatiser la génération des serialVersionUID
    Par Don ViP dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 13/01/2007, 20h24
  2. [Débutant] génération d'un EJB avec GenIc
    Par Stessy dans le forum JOnAS
    Réponses: 65
    Dernier message: 31/01/2005, 10h50
  3. Génération programmatique d'un UUID
    Par jIdJo dans le forum MFC
    Réponses: 2
    Dernier message: 18/07/2003, 02h50
  4. [Lomboz] Génération de code pour EJB
    Par paikan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 09/07/2003, 14h28

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