tp_rmi Q3 objectif ?

Conception de logiciels Intranet : patrons et canevas

Modérateurs : Douin, graffion

Alban_lp
Messages : 17
Inscription : 29 nov. 2017 17:37

tp_rmi Q3 objectif ?

Message par Alban_lp » 28 mars 2018 11:31

Bonjour,

Sur la Q3 Je me demande ce qui est attendu... la persistance en local est gérable assez aisément (fichier pour la map + liste message) mais pour la persistance à distance est-il attendu que l'on rende RecipientListImpl activable avec rmid ? que l'on utilise l'objet MarshalledObject ?

Les tests passent sans cela, mais les tests 8, 9 10 du cours laissent supposer que c'est cela qui est à mettre en oeuvre... Quelqu'un qui a abouti peut-il m'aiguillier ?

Merci
@+
Alban

julien_24
Messages : 38
Inscription : 17 oct. 2017 13:41

Re: tp_rmi Q3 objectif ?

Message par julien_24 » 28 mars 2018 16:34

Bonjour,

Je me pose aussi, la même question, du coup je me dis que je n'ai pas tout compris encore.

Par exemple j'ai un problème avec la classe Message.

Voila comment je vois les choses:

RecipientListImpl est sur le serveur(donc sur un machine) avec InputString et Message.

Le Receiver est le client.

Lorsque le serveur envoi un message aux Receivers, comment ces derniers peuvent-ils lire le message?? (le .class de Message n'est pas présent cote client), du coup cela entraine tout de suite une autre question.

La désérialisation nécéssite t'elle obligatoirement le .class de la classe concernée.?? (ou l'ensemble des informations sont comprises dans la serialisation??)

Si tout est compris dans la sérialisation, envoyer un objet sérialisé à vers une autre machine qui ne connait pas le type de l'objet qui a été sérialisée, pourrait ensuite permettre d'instancier ce type d'objet??

J'espère n'avoir confus personne avec ces questions.

julien.

julien_24
Messages : 38
Inscription : 17 oct. 2017 13:41

Re: tp_rmi Q3 objectif ?

Message par julien_24 » 28 mars 2018 16:47

Re,

Je réctifie, Message doit être côte client et côte serveur, la sérialisation permet de persister un objet ou de l'envoyer sur une autre machine, ou ....
mais il faut que le type soit connu à la désérialisation par la jvm.

Je vais tenter un petit test et je reviens. (Peut être complètement inutile sauf pour moi, désolé si c'est la cas).

julien

julien_24
Messages : 38
Inscription : 17 oct. 2017 13:41

Re: tp_rmi Q3 objectif ?

Message par julien_24 » 28 mars 2018 17:30

ReRe:

Bon et bien il faut que je revois la serialisation.

Dans un package:
J'ai crée une interface interface1 qui étend Serializable qui a une seule methode public String getMessage();
Une classe Message qui implemente interface1 et qui contient une variable d'instance message de type String .

Dans une autre package une classe qui ecrit et lit dans un fichier
La methode d'ecriture prend en paramètre un objet de type interface1 et l'ecrit sur un fichier.
La methode de lecture lit dans ce fichier et retourne un type interface1.

Dans un troisieme package une classe Main avec une main.
La premiere fois je crée un objet de type Message que je met dans le type interface1.
J'ecris cet objet sur le fichier.
Je le lis tout de suite apres pour verifier, j'appel la methode getMessage() sur l'objet désérialisé, j'ai bien le String que j'avais initialisé à la construction
de l'objet Message.

J'efface la main et j'appel juste lire() (aucun import de la classe Message)
j'appelle la methode getMessage() sur l'objet qui a été désérialisé et j'ai toujours le String que j'avais passé en paramètre quand je l'avais écrit.
Par contre dans cette main si je veux créer un objet de type Message, erreur de compilation l'import de la classe n'est pas fait.
Pourtant l'appel de getMessage() fonctionne vu que j'ai bien ce String qui est retournée.

Je ne comprends pas vraiment ce qu'il se passe?
Si vous avez des idées ou mieux si vous savez pourquoi cela fonctionne, n'hésitez pas à m'éclairer.

Voila, voila

julien

julien_24
Messages : 38
Inscription : 17 oct. 2017 13:41

Re: tp_rmi Q3 objectif ?

Message par julien_24 » 28 mars 2018 17:58

ReReRe:

Ah j'ai créé un nouveau projet avec juste l'interface, ma classe utilitaire qui lit dans un fichier, j'ai recopié le fichier ou j'avais écrit pour que mon deuxieme projet le trouve et là, il y a un probleme à la désérialisation (a l'execution), comme quoi il trouve pas la classe Message.

Il faut bien que la classe soit connue au moment de la désérialisation, dans le premier projet, peut être java essai de résoudre les problèmes, mais si le .class est absent, cela ne marche pas.

Voila, j'espère que tout ce laïus aura servit à quelqu'un. (ou alors je passe encore à côté de quelque chose, ce qui est tout a fait possible)

julien.

Alban_lp
Messages : 17
Inscription : 29 nov. 2017 17:37

Re: tp_rmi Q3 objectif ?

Message par Alban_lp » 28 mars 2018 21:55

Bonsoir,

Dis moi, tu es au taquet !!!
j'ai pas tout suivi...
Mais pour moi la sérialisation d'un objet comporte ses références à sa classe, et c'est pourquoi il faut joindre dans la commande d'ouverture du dis objet la référence à l'emplacement des classes via le registry.
je regarde cela demain, les idées claires !
Enfin merci de partager, en tout cas.
@+
Alban

STB
Messages : 23
Inscription : 22 févr. 2017 19:44

Re: tp_rmi Q3 objectif ?

Message par STB » 29 mars 2018 9:58

Alban,

tu dois juste créer une structure dans ta classe pour accueillir les messages, y ajouter les nouveaux messages avant de les envoyer, la sérialiser pour la récupérer et renvoyer ces messages si besoin (pas besoin d'utiliser un objet MarshalledObject).

Stéphane

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité