UNIVERSITÄT ULM Fakultät für Informatik Verteilte Systeme Prof. Dr. Peter Schulthess Ralph Göckelmann Stefan Frenz Lösung zum 4. Übungsblatt Verteilte Betriebssysteme Aufgabe 1: Multicast a) Nennen Sie jeweils ein Anwendungsbeispiel, für das der Einsatz eines – atomaren – k- zuverlässigen – FIFO – total geordneten Multicast/Multicastfolge angebracht ist. – atomar: Invalidierung von Kopien eines veränderten Datensatzes um Konsistenz zu gewährleisten – k-zuverlässig: Replikation: mindestens k-Knoten müssen die neuen Werte erhalten – FIFO: Chat; Die Nachrichten eines Absenders sollten in der richtigen Reihenfolge sichtbar werden – total geordnet: Konferenzsystem: Es sollte keine Antwort vor der Frage eintreffen b) Entspricht eine atomare Multicastfolge einer total geordneten Multicastfolge? Begründen Sie ihre Antwort. Nein. Bei einer atomaren Multicastfolge muß jeder Multicast für sich bei allen Knoten ankommen. Die Reihenfolge der einzelnen Multicastnachrichten kann vertauscht sein. Bei einer total geordneten Multicastfolge müssen die Nachrichten der Folge auf allen Knoten in der selben Reihenfolge eintreffen. Aufgabe 2: CORBA a) Im Java Online Tutorial http://java.sun.com/docs/books/tutorial/index.html wird die Entwicklung von Corba Anwendungen ausführlich beschrieben. Konsultieren Sie das Thema „IDL“ unter „Specialized Trails“ und beschreiben Sie die notwendigen Schritte bei der Implementierung einer Corba-Anwendung. Remote Interface 1. Interface in IDL definieren: module HelloApp { // Namespace interface Hello // Interface { string sayHello(); }; }; 2. Mapping nach Java: durch Compileraufruf idlj hello.idl _helloImplBase.java server skeleton (abstract class), providing basic CORBA functionality for the server; implements the Hello.java interface Wird bei neuen Java-Versionen nicht mehr benötigt _HelloStub.java client stub, providing CORBA functionality for the client; implements the Hello.java interface Hello.java Java version of IDL interface; contains the single method sayHello HelloHelper.java auxiliary functionality, notably the narrow method required to cast CORBA object references to their proper types. HelloHolder.java holds a public instance member of type Hello. It provides operations for out and inout arguments, which CORBA has but which do not map easily to Java's semantics. Server implementieren Server-Anwendung erstellen: ORB starten und auf Aufruf warten; Skeleton verwenden und Remote Interface implementieren Client implementieren Klient erstellen: ORB starten, Server suchen über Namen, Referenz auf Remote-Objekt erzeugen und Methode rufen; Stub verwenden b) Auf dem Web-Server der Abteilung finden Sie einen fertigen Corba-Server, der einfache arithmetische Funktionen anbietet. Schreiben Sie einen Klienten in Java, der den Server über statische Aufrufe nutzt. Verwenden Sie hierzu die Vorlesungsunterlagen und die Informationen des Java Online Tutorials. siehe Quellcode c) Nennen Sie Gemeinsamkeiten und Unterschiede von Corba und JAVA RMI. Vergleich: RMI CORBA Sprache (-) nur Java (+) sprachunabhängig (auch C++ und Java gemischt) Objekt-Lokalisierung mittels JNDI (Java Naming and Directory Service), also im mittels CosNaming Service als binäre Wesentlichen über Java "lesbare" IORs (Interoperable Object Reference-Objekte und References), nicht menschen-lesbar rmiregistry Programmieraufwand (+) erledigt rmic-Compiler (+-) eigene Interface Language (IDL) Definition Installationsaufwand (-) passender Maschinencode muss auf (+) null (RMI Teil von Java) bis gering alle beteiligten Rechner verteilt (ggf. dynamisches Laden von Klassen) werden Fehlersuche (+-) evtl. mit Java Exceptions; Debugger (-) schwierig (binäre Codierung, andocken verschiedene Sprachen...) Lernaufwand (+) mäßig (-) groß (eigene Sprache IDL!) Gemeinsamkeiten – Voraussetzung ist eine abstrakte Beschreibung des Server-Interface – Einsatz von Proxy-Objekten (Stub bzw. Skeleton), um Zugriff auf verteilte Komponenten möglichst transparent zu machen – Automatische Erstellung der Stub und Skeleton Klasse mittels eines Werkzeugs ( aus dem Server Interface bzw. Implementierung) – Zentrale Registrierung von Objekten in einem Naming Service Unterschiede: – CORBA ist offizieller Standard der OMG, RMI dagegen nur ein „Quasi-Standard“ für Java – Zur Spezifikation der Interfaces verwendet CORBA die IDL Sprache, bei RMI genügt ein Java Interface aus – RMI ist auf die Sprache Java beschränkt, CORBA kann von vielen Programmiersprachen aus genutzt werden – RMI kann spezielle Vorteile von Java nutzen ( wie verteilte automatischen Speicherverwaltung), CORBA ist auf den kleinsten gemeinsamen Nenner der unterstützten Sprachen beschränkt