1 - Aufgabe 3: Fernaufrufsemantiken [ID:32708]
50 von 77 angezeigt

Hallo zusammen! In der dritten Aufgabe arbeitet ihr noch einmal mit eurem eigenen Fernaufrufssystem

auf Basis von Java RMI. Dieses Mal stellt ihr Fehlertoleranzmechanismen in Form von

verschiedenen Aufrufssematiken bereit, um zum Beispiel den Verlust von Nachrichten zu

tolerieren. Zum Testen der neuen Funktionalität simuliert ihr dann Fehler in eurem Kommunikationssystem.

Schauen wir wieder kurz auf unser Klassendiagramm. Die Fernaufrufssematik kann pro Operation

angegeben werden. Da definiert ihr für euren Auktionsdienst für jede Methode eine dafür

sinnvolle Semantik. Die Umsetzung der Semantiken geschieht dann in Stub und Skeleton. Genauer

gesagt im VS Invocation-Händler beim Client und VS Server auf Serverseite. Ihr stellt

dabei ein oder zwei Semantiken zur Verfügung, last of many und add it most once, wobei letztere

nur für 7,5 ECTS benötigt wird. Zum Testen der neuen Semantiken sollen zudem Fehler wie

der Verlust oder das Verzögern von Nachrichten eingeschleust werden. Das kann zum Beispiel

in einer neuen Klasse VS Buggy Object Connection geschehen. Ihr dürft hier aber auch eigene

Ideen entwickeln.

Für die Implementierung der zwei Semantiken braucht es einige Änderungen an eurem Fernaufrufsystem.

Für last of many müsst ihr euren Aufrufen z. B. eindürge Addies und für mehrfache Versuche

Sequenznummern zuweisen. Zudem braucht es Timeouts, um zu definieren, ab wann ein Aufruf

als fehlgeschlagen angesehen wird. Bei add most once ist es zudem wichtig, dass eine

Anfrage maximal einmal ausgeführt wird. Das Ergebnis muss sich also gespeichert werden

und wie bei allem, was man speichert, braucht es in dem Fall auch wieder eine garbage collection.

Mehr Details zu den einzelnen Semantiken findet ihr im zugehörigen Video.

Welche Fernaufrufssematik dabei verwendet wird, soll für jede Methode einzeln festgelegt

werden können. Dies soll durch eine Annotierung im Interface durch den Anwendungsentwickler

ermöglicht werden und wird dann zur Laufzeit von eurem Fernaufrufssystem ausgewertet.

Annotationen sind eine Möglichkeit, Metadaten im Quelltext zu hinterlassen. Häufig dienen

sie als Markierungen für die Programmierer oder werden von der IDI oder auch bei der

Übersetzung verwendet. Man kann sie aber auch zur Laufzeit auflesen.

Hier ein Beispiel, wie man eigene Annotationen definiert. Es sollen Methoden als Lesen oder

Schreiben annotiert werden. Um einer Annotation verschiedene Werte zuweisen zu können, also

schreibend oder lesend, definiert man ein Hilfs-Inam. In unserem Beispiel das Inam

Thou's Method Type mit den beiden Werten ReadAccess und WriteAccess.

Die Annotation selbst definiert man dann mit dem Keyboard Add Interface, wie hier im Beispiel.

Die Add Retention Annotation der Annotation selbst definiert, wann die Annotation weggeworfen

wird, also wie lange sie sichtbar bleibt. Wir wollen unsere Annotation zur Laufzeit

auslesen können und nehmen daher die Retention Policy Runtime. Es gibt auch andere Möglichkeiten

und dann wird die Annotation zum Beispiel vor der Übersetzung oder nach der Übersetzung

weggeworfen. Durch den Rückgabetyp der Standardmethode

Value definieren wir zudem die Werte, die unsere Annotation annehmen kann, also unser

Inam Thou's Method Type. Unsere Annotation setzen wir dann ganz gewohnt mit dem vorgestellten

Add ein. Den Wert der Annotation übergeben wir als Parameter. Ein zusätzlicher Hinweis,

wenn der Wert sich vom Rückgabetyp der Value-Funktion unterscheiden soll und einer anderen Funktion

angehört, muss diese explizit angegeben werden, wie hier auf der Folie unten im Beispiel für

Foo. Um unser Beispiel weiterzuspinnen, haben wir

in einem Interface VS Key Value Store zwei Methoden annotiert. Die Put-Methode als schreibend

und die Get-Methode als lesend. Jetzt wollen wir zur Laufzeit analysieren, welche Annotation

unsere Methode jeweils hat. Das geht wieder mit der aus der letzten Aufgabe schon bekannten

Reflection API. Wenn man ein Method-Objekt für eine Methode

hat, hat man dort die Methode GetAnnotation. Diese sucht nach einer speziellen Annotation

und erwartet daher die Klasse der Annotation als Parameter. Hier unsere VSAnnotation.class.

Wenn die Methode eine derartige Annotation hat, wird sie von der Methode zurückgegeben.

Wenn nicht, bekommt man einfach Null zurück. Aus diesem VSAnnotation-Objekt, das wir bekommen,

Teil einer Videoserie :
Teil eines Kapitels:
Fernaufrufsemantiken

Zugänglich über

Offener Zugang

Dauer

00:06:13 Min

Aufnahmedatum

2021-05-12

Hochgeladen am

2021-05-12 09:07:41

Sprache

de-DE

Überblick und Tipps zu Aufgabe 3: Fernaufrufsemantiken

Einbetten
Wordpress FAU Plugin
iFrame
Teilen