In einer verteilten Rechenumgebung ermöglicht die verteilte Objektkommunikation die Kommunikation zwischen verteilten Objekten . Ihre Hauptaufgabe besteht darin, Objekten den Zugriff auf Daten und den Aufruf von Methoden entfernter Objekte (Objekte, die sich nicht im lokalen Speicherbereich befinden) zu ermöglichen. Der Aufruf einer Methode eines entfernten Objekts wird als Remote Method Invocation ( RMI ) oder Remote Invocation bezeichnet und ist das objektorientierte Äquivalent zum Remote Procedure Call (RPC).
Klassenzettel und Skizzen
Der weit verbreitete Ansatz zur Implementierung des Kommunikationskanals besteht in der Verwendung von Stubs und Skeletons . Dabei handelt es sich um generierte Objekte, deren Struktur und Verhalten vom gewählten Kommunikationsprotokoll abhängen , die aber im Allgemeinen zusätzliche Funktionalität bieten und so eine zuverlässige Kommunikation über das Netzwerk gewährleisten.
In RMI wird ein Stub (der entsprechende Teil auf Clientseite) vom Programmierer als Schnittstelle definiert . Der RMI-Compiler rmic verwendet diesen, um den Klassen-Stub zu erstellen. Der Stub führt die Typüberprüfung durch. Das Grundgerüst ist in einer Klasse definiert, die die Schnittstelle „Stub“ implementiert . [ 1 ]

Wenn ein Aufrufer einen Remote-Aufruf an das aufgerufene Objekt durchführen möchte, delegiert er die Anfragen an seinen Stub , der die Kommunikation mit dem Remote- Skeleton initiiert . Der Stub übergibt die Argumente des Aufrufers über das Netzwerk an den Server-Skeleton. Dieser leitet die empfangenen Daten an das aufgerufene Objekt weiter, wartet auf eine Antwort und gibt das Ergebnis an den Client-Stub zurück. Es findet keine direkte Kommunikation zwischen dem Aufrufer und dem aufgerufenen Objekt statt.
Im Detail besteht die Kommunikation aus mehreren Schritten:
- Der Aufrufer ruft eine lokale Prozedur auf , die vom Stub implementiert wird.
- Stub- Marshalls wandeln den Aufruftyp und die Eingabeargumente in eine Anforderungsnachricht um.
- Der Client-Stub sendet die Nachricht über das Netzwerk an den Server und blockiert den aktuellen Ausführungsthread .
- Das Server-Skelett empfängt die Anforderungsnachricht aus dem Netzwerk.
- Das Skelett extrahiert den Aufruftyp aus der Anforderungsnachricht und sucht die Prozedur im aufgerufenen Objekt.
- Argumente der Prozedur zum Unmarshalling des Skeletts
- Das Skeleton führt die Prozedur auf dem aufgerufenen Objekt aus.
- Das aufgerufene Objekt führt eine Berechnung durch und gibt das Ergebnis zurück.
- Skeleton packt die Ausgabeargumente in eine Antwortnachricht.
- Skeleton sendet die Nachricht über das Netzwerk zurück an den Client.
- Der Client-Stub empfängt die Antwortnachricht vom Netzwerk.
- Der Stub entpackt Ausgabeargumente aus der Nachricht.
- Der Stub übergibt die Ausgabeargumente an den Aufrufer, gibt den Ausführungsthread frei und der Aufrufer setzt die Ausführung fort.
Der Vorteil dieser Architektur besteht darin, dass weder der Aufrufer noch das aufgerufene Objekt Netzwerklogik implementieren müssen. Diese Funktionalität, die einen zuverlässigen Kommunikationskanal über das Netzwerk gewährleistet, wurde in die Stub- und Skeleton -Schicht ausgelagert.
Stub
Das clientseitige Objekt, das an der verteilten Objektkommunikation teilnimmt, wird als Stub oder Proxy bezeichnet und ist ein Beispiel für ein Proxy-Objekt .
Der Stub fungiert als Schnittstelle zwischen Client-Objekten und allen ausgehenden Anfragen an Server-Objekte. Er kapselt die Funktionalität der Client-Objekte und gewährleistet durch Hinzufügen der Netzwerklogik einen zuverlässigen Kommunikationskanal zwischen Client und Server. Der Stub kann manuell erstellt oder je nach gewähltem Kommunikationsprotokoll automatisch generiert werden.
Der Stub ist verantwortlich für:
- Einleitung der Kommunikation mit dem Server- Skelett
- Aufrufe vom Aufruferobjekt übersetzen
- Zusammenführung der Parameter
- dem Skelett mitteilen , dass der Aufruf erfolgen soll
- Argumente über das Netzwerk an das Skelett übergeben
- Entpacken der Antwort aus dem Skelett
- Dem Anrufer mitteilen, dass das Gespräch beendet ist
Skeleton
Das serverseitige Objekt, das an der verteilten Objektkommunikation teilnimmt, wird als Skelett (oder Stub; dieser Begriff wird hier vermieden) bezeichnet.
Ein Skeleton dient als Schnittstelle für serverseitige Objekte und leitet alle eingehenden Clientanfragen darüber. Er kapselt die Funktionalität der Serverobjekte und stellt sie den Clients zur Verfügung. Durch die Integration der Netzwerklogik gewährleistet er zudem einen zuverlässigen Kommunikationskanal zwischen Clients und Server. Skeletons können manuell erstellt oder je nach gewähltem Kommunikationsprotokoll automatisch generiert werden.
Das Skelett ist verantwortlich für:
- Übersetzung eingehender Daten vom Stub in die korrekten Upcalls an Serverobjekte
- Entpacken der Argumente aus den empfangenen Daten
- Argumente an Serverobjekte übergeben
- Marshalling der von Serverobjekten zurückgegebenen Werte
- Werte über das Netzwerk an den Client -Stub zurückgeben
Protokolle mit Stub/Skeleton-Ansatz
- Portable Distributed Objects (PDO) - Objective-C
- Common Object Request Broker Architecture (CORBA) – Interlanguage
- Java Remote Method Invocation (Java RMI) – Java
- Distributed Component Object Model (DCOM) – Microsoft, Interlanguage
- (Beachten Sie, dass der Stub als „Proxy“ und das Skelett als „Stub“ bezeichnet wird [ 2 ] )
- .NET Remoting – Microsoft, Interlanguage
- DDObjects – Borland Delphi
- Distributed Ruby (DRb) – Ruby
Siehe auch
Referenzen
- ^ „Einführung in Java Remote Method Invocation (RMI)“ . www-itec.uni-klu.ac.at . Archiviert vom Original am 26.03.2002.
- ^ MSDN: Marshalling-Details.
- Plášil, František und Stal, Michael. „Eine architektonische Sicht auf verteilte Objekte und Komponenten in CORBA, Java RMI und COM/DCOM“ Archiviert am 24.06.2007 bei der Wayback Machine , Software Concepts & Tools (Band 19, Nr. 1) , Januar 1998.
- Druschel, Peter: „Verteilte Programmkonstruktion“. Archiviert am 04.03.2016 im Internet Archive.
- Farley, Jim. Java Distributed Computing , O'Reilly, Januar 1998.
- Forschungsarbeiten , archiviert am 12.02.2008 in der Wayback Machine , Forschungsgruppe für verteilte Systeme, Karls-Universität Prag