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.
Presenters
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