Einführung in Verteilte Systeme Wintersemester 2004/2005 Übungsblatt Nr. 3 Prof. Dr. Odej Kao Dipl. Inf. Ulf Rerrer Abgabe: in der Woche vom 22. bis 26.11.2004 Aufgabe 1: [RMI-HelloWorld] Schauen Sie sich das in der Vorlesung vorgestellte RMI Programm Hello an. Erstellen Sie HelloInterface.java, HelloImplementation.java, Hello-Server.java und HelloClient.java wie auf den Folien beschrieben. Kompilieren Sie das RMI-System und starten Sie es. Zum erfolgreichen Starten sind eine Policy-Datei und evtl. eine Anpassung des CLASSPATHs notwendig. Aufgabe 2: [BookZone] Programmieren Sie mittels Java RMI den Online-Buchshop BookZone. Der BookZone-Server soll dem Benutzer (Client) folgende Funktionen anbieten: • Authentifizierung: Benutzer melden sich per Dialog mit einem Benutzernamen und Passwort an. • Katalog: Benutzer können sich Artikel des Shops auflisten und in einer Detailansicht anzeigen lassen. Die Artikel sind dabei wie folgt kategorisiert: o Bücher (Oberkategorie) ! Sachbücher, Romane, Belletristik, Fachbücher (Unterkategorien) o Musik ! Charts, Rock, Klassik, Sampler, Soundtracks o Video und DVD ! Spielfilme, Konzerte, Serien o Elektronik ! Kameras, Computer, HiFi • Kaufen: Benutzer können Artikel kaufen. Die Artikel können in BookZone mehrfach vorhanden sein und werden durch IDs zur eindeutigen Identifizierung ausgestattet. Wenn ein Artikel gekauft wurde, wird dieser aus dem Katalog gelöscht. • Werbung: Ein Benutzer kann für sich einen Werbemodus aktivieren. In diesem wird er über neue Artikel im Katalog bei Anmeldung ans System informiert, sofern er in der gleichen Unterkategorie schon einmal einen Artikel erworben hat. Hinweise: • BookZone ist als RMI Server zu implementieren. Dabei wird empfohlen, die drei Dateien BookZoneInterface, BookZoneImplementation und BookZoneServer anzulegen. • Für die Auflistung und Detailanzeige sollen die Artikel (Klassen, nicht nur Text) an den Client übertragen werden, die entsprechende Datenstruktur (in einer Datei BookZoneItem implementiert) muss also von der Klasse Serializable abgeleitet werden. Die Artikel soll man sich mittels der Methode toString() auf der Konsole anzeigen lassen können. • • • Fehler sollen vom Server mittels Ausnahmen zurückgeliefert werden (Klasse BookZoneException). Achten Sie auf Nebenläufigkeit von mehreren Benutzern und benutzen Sie synchronisierte Abschnitte falls notwendig. Die einzelnen Funktionalitäten des Clients sollen jeweils über einen interaktiven Dialog steuerbar sein (siehe Beispielprotokoll). Beispielprotokoll: (Eingaben sind durch ">", Ausgaben durch ":" gekennzeichnet) Server: Admin(Server): : 5 Artikel "Herr der Ringe", Preis 19.99 EUR in Katego rie BUCH.ROMAN : 2 Artikel "Pulp Fiction", Preis 9.59 EUR in Kategorie DVD.SPIELFILM : 1 Artikel "Hits der 80iger", Preis 6.99 EUR in Kategorie MUSIK.SAMPLER : Benutzerkonto Alice anlegen : Benutzerkonto Bob anlegen : (Alice) Login > ADD 5 "Herr der Ringe" BUCH.ROMAN 19.99 Alice: Bob: > ADD 2 "Pulp Fiction" DVD.SPIELFILM 9.59 > ADD 1 "Hits der 80iger" MUSIK.SAMPLER 6.99 > CREATE Alice x > CREATE Bob y > LOGIN Alice x : ok : (Bob) Login > LOGIN Bob y : ok : (Alice) Kategorien anzeigen > KATEGORIES : BUCH (ROMAN) DVD (SPIELFILM) MUSIK (SAMPLER) > GOTO MUSIK.SAMPLER : (Alice) Geht in Kategorie MUSIK.SAMPLER : (Alice) Artikel anzeigen > LIST : ID 8 "Hits der 80iger"6.99 > BUY 8 : (Alice) Kauft ID 8 : (Bob) Geht in Kategorie MUSIK.SAMPLER : (Bob) Artikel anzeigen > GOTO MUSIK.SAMPLER > LIST : empty : (Alice) Werbung aktivieren : (Alice) Logout > ADVERTISE true > LOGOUT > ADD 1 "ACDC Bestof" MUSIK.ROCK 8.99 : (Alice) Login, Werbung zeigen : (Alice) Logout : (Bob) Logout > LOGIN Alice x : ok : New Items in BookZone … ID 9 "ACDC Bestof" in MUSIK.ROCK for 8.99 > LOGOUT > LOGOUT Wichtig: Zum Bestehen dieser Übung muss die zweite Aufgabe gelöst und erfolgreich vorgeführt werden. Auf Anfrage müssen einzelne Zeilen oder Vorgehensweisen des Programms von jedem Gruppenmitglied erläutert werden können. Es dürfen maximal Dreiergruppen gebildet werden. Eine alleinige Abgabe ist unzulässig. Hinweise zum Übungsablauf: • Benutzen Sie die auf den Pool-Rechnern installierte Java-Version. Bei eigenen Laptops mindestens Java 1.4.1. • Es können Entwicklungsumgebungen benutzt werden (Eclipse, JBuilder, ...) • Die Programme müssen an essentiellen bzw. schwierigen Stellen ausreichend kommentiert sein und es sollten die häufigsten Fehler abgefangen werden. • Die Programme sollten weitestgehend vor der Übung in der Gruppe erstellt werden. Die Übung dient zum Beantworten von Fragen und zur Abgabe der Programme. • Achten Sie darauf, dass nach Abgabe alle Ihre Prozesse beendet werden (vor allem die RMIRegistry und Serverprozesse!!!)