Les avantages et les inconvénients sont similaires à celles des RPC (Remote Procedure Call). Il y a une apparence superficielle de la simplicité, parce que les objets qui sont en fait à distance peuvent être traitées comme si elles étaient locales.
Cela semble comme un grand avantage de la simplicité de la programmation, mais il y a des coûts cachés. Systèmes distribués ont des problèmes de latence et le potentiel de l'échec partiel qui le programmeur doit en être conscient. Une invocation de méthode à distance est l'objet d'une éventuelle défaillance de la sécurité, des problèmes de latence, une défaillance du réseau, etc. Tapisser sur ces sortes de problèmes peuvent être un désastre pour la fiabilité.
Valdes et al. avoir une bonne discussion des questions.
Merci pour le lien vers le papier. Je peux parfaitement utiliser cela dans ma mémoire 🙂 Bien dit. Même si j'ai écrit un livre sur le RMI, je ne suis pas un avocat. Il fait apparaître les choses simples qui sont très loin d'être simple, et ça rend les choses difficile qui ne le sont pas vraiment difficile, par exemple, " devrais-je réessayer?' Pas plus de lien "Valdes et al" 😐
Dynamique de la classe de chargement est très puissant
Si vous mettre en place quelque chose comme ci-dessous, vous ne pouvez pas changer de serveur de côté pour un temps long et développement client (une exception sur le rmi serveur a pour obtenir ces classes dans le classpath - donc, soit le serveur sur net ou de les inclure et de la reconstruction du serveur)
Vous pouvez implémenter deux interfaces comme ça:
Tâche commune de l'interface:
publicinterfaceTask<T extendsSerializable>extendsSerializable{
T execute();}
Rmi interface:
publicinterfaceRmiTaskextendsRemote{<T extendsSerializable> T executeTask(Task<T> task)throwsRemoteException;}
RmiTask mise en œuvre côté serveur:
publicclassRmiTaskExecutorimplementsRmiTask{public<T extendsSerializable> T executeTask(Task<T> task){return task.execute();}}
Pourrait être précaire, lors de l'utilisation Dynamique de la classe de chargement (client sert de mise en œuvre de types) - par exemple, vous savez que rmi serveur d'appels method() sur PassedObject, mais merveilleux client pourrait remplacer cette méthode et d'exécuter ce qu'il veut...
difficile à mettre en œuvre de rappel qui travaillerait sur Internet (il a besoin d'établir une nouvelle connexion du serveur au client, il peut être difficile de passer à travers un NAT/routeurs/pare-feu)
lorsque vous soudain la connexion lors de l'exécution de la méthode à distance il se trouve que cette méthode ne serait pas de retour (je recommande d'emballage appels rmi en Callables et de les exécuter avec délais d'attente).
Les avantages et les inconvénients sont similaires à celles des RPC (Remote Procedure Call). Il y a une apparence superficielle de la simplicité, parce que les objets qui sont en fait à distance peuvent être traitées comme si elles étaient locales.
Cela semble comme un grand avantage de la simplicité de la programmation, mais il y a des coûts cachés. Systèmes distribués ont des problèmes de latence et le potentiel de l'échec partiel qui le programmeur doit en être conscient. Une invocation de méthode à distance est l'objet d'une éventuelle défaillance de la sécurité, des problèmes de latence, une défaillance du réseau, etc. Tapisser sur ces sortes de problèmes peuvent être un désastre pour la fiabilité.
Valdes et al. avoir une bonne discussion des questions.
Bien dit. Même si j'ai écrit un livre sur le RMI, je ne suis pas un avocat. Il fait apparaître les choses simples qui sont très loin d'être simple, et ça rend les choses difficile qui ne le sont pas vraiment difficile, par exemple, " devrais-je réessayer?'
Pas plus de lien "Valdes et al" 😐
OriginalL'auteur Rob Lachlan
De mon expérience:
Pour:
Vous pouvez implémenter deux interfaces comme ça:
Tâche commune de l'interface:
Rmi interface:
RmiTask
mise en œuvre côté serveur:Exemple client
Task
mise en œuvre:Contre:
method()
surPassedObject
, mais merveilleux client pourrait remplacer cette méthode et d'exécuter ce qu'il veut...Callable
s et de les exécuter avec délais d'attente).OriginalL'auteur rafalmag