IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

RMI synchronisation appels distants


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 97
    Points : 55
    Points
    55
    Par défaut RMI synchronisation appels distants
    Bonjour,

    J'utilise RMI afin d'appeller une methode d un objet situé sur un autre ordi en réseau. La communucation client/serveur se fait bien. Le problème est le suivant :

    Le client appelle une methode de l'objet A situé chez le serveur. Cet appel se fait dans un mouseListener. Mais le serveur appelle la meme methode du meme objet aussi dans un mouse listener.

    L'objet A reçoit donc beucoup d appels en meme temps provenant du reseau et en local, il faudrait les synchroniser. Je ne sais pas trop comment faire cela. J'ai trouve differentes pistes en faisant des recherches, mais je ne sais pas trop ce qui est le plus simple et le mieux adapté.

    Pensez vous que ceci est réalisable avec les memes fonctions de synchronisation que l'on peut utiliser pour les threads (yield, wait, notify, ...) ? L utilisation de Synchronized vous semble elle appropriée (la methode appellée avec le mot clé synchronized) ?

    Un grand merci par avance pour votre aide !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    En effet, le mot clé synchronized remplit cette fonction. Ceci permet de poser un verrou sur les variables de la classe, ce qui empêche un client appelant cette méthode de travailler sur la même variable qu'un autre. Si tu ne modifies aucune variable de classe dans ta méthode, cela est inutile. tu peux aussi ne synchroniser qu'une variable à la fois en utilisant la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void maMethode(){
    synchronized(maList){
    maList.add(anElement);
    }
    }
    Le problème est que cela augmente le temps de réponse de ta méthode à cause des blocages successifs. Une autre solution consiste donc à déclarer les variables sensibles aux traitements concurrents comme "volatile".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private volatile List maList;
    La méthode qui est copiée dans le cache de chaque programme l'appelant va alors devoir chercher auprès du serveur(objet) la valeur des attributs "volatile". Cela force la synchronisation en obligeant les appelants à travailler avec une valeur à jour des variables. C'est plus rapide mais la synchronisation est moins performante.

    Espérant que ça te donne une piste, tu peux trouver des compléments dans la l'api java.

Discussions similaires

  1. RMI + comment appeler la méthode distante
    Par une_tite_question dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 19/05/2008, 15h50
  2. RCP : "appel distant d'action" et cycle dans le build path
    Par fabgamer dans le forum Eclipse Platform
    Réponses: 5
    Dernier message: 10/01/2007, 10h44
  3. [RPC] Appels distants : remplacer des objets COM
    Par pataguillon dans le forum C++
    Réponses: 26
    Dernier message: 30/03/2006, 09h17
  4. Echec d'un appel distant avec RPC
    Par hasan dans le forum MFC
    Réponses: 3
    Dernier message: 18/05/2005, 06h42
  5. [JNDI] Appel distant d'un EJB
    Par Righetto Dominique dans le forum Java EE
    Réponses: 4
    Dernier message: 27/01/2005, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo