|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||||
|
Membre éclairé
![]() ![]() Michael TranchantChargé de projets JEE - BI Inscription : septembre 2002 Messages : 37 ![]() |
Bonjour
Suite à une refactorisation (ré-usinage, pour les puristes Pour illustrer, oldPkg.myClass est ma classe avant le refactoring et newPkg.myClass après le refactoring. Le contenu (méthodes, attributs et serialVersionUID) sont strictement identiques. Pendant la désérialisation, pas de miracle, je récupère une ClassNotFoundException, ce qui est bien normal. Pour éviter çà, je voulais redéfinir à la volée le chemin de mon ancienne classe, par la nouvelle. Pour se faire, j'ai créé une classe surchargeant ObjectInputStream, qui entre en jeu pour la désérialisation. Cette méthode n'est pas originale, je me suis "inspiré" de ce billet : http://www.norwinter.com/2009/08/20/.../#comment-9635 Voici donc ma nouvelle classe Code :
Code :
Par contre, myClass possède une surcharge de readObject. Elle essaie de recréer les classes, mais sans la conversion, car elle ne connait pas ConvertedObjectInputStream... Cette méthode ne reçoit qu'un paramètre : "java.io.ObjectInputStream in" myClass Code :
Code :
Une idée pour récupérer l'InputStream à partir de ObjectInputStream, afin qu'il soit possible de réinstancier ConvertedObjectInputStream ? Un autre biais est-il envisageable ? Michael |
||||||||
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() |
J'ai lu en diagonale le problème.
Il est préférable de ne pas être lié à l'objet en lui-même pour la persistance. Surtout lorsque les données doient persisté entre plusieurs versions de l'application. Je t'invite à lire : http://java.developpez.com/faq/java/..._serialisation Mais je pense que le déplacement de la classe est peut-être un peu trop pour la sérialisation. Mais le plus simple serai de conserver les deux classes pour faire une conversion assez basique. Par exemple : Code :
__________________
N'oubliez pas de marquer vos discussions ![]() Si une réponse vous a été utile pensez à voter Pour ![]() Pensez à la javadoc
|
||
|
00
|
|
|
#3 |
|
Membre éclairé
![]() ![]() Michael TranchantChargé de projets JEE - BI Inscription : septembre 2002 Messages : 37 ![]() |
Bonjour,
Merci Kolodz pour ta réponse. Cependant, reprendre les anciens fichiers pour les "upgrader" n'est pas une option envisageable : je n'ai pas de contrôle sur leur diffusion. J'ai abandonné la refactorisation de ce package, pour garder la compatibilité ascendante, en attendant une réflexion plus profonde sur la mise à jour de ce "module" de sérialisation/désérialisation. Je laisse le topic ouvert, car il n'est pas résolu, et si quelqu'un a une réponse, çà m'intéresse, ne serait-ce que pour ma connaissance Java-istique. Cordialement Michael |
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() |
Tu peux mettre à disposition de tes utilisateurs un jar de "mise à jour" (convertisseur) de leur sauvegarde.
Le mieux reste de ne pas faire de sérialisation d'objet pour la persistance. Même si cela à un côté pratique dans un premier temps. Les applications partagent des données et non pas des objets. Cordialement, Patrick Kolodziejczyk.
__________________
N'oubliez pas de marquer vos discussions ![]() Si une réponse vous a été utile pensez à voter Pour ![]() Pensez à la javadoc
|
|
00
|
Copyright © 2000-2012 - www.developpez.com