Übung RMI

Werbung
Praktikum aus Softwareentwicklung 2
SS 2009
Name:
Matr.Nr.:
Ziel-Repository: svn://www.ssw.uni-linz.ac.at/2009S/PSW2/<kMatrNr>/branches/ex4/
Abzugeben: Quellcode, auf Papier und elektronisch.
Abgabefrist: 15.06.2009
Tutor:
Maximal: 100 Punkte
Punkte:
RMI) Remote-Call-API
Immer mehr Programme müssen mit entfernten Rechnern kommunizieren. Entweder
um Daten zu laden und zu speichern oder um Services auf diesen Rechnern zu nutzen.
In dieser Übung beschäftigen wir uns mit Services, oder „Wie kann ich eine Methode
auf einem anderen Rechner aufrufen?“.
In Java gibt es dazu mehrere Möglichkeiten:
• Webservices
o Kommunizieren über XML-Nachrichten.
o Technologie-unabhängige Kommunikation ist möglich, zB Java-Server,
C#-Client.
o Großer Overhead, benötigen viel Infrastruktur, zB Webserver.
• Remote Method Invocation (RMI)
o Kommuniziert über ein Java spezifisches Protokoll.
o Wenig Overhead.
• Socket-Verbindung
o Versenden von Daten über TCP- oder UDP-Verbindungen.
Aufgabe
In dieser Übung müssen sie eine einfache RMI-API implementieren. Verwenden sie
dazu: Reflection, Networking und Serialization. Entwickeln sie ein einfaches NetzwerkProtokoll für Ihre Bibliothek. Ihre API soll folgende Funktionen bieten:
• Exportieren von Objekten unter einem Namen; exportierte Objekte müssen
genau ein Interface implementieren.
• Importieren von Objekten über einen Namen; die API muss entsprechende
Proxies erzeugen. Der Nutzer des Objekts „merkt nicht“, dass es sich um ein
Remote-Objekt handelt.
• Als Parameter sollen alle primitiven, serialisierbaren und exportierten Objekte
möglich sein.
• Un-Exportieren von Objekten; neue Klienten bekommen das Objekt nicht mehr,
Klienten die bereits eine Referenz auf das Objekt haben sollen das Objekt noch
weiter nutzen können. Sobald es keine Klienten mehr gibt soll das Objekt
entfernt werden (Garbage Collection).
• Garbage Collection; implementieren sie einen Mechanismus (Lease), um
festzustellen ob ein Objekt noch benötigt wird.
• Aufrufe sollen synchron erfolgen, d.h. der Methodenaufruf blockiert bis er
abgeschlossen ist.
Punkte
Implementieren sie ihr Programm sauber strukturiert, damit sie keine Punkte durch
„Kleinigkeiten“ verlieren.
• Protokoll (10 Punkte)
o Importieren eines Objekts
o Aufrufen einer Methode
o Erneuern einer Lease.
• Exportieren/Importieren von Objekten (20 Punkte)
• Aufrufen von Methoden (die Unterpunkte sind „aufbauende Levels“)
o Ohne Parameter (10 Punkte)
o Mit Rückgabewert (10 Punkte)
o Mit Parametern und Rückgabewert (10 Punkte)
• Parameter
o Primitive und serialisierbare Parameter (10 Punkte)
o Exportierte Objekte als Parameter (20 Punkte)
• Lease Mechanismus zur Garbage Collection
o Renew Lease Nachrichten versenden (10 Punkte)
o Bonus: Unbenutzte Objekte aus der Registry entfernen (10 Punkte)
Hinweis
Auf der Übungshomepage steht eine Beispielanwendung (CalculatorTest.zip) die zeigt
wie man eine solche API anwenden kann. Im Beispiel heißt die API Hathor und bietet
die folgende Schnittstelle:
• static Hathor create(int port) throws IOException
o Erstellt eine neue Hathor-Registry, darüber kann man Objekte exportieren
und importieren.
o Der Parameter Port beschreibt den Netzwerk-Port auf dem Hathor auf
Anfragen lauschen soll.
• void exportObject(String name, Object obj) throws IOException
o Macht ein Objekt unter dem gegeben Namen bekannt.
o Das Objekt muss genau ein Interface implementieren.
• Object importObject(String host, int port, String name)
o Importiert das Objekt mit dem gegebenen Namen vom gegeben
Computer.
o Erstellt automatisch einen Proxy für das Remote-Objekt.
• void stop()
o Unterbricht den Hathor-Server-Thread, damit die Anwendung beendet
werden kann.
• void unexportObject(String name)
o Entfernt das Objekt mit dem gegebenen Namen von der Hathor-Registry.
Herunterladen