9
votes

Comment mettre en œuvre le modèle d'observateur avec Java Rmi?

J'ai un client qui commence un processus long-exécutant sur le serveur. À intervalles réguliers, j'aimerais montrer à l'utilisateur ce qui se passe à l'arrière-plan. L'approche la plus simple consiste à interroger le serveur, mais je me demande s'il n'y avait pas de moyen de mettre en œuvre le modèle d'observateur pour cela. Malheureusement, j'utilise RMI pour parler au serveur et je crains que je doive transformer mon client dans un serveur RMI pour cela.

Y a-t-il une autre façon qui me manque?


2 commentaires

J'essaie de faire ça aussi et je suis venu à la même conclusion ... RMi Kinda suce! :)


sandny.com/2017/05/18/java-rmi-observer -slider


4 Réponses :


1
votes

Je ne pense pas que tu ne manques rien. Les deux seules manières sont d'appeler périodiquement le serveur et de vérifier le statut (interrogation) ou d'enregistrer un rappel que le serveur appelle périodiquement (votre client doit exposer une méthode). IMO, le sondage est une manière parfaitement raisonnable de gérer cela.


0 commentaires

3
votes

RMI peut en général soutenir la communication à deux sens. (Et oui, RMI est un pita pour mettre en place et faire autre chose avec.)

Cependant, le transport HTTP qui fonctionne sur un script CGI (!) Ne le supporte pas.


2 commentaires

Est-ce toujours vrai lorsque je démarre le serveur dans mon code avec locaeegistry.cremeweatergistry () (au lieu d'utiliser l'exécutable fourni par Sun)?


+1 pour "(et oui, RMI est un pita pour mettre en place et faire autre chose avec.)" S'il vous plaît dites à mon école que.




2
votes

Consolidation de toutes les réponses ici, j'ai mis en œuvre 2 voies RMI entre client et serveur avec serveur exposant son talon à l'aide de Registry

  1. Le client obtient un talon du serveur du registre RMI
  2. Ensuite, le client met son talon en tant qu'observateur à la méthode Addobserver's Server
  3. Le serveur notifie les clients à l'aide de ce talon

    Le code suivant donne une meilleure idée xxx


1 commentaires

Base de votre code, la classe Rmiclient peut être utilisée sur le serveur lorsque la classe RMISERVER met en œuvre la méthode Addobserver. Est-ce que la classe Rmiclient définie dans le client et le serveur?