Loesung 4 - Verteilte Systeme

Werbung
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
Herunterladen