Bonjour à tous,
J'essaie de développer une maquette d'application client / serveur avec ce que j'ai pu apprendre du java.
Le principe est le suivant : une application cliente récupère une liste de données ("cache") envoyée par un serveur connecté à une base de données (en l'occurence MySQL). La liste est updatée en permanence (plusieurs aller-retours par action utilisateur), soit qu'elle reçoive de nouveaux objets, soit que les objets qu'elle contient sont mis à jour.
Les objets subissent un traitement dès le serveur, et sont aussi traités et exploités dès leur arrivée au client pour être visuellement projetés et donner une sensation de fluidité. Pour ce faire, je veux éviter d'instancier de nouveaux objets à chaque modifications. Je conserve donc en mémoire du serveur les objets déjà envoyés au client pour les récupérer lors d'une sollicitation ultérieure, et lui renvoyer les mêmes.
Je pensais m'en être sorti correctement, notamment en voulant profiter du fait que java fonctionne par référencement d'objet, et non par copie.
Ainsi, l'objet o1 était envoyé au client pour alimenter un "objet client" de type O1(o1). Si le serveur modifiait o1, je pensais que le remplacement de l'ancien o1 par le nouvel o1 (o1.equals(o1) = true) dans le cache client suffisait à modifier dans le même temps le o1 référencé dans O1. Vous me suivez ?
Or à ma grande surprise et à ma déception, ce n'est pas ce qui se passe !Lorsque j'affecte o1 dans O1 puis le modifie par le serveur, j'ai 2 versions d'o1 dans mon programme client : c'est bien le nouveau dans le cache, mais O1 continue de pointer vers une ancienne version d'o1. Y a-t-il donc copie ? Où bien la référence n'est pas "centrale" et doit être mise à jour ?
Pour assurer que je n'ai pas la berlue, ils portent tous les deux le MÊME nom (genre "mon.package.complet@12345ab") et sont pourtant DIFFÉRENTS.
J'ai manifestement loupé quelque chose.
Si vous avez une piste qui m'éclairerait, je suis preneur,
Merci et bonne fin d'apm !
---
Edit : heu, il faut que je vérifie un truc...
Partager