1 - Aufgabe 2: Stubs & Skeletons [ID:31978]
49 von 49 angezeigt

Hallo zusammen! Auch in der zweiten Aufgabe beschäftigt ihr euch wieder mit der Entwicklung

eures eigenen Fernaufrufsystems. Nachdem ihr in der letzten Aufgabe noch Java RMI verwendet

habt, ersetzen wir das in dieser Aufgabe durch unser eigenes Fernaufrufsystem.

Dazu müsst ihr auf kleinen und Serverseite Dynamics Stubs bzw. Skeletons für exportierte

Objekte erzeugen. Natürlich solltet ihr dabei auch Rückrufe, wie im Bankbeispiel aus der

letzten Aufgabe unterstützen. Schauen wir uns wieder unser Klassendiagramm

für diese Aufgabe an. Auf kleinen Seite habt ihr die neuen Klassen VS Remote Reference

und VS Invocation Handler. Eine VS Remote Reference verwaltet den Ort, also Host und

Port und die ID eines entfernten Objektes, damit es bei einem Fernaufruf auch gefunden

werden kann. Der VS Invocation Handler kümmert sich dann darum, dass lokale Aufrufe an diesem

Objekt in Fernaufrufe umgewandelt werden. Auf Serverseite habt ihr im Skeleton zuerst

die Klassen VS Server, die die Verbindungen und den Nachrichtenaustausch mit dem Kleinen

verwaltet und durchführt. Dazu kommt der VS Remote Object Manager, der die am Server

exportierten Objekte kennt und die angekommenen Fernaufrufe auf den tatsächlichen Objekten

dann ausführt. Mehr zum Verhalten von Stubs und Skeletons

erfahrt ihr auch im separaten Video dazu. Ansonsten noch ein paar generelle Hinweise

zur Aufgabe. Ein Hauptziel von Fernaufrufsystemen ist es, möglichst transparente Aufrufe auf

entfernten Objekten zu tätigen. Neben dem Ausführen der Aktion und der Rückgabe des

Ergebnisses gehört in Java dazu natürlich auch, dass ein Aufruf gewollt oder ungewollt

eine Exception werfen kann. Wenn der Aufruf jetzt einfach am Server abbricht und die Exception

irgendwo um der Warnung verschwindet, ist das natürlich nicht das richtige Verhalten. Stattdessen

muss genau wie der Rückgabewert auch eine Exception an den Kleinen weitergegeben werden.

Was bedeutet das für unser Fernaufrufsystem? Wenn eine Exception bei der Ausführung auf

Serverseite geworfen wird, darf diese nicht zu einem Abbruch des Programms führen, sondern

muss gefangen werden. Dazu bietet Java die Klasse Invocation TargetedException an. Die

so gefangene Exception wird dann an den Kleinen weitergeleitet und muss dort im Stub wieder

ausgepackt und dort geworfen werden. Neben Exceptions innerhalb von Methoden aufrufen,

kann es bei Fernaufrufen aber natürlich auch noch zu anderen Fehlern kommen, die es im

lokalen Fall nicht gibt, sei es, dass der Server nicht erreichbar ist oder es zu Netzwerkproblemen

kommt. Um die Transparenz zu wahren, sollte sich um solche Fehler am besten aber das Fernaufrufssystem

selbst kümmern. Näheres dazu, also wie man damit umgeht, gibt es dann aber in der nächsten

Aufgabe zu Fernaufrufs-Semantiken. Zusätzlich dazu soll euer Fernaufrufssystem

auch Rückrufe unterstützen. In dem Fall kann ein Parameter nicht standardgemäß Call-by-Value,

also als Kopie des lokalen Werts übertragen werden, sondern es muss Call-by-Reference

verwendet werden. Dabei wird, wie der Name schon sagt, nicht das Objekt selbst verschickt,

sondern eine Referenz darauf. In unserem Fall natürlich eine Remote-Referenz, da das Objekt

ja auf einem anderen Server liegt. Damit das überhaupt möglich ist, muss der Parameter

natürlich einerseits exportiert sein und andererseits überhaupt erstmal die Remote-Schnittstelle

implementieren, also wie Fernaufrufe verwendet werden können. Für diese Sonderbehandlung

braucht es ein oder zwei Änderungen im Invocation-Händler, da die Parameter darauf überprüft werden

müssen, von welchem Typ sie sind und welche Art der Parameterübergabe notwendig ist,

um sie dann jeweils entweder Call-by-Value oder Call-by-Reference zu behandeln. Das

Gleiche gilt natürlich nicht nur für die Parameter, sondern auf Serverseite auch für

den Rückgabewert einer Methode. Dieser kann auch eine Remote-Referenz sein. Um zu erkennen,

welche Art euer Objekt ist, könnt ihr zum Beispiel schauen, ob eine gewisse Schnittstelle

implementiert wird. Das geht mit der Methode isAssignableFrom, die man auf dem Punkt Class-Objekt

die jeweiligen Klasse aufruft, wie hier im Beispiel für das Interface Serializable.

Mehr Details zu den Rückrufen gibt es auch wieder im jeweiligen Video. Viel Spaß bei

der Bearbeitung der Aufgabe und wir sehen uns in der Rechnerübung.

Teil einer Videoserie :
Teil eines Kapitels:
Stubs & Skeletons

Zugänglich über

Offener Zugang

Dauer

00:03:50 Min

Aufnahmedatum

2021-04-29

Hochgeladen am

2021-04-29 16:38:26

Sprache

de-DE

Aufgabenbeschreibung und Hinweise zu Aufgabe 2: Stubs & Skeletons

Einbetten
Wordpress FAU Plugin
iFrame
Teilen