Versucht das Beispiel im Anhang (PDF) theoretisch nachzuvollziehen. Wenn ihr die Klassen kompiliert, die RMI-Registry (auf Windows mittels start rmiregistry, auf UNIX-like rmiregistry&) und den Server gestartet habt, sollte der Client problemlos kommunizieren.
Haltet euch etwaige Beobachtungen fest, sodass wir sie nach Abschluss der Übung ansprechen.
Aufgaben
- Vervollständigt das Beispiel mittels einer threadsicheren Highscore-Liste.
- Arbeitet paarweise und bringt das Beispiel auf mindestens zwei Rechnern zum Laufen, die Registry sollte einfachheitshalber auf dem Server residieren. Wie behandelt ihr die Race Conditions?
- Nutzt Threadpools um die Belastbarkeit des Servers zu testen. Ab welcher Anzahl reagiert der Server nicht mehr? Findet ihr weitere Infos im Web?
- Versucht ein zweites Remote-Objekt als Rückgabewert einer Methode des vorhandenen Remote-Objekts anzulegen. Dabei könnte es passend zu den "Highscores" um eine Spielverwaltung gehen welche "Games" genannt wird.
Ruft vom Client aus Methoden auf, die über den Proxy zum Server gelangen und dort ausgeführt werden (bspw. addGame(), getGames()). Damit euch das gelingt, müsst ihr wiederum mit einer Schnittstelle (von Remote abgeleitet) und der Klasse UnicastRemoteObject arbeiten. Ist das Remote-Objekt allen Clients gleich? - Optional: Schafft ihr es auch, vom Client aus ein Remote-Objekt zu exportieren (analog zu Übung 3), per Methodenaufruf dem Server zu übergeben, sodass dieser Code auf dem Client auszuführen imstande ist? Praktisch könnte dies ein Logger sein, der eine Methode log() bereitstellt, welche auf dem Client Meldungen ausgibt.
Weitere Beispiele