RMI-Comment le passage d'un objet à distance grâce à une télécommande méthode de travail?
Si je comprends bien, une fois que j'ai mis en place un RMI lien de communication entre les deux systèmes, je peux passer un objet qui implémente "à Distance" dans l'une des méthodes à distance que prend un objet de ce type et le bien-end sera tout simplement obtenir de l'interface à distance pour le nouvel objet (en d'autres termes, il va devenir une nouvelle connexion à distance, contrairement à la sérialisation de l'objet.)
Est-ce correct?
Si oui, je suppose que cela a quelque chose à voir avec les signatures de méthode, mais j'aimerais savoir exactement comment il détermine qu'il doit créer un nouvel objet à distance au lieu de simplement la sérialisation de l'objet entier.
C'est vraiment difficile à mettre en mots. Laissez-moi essayer ceci:
Disons que j'ai un client et un serveur. Sur le serveur j'ai créer et publier un RMI objet, sur le système Client-je récupérer l'interface et peut interagir avec le système de Serveur.
Client Server
Object1 RemoteIface ---- Object1 Implementation
So far So good. Sur Le Client, L'Objet1.remoteMethod() exécute sur le Serveur (après la sérialisation sur les paramètres).
Maintenant, voici la question, sur le client j'exécute le code comme ceci:
Object2 object2=new object2(); //Also a remote object
object1.send(object2);
Ce que je comprends, à ce moment, mon système aura un nouveau mécanisme de communication:
Client Server
Object1 RemoteIface ----- Object1 Implementation
Object2 Implementation ----- Object2 RemoteIface
À ce stade, si le serveur appelle une méthode sur Objet2, cette méthode sera effectivement exécuté sur le client.
Je me demande à quel point le système décide de le faire plutôt que de simplement la sérialisation (comme il le ferait avec n'importe quel non-objet distant).
Ou suis-je complètement faux et il sérialise et j'ai besoin d'une sorte de "getRemoteInterface()" appel de la méthode pour créer de l'appel distant?
OriginalL'auteur Bill K | 2009-04-21
Vous devez vous connecter pour publier un commentaire.
C'est ce qu'on appelle la Modèle De Proxy. La chose instancié à l'extrémité distante a généré un code de transfert de valeurs et d'activer des méthodes.
java.rmi.À distance de lui-même est juste un "marquage" d'interface. Vous avez besoin d'une mise en œuvre pour faire le travail. Jetez un oeil à ce tutoriel JavaCamp pour plus d'.
Mise à jour: ok, va dans le sens d'autres, oui, vous avez besoin de sérialiser l'objet et le passer si sur le fil. Probablement la meilleure chose est de travailler à travers les Java Tutoriel sur RMI premier. Mais, fondamentalement, Serializable est une autre interface de marquage qui indique à Java, l'objet est prêt à être transformé en un interne format de chaîne de caractères, un peu comme le XML ou YAML. Ce format peut être "réhydrater" dans un objet correspondant à l'extrémité de réception, tant que les fichiers de classe de cet objet sont disponibles.
Il sonne comme Charlie est l'interprétation de votre question, comme je l'ai fait, et est à droite sur la cible avec sa réponse. Si vous passez un paramètre (ou de retourner un objet) qui met en œuvre à Distance, une dynamique de proxy squelette est créé, et le point de terminaison de l'information sur le squelette est envoyé (comme une sorte de "référence" plutôt qu'une "valeur"). Au niveau du récepteur, une dynamique de proxy stub est créé pour parler de l'objet distant. La décision de distance plutôt que de sérialiser est basé sur l'interface Distante.
Bon, Il semble que vous n'obteniez la bonne, et je viens de perdre un tas de temps à réécrire à ma question. Mais pourriez-vous être plus explicite sur le "RemoteInterface"? Si j'ai tout simplement jeté à l'interface à distance, est-ce que la cause de séparer l'interface de l'application, ou faut-il passer par l'appel de la méthode?
Pour le mettre dans l'autre, qu'aurais-je à faire différemment pour l'avoir sérialiser l'ensemble de l'objet distant sur une méthode à distance afin d'envoyer la totalité de la chose plutôt que de créer le squelette? Si je l'ai adoptée comme un Serializable au lieu d'une Distance, ne serait-ce faire?
Donc, je pense que je comprends--C'est vraiment dans la façon dont il est exprimé. S'il vous plaît corrigez-moi si je me trompe, mais si vous avez un objet Sérialisable et à Distance, de le transmettre à distance une méthode qui prend un Serializable aura un effet inverse à partir de la transmettre à distance une méthode qui prend un "Remote" argument. Cela a un sens, mais est contre-intuitif puisque vous pensez simplement casting n'aurait pas un effet significatif.
OriginalL'auteur Charlie Martin