Partage
  • Partager sur Facebook
  • Partager sur Twitter

java RMI MVC

Sujet résolu
    4 janvier 2010 à 0:58:19

    Bonjour,

    Je programme une application suivant le pattern MVC et utilisant RMI. Le serveur possede toutes les classes, le client seulement la fenetre principale et les vues. La fenetre principale possede les vues.

    J ai utilise des interfaces "maisons" comme explique dans le tuto JAVA afin de faire comme les Observable/Observers pour la mie a jour des vues.

    Les vues du client doivent "s abonner" au modele. Mon probleme est que le rafraichissement des vues doit se faire a travers le reseau.

    Pour cela, j essaie de passer la vue du client au modele. Pour cela, le client appelle une methode particuliere chez le serveur en passant la fameuse vue en parametre. La classe Vue est exectement la meme chez le serveur et chez le client. Cette classe est Serializable et Remote.

    Dans le code de la vue dans la fonction update(), il y a un System.out.println.
    Je fais aussi un panneau.getGraphics() afin de dessiner sur le panneau contenu dans la fenetre (et que la vue possede).

    Le serveur a l air de bien recevoir la vue passee en parametre, mais le texte du System.out.println s affiche chez le serveur et pas chez le client. De plus, le getGraphics me renvoie null.

    Il doit y avoir une probleme, peut etre que le passage de parametres se fait par copie et non par reference, ce qui expliquerait que le texte est affiche chez le serveur.

    Le but est de mettre a jour la vue du client quand le modele du serveur change et appelle la methode update des vues.

    J ai lu sur un forum que l utilisation de la commande rmic n est plus obligatoire a partir de la version 1.6 du jdk. Confirmez vous cela ???

    Enfin, je precise que l appel de methodes distantes entre le client et le serveur fonctionne car je l ai teste, mais les parametres envoyes sont seulement des int.


    Tout d abord, ce que j essaie de faire est il realisable ???
    Faut il faire quelque chose de special afin de passer en parametre par reference la vue ???
    Cette facon de faire vous semble elle bonne ou est i possible de faire plus simple ???


    Un grand merci pour votre aide et votre experience !!!
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      4 janvier 2010 à 22:20:49

      pour passer un objet via RMI, faut qu'il soit serializable.

      ton archi me semble bizarre, le serveur ne devrait pas avoir connaissance de l'existence des clients et donc des vues(hors controller bien entendu): utilise plutot ceci:

      vues <-> dispatcher <-> controler <-> modèle

      oublie les listener et fais des return des méthodes d'update, coté client un dispatcher mettra tout le monde à jour(lui il peut utiliser un observateur par exemple)
      • Partager sur Facebook
      • Partager sur Twitter
        6 janvier 2010 à 20:18:33

        Merci de ta réponse.

        J ai finalement réussit a faire ce que je voulais. En fait, il suffisait d'utiliser l'"annuaire".

        On utilise des Naming.rebind(......) afin d'ajouter un objet dans un "annuaire" et des Naming.Lookup afin de récupérer un objet dans l'annuaire. Un objet est associé à une chaine(.....) de caractère donnée en paramètre à ces fonctions.

        On utilise de toute façon cette même opération chez le client pour qu'il récupère une référence vers des objets su serveur. Mais on peut partager des objets dans l'autre sens exactement de la même manière.

        Pour donner une référence de la vue du client au serveur (pour l'ajouter dans l'Arraylist des observateurs du modèle afin qu'elle soit notifiée), le client place la vue dans l'annuaire en faisant un Naming.rebind(......) et appelle ensuite une méthode d'un objet distant chez le serveur. Cette méthode fait un Naming.lookup(......) et récupère ainsi une référence vers la vue pour l'ajouter dans l'Arraylist des observateurs.

        Donc quand on appelle la méthode update de chacun des observateurs placés dans l'Arraylist, le update de la vue du client est bien exécuté chez le client car il s'agit d'une référence. La vue du client est donc mise à jour.

        La vue doit implémenter Serializable (et Remote ???) et hériter de UnicastRemoteObject.


        En espérant que cela pourra aider quelqu'un un jour !!!



        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          6 janvier 2010 à 20:24:47

          l'annuaire est là pour les objets à exposer publiquement, la vue ne devrait pas utiliser ça.
          • Partager sur Facebook
          • Partager sur Twitter
            13 décembre 2010 à 16:23:30

            slt, j'ai un projet d'une realisation d'un voyage et ca avec la technologie RMI , quelq'un peut m'aider
            • Partager sur Facebook
            • Partager sur Twitter

            java RMI MVC

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown