4 - Rückrufe [ID:31981]
50 von 219 angezeigt

Hallo zusammen. Euer eigenes Fernhochrufsystem in Aufgabe 2 soll natürlich auch Rückrufe

unterstützen. Was das Konzept der Rückrufen ist und was ihr dabei beachten müsst, bespreche

ich in diesem Video. Verwendet habt ihr Rückrufe, im Englischen

auch Callbacks genannt, auch schon in Aufgabe 1.

Erinnert euch an das Interface von Vsauction Service. Es gibt hier zwei Methoden, RegisterAuction

und PlaceBit, die einen Parameter vom Typ Vsauction Event-Händler erwarten.

Der Händler wiederum ist dazu da, auf kleinen Seiten ein Event auszulösen, wenn es eine

Änderung zu einer Auktion gab und es dort dann auszugeben.

Ein Fernaufruf wird in dem Fall also nicht nur auf der Serverseite ausgeführt, sondern

muss selbst wiederum einen Fernaufruf zurück am Client ausführen. Also ein Rückruf.

Dazu muss der Server aber natürlich eine Referenz auf den Client haben, um dort den

Fernaufruf überhaupt ausführen zu können.

Am Ende vom Video zur Java RMI auf Aufgabe 1 wurde ein Beispiel zu genau diesem Thema

auch sehr ausführlich erklärt.

Das Problem bei der ganzen Sache ist jetzt eigentlich etwas viel Allgemeineres. Referenzen.

Bei einem Rückruf braucht der Server eine Referenz auf ein Objekt, das weiterhin am

Client liegt.

Bei lokalen Methoden aufrufen sind solche Referenzen einfach. Wenn sowohl Aufrufer als

auch Empfänger im selben Adressraum residieren, ist die Referenz auch auf beiden Seiten gültig

und kann innerhalb der Methode ganz normal verwendet werden.

Da ist ja auch keine spezielle Behandlung notwendig.

Im Fernaufruf gilt jetzt die erste Annahme allerdings nicht mehr. Client und Server haben

unterschiedliche Adressräume, eine Referenz in einem Adressraum hat erstmal keinerlei

Bedeutung in dem anderen, bzw. eine komplett völlig andere.

Innerhalb der aufgerufenen Methode können wir daher normalerweise nicht einfach die

Speicheradresse als Referenz verwenden.

Natürlich gibt es Konzepte wie verteilte gemeinsame Adressräume, auch Distribute Shared Memory

genannt, die theoretisch auch für Client-Server-Anwendungen verwendet werden können.

Für generische Client-Server-Konstrukte sind derartige Ansätze aber nicht geeignet.

Eine einfache Übertragung der Referenz so wie sie ist, ist daher nicht sinnvoll, da

der Server damit nichts anfangen kann.

Es braucht also eine spezielle Semantik für die Parameterübergabe bei Fernaufrufen.

Dafür gibt es verschiedene Umsetzungsmöglichkeiten in verteilten Systemen.

Ich stelle euch jetzt zwei davon vor.

Zuerst kann ein Rückruf mit dem Konzept CallByValueResult umgesetzt werden.

CallByValue ist die normale Parameterübergabe bei Fernaufrufen.

Es wird einfach eine volle Kopie des Parameters verwendet, also das Value der übergebenen

Variable.

CallByValueResult funktioniert jetzt ähnlich.

Bei einem Methodenaufruf wird dem Server eine Kopie des Objekts gegeben.

Innerhalb des Aufrufs kann diese dann die Kopie nach Belieben verändern und anschließend

wird sie an den Client zurückgesendet.

Dieser hat dann die Aufgabe, sein original Objekt, was er der Methode übergeben hat,

durch die Kopie zu ersetzen und so den neuen Zustand des Objekts zu speichern.

Die Vorteile liegen hier auf der Hand.

Die Implementierung davon ist relativ einfach.

Es braucht kaum Sonderbehandlungen.

Das veränderte Objekt kann zum Beispiel einfach als Rückgabewert der verändert Methode definiert

werden.

Nur muss in diesem Fall das Objekt natürlich sehr realisierbar sein, um die Kopie überhaupt

Teil einer Videoserie :
Teil eines Kapitels:
Stubs & Skeletons

Zugänglich über

Offener Zugang

Dauer

00:13:02 Min

Aufnahmedatum

2021-04-29

Hochgeladen am

2021-04-29 16:57:03

Sprache

de-DE

Implementierung von Rückrufen im eigenen Fernaufrufystem nach dem Abbild von Java RMI

Einbetten
Wordpress FAU Plugin
iFrame
Teilen