2009-05-21 6 views
2

J'ai une application distribuée. Le client et les serveurs partagent certaines bibliothèques communes. Le client doit être compilé avec un compilateur JDK 5 ou avec target = 1.5 (exécuté n'importe où sur les Macs PowerPC et CoreDuo). Mais je voudrais utiliser les fonctionnalités SE 6 dans le code serveur uniquement. Est-il correct de compiler les bibliothèques communes deux fois - une fois avec un JDK 5 et une fois avec un JDK 6 et sérialiser des objets du côté client en utilisant des fichiers classes compilés avec JDK 5 et les désérialiser du côté serveur avec des fichiers de classe compilés avec un JDK 6 et vice versa? Ou cela va-t-il casser la sérialisation?Est-ce que l'utilisation de compilateurs de versions différentes de JDK sur le même fichier source rompt la (dé) sérialisation?

Quelle est la meilleure pratique pour créer des bibliothèques qui devraient fonctionner avec du code compilé avec différentes versions de JDK?

Répondre

5

Si vous définissez explicitement votre serialVersionUID, il devrait être possible de sérialiser et de désérialiser dans différentes versions de JVM. C'est un peu le point de le définir; voir the spec:

Remarque - Il est fortement recommandé que toutes les classes sérialisables déclarent explicitement serialVersionUID valeurs, car le calcul par défaut serialVersionUID est très sensible aux détails de classe qui peuvent varier en fonction des implémentations du compilateur, et peuvent ainsi entraîner serialVersionUID conflits inattendus lors de la désérialisation, entraînant la désérialisation échouer.

Questions connexes