25.09.2013 Aufrufe

Verteilte Objekte

Verteilte Objekte

Verteilte Objekte

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Internet und Intranet<br />

Ein JAVA-Programm kann ein entferntes Objekt aufrufen, sobald es eine Referenz auf das<br />

Objekt, entweder durch Verwendung des RMI „bootstrap“ Naming Service angefordert, oder als<br />

Argument oder Rückgabewert erhalten hat. Dabei kann ein Server, der ein solches Objekt<br />

veröffentlicht, auch selbst Klient sein. RMI verwendet die Methode für „Objekt Serialisierung“<br />

des JDK V1.1, um ein lokales JAVA Objekt in einen seriellen Datenstrom („Marshalling<br />

Stream“) zu wandeln (marshal), innerhalb einer Nachricht über das Remote Reference Layer<br />

(vgl. Abb. 6) an einen Klienten zu übertragen und dort wieder zurück zu wandeln (unmarshal).<br />

Der empfangende Server-Skeleton entpackt den Marshalling Stream und übergibt die Argument<br />

an die aktuelle Implementierung der aufgerufenen Operation [MER97]. Für das eigentliche<br />

Verbindungsmanagement ist das Transport Layer verantwortlich, welches auf JAVA-Sockets<br />

und TCP realisiert ist. Im Unterschied zu JAVA (und C++) übergibt RMI lokale <strong>Objekte</strong> als<br />

Wert („by-value“), weil eine Referenz auf ein lokales Objekt nur innerhalb einer einzigen VM<br />

sinnvoll ist. Typen werden nicht gekürzt, so daß RMI echten objektorientierten Polymorphismus<br />

unterstützt [ORF97].<br />

Der Namensdienst von RMI ist zur Zeit noch sehr primitiv, nicht persistent und dient lediglich<br />

zum Auffinden von aktiven <strong>Objekte</strong>n (rmi://hostname:port/name). Er stellt weiter einen<br />

Mechanismus zur Verfügung, mit dem ein Klient Stubs vom Server laden kann. Wie auch bei<br />

anderen verteilten Objektmodellen dient im RMI ein Stub [RED96] als lokales Stellvertreterobjekt<br />

(Proxy) für ein entferntes Objekt (vgl. Abb. 6). Dabei bietet RMI einen, gegenüber JAVA,<br />

erweiterten Sicherheitsmechanismus, der das Wohlverhalten der Stubs überwacht. Abschließend<br />

erweitert RMI die Fehlerbehandlung von JAVA mit der java.rmi.RemoteException<br />

Klasse, um auch entfernte Fehler behandeln zu können.<br />

Der Lebenszyklus entfernter <strong>Objekte</strong> wird durch einen Referenzzähler (sog „Live Reference“<br />

[MER97]) realisiert, der die aktiven Verbindungen zwischen <strong>Objekte</strong>n zählt. Aktive<br />

Verbindungen sind im Fall von JAVA Klient/Server-Verbindungen auf TCP/IP Basis. Sobald der<br />

Referenzzähler eines <strong>Objekte</strong>s auf Null gefallen ist, wird dieses durch die verteilte „Garbage<br />

Collection“ von RMI gelöscht. Dieser Mechanismus ist zwar einfach zu implementieren und<br />

entwickelt zur Laufzeit kaum Overhead, Unterbrechungen aktiver Verbindungen aufgrund von<br />

Ausfällen auf unteren Protokollebenen führen aber leicht zu Inkonsistenzen. Automatisches<br />

Rebinding, das erneute Anbinden an entfernte <strong>Objekte</strong> nachdem eine Verbindung unterbrochen<br />

wurde, wird von RMI nicht angeboten [ORF97].<br />

Die folgende Abbildung verdeutlicht das RMI-Modell.<br />

Abb. 6: RMI-Modell [MER97].<br />

RMI erlaubt es, entfernte <strong>Objekte</strong> mit Hilfe von normalen JAVA-Schnittstellen zu erstellen. „Wie<br />

in CORBA oder DCOM sind also Vermittlungsschichten an der Kommunikation beteiligt, die der<br />

„RMI-Compiler“ rmic aus der Schnittstellenbeschreibung automatisch generiert [MER97].“<br />

Dieses Umgehen einer eigenen Schnittstellenbeschreibungssprache führt automatisch dazu, daß<br />

RMI nicht <strong>Objekte</strong> adressieren kann, die in anderen Sprachen erstellt worden sind. Da RMI auf<br />

der Übertragungsschicht keine Unterstützung für Sicherheit und Transaktionen bietet, muß man<br />

dieses Kommunikationsprotokoll als proprietär und „lightweight“ bezeichnen.<br />

18

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!