18.01.2014 Aufrufe

2 auf 1 - Betriebssysteme und verteilte Systeme

2 auf 1 - Betriebssysteme und verteilte Systeme

2 auf 1 - Betriebssysteme und verteilte Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Client/Server-Programmierung<br />

WS 2013/2014<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong><br />

rolanda.dwismuellera@duni-siegena.de<br />

Tel.: 0271/740-4050, Büro: H-B 8404<br />

Stand: 8. November 2013<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) i<br />

Client/Server-Programmierung<br />

WS 2013/2014<br />

1 Gr<strong>und</strong>lagen: Wiederholung<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 18


1 Gr<strong>und</strong>lagen: Wiederholung ...<br />

Inhalt<br />

➥ Architekturmodelle<br />

➥ Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n<br />

➥ Middleware<br />

➥ Java RMI<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 19<br />

1.1 Architekturmodelle<br />

Client/Server-Modell<br />

➥ Asymmetrisches Modell: Server stellen Dienste bereit, die von<br />

(mehreren) Clients genutzt werden können<br />

➥ Server verwalten i.a. Ressourcen (zentralisiert)<br />

Client<br />

Aufruf<br />

Aufruf<br />

Server<br />

Ergebnis<br />

Server<br />

Ergebnis<br />

Client<br />

Server kann selbst<br />

wieder als Client agieren<br />

Prozeß<br />

Rechner<br />

➥ Häufigstes Modell für <strong>verteilte</strong> Anwendungen (ca. 80 %)<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 20


1.1 Architekturmodelle ...<br />

Client/Server-Modell ...<br />

➥ I.A. nebenläufige Anfragen mehrerer Client-Prozesse an den<br />

Server-Prozeß<br />

Start<br />

Client<br />

Ende<br />

Anfrage<br />

(request)<br />

Antwort<br />

(reply)<br />

Zeit<br />

Server<br />

Client<br />

➥ Beispiele: Dateiserver, WWW-Server, DB-Server, DNS-Server, ...<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 21<br />

1.1 Architekturmodelle ...<br />

n-Tier-Architekturen<br />

➥ Verfeinerungen der Client/Server-Architektur<br />

➥ Modelle zur Verteilung einer Anwendung <strong>auf</strong> die Knoten einer<br />

<strong>verteilte</strong>n Systems<br />

➥ Vor allem bei Informationssystemen verwendet<br />

➥ Tier (engl. Schicht / Stufe) kennzeichnet einen unabhängigen<br />

Prozeßraum innerhalb einer <strong>verteilte</strong>n Anwendung<br />

➥ Prozeßraum kann, muß aber nicht physischem Rechner<br />

entsprechen<br />

➥ mehrere Prozeßräume <strong>auf</strong> einem Rechner möglich<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 22


1.1 Architekturmodelle ...<br />

2-Tier-Architektur<br />

➥ Client- <strong>und</strong> Server-Tier<br />

➥ Keine eigene Tier für die Anwendungslogik<br />

Client−Tier<br />

Server−Tier<br />

Präsentation<br />

Anwendungslogik<br />

(Verteilung <strong>auf</strong> Client−<br />

<strong>und</strong> Server−Tier variiert)<br />

Datenhaltung<br />

➥ Vorteil: einfach, performant<br />

➥ Nachteil: schwer wartbar, schlecht skalierbar<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 23<br />

1.1 Architekturmodelle ...<br />

3-Tier-Architektur<br />

Client−Tier<br />

Präsentation<br />

Middle−Tier<br />

Anwendungslogik<br />

Server−Tier<br />

Datenhaltung<br />

➥ Standard-Verteilungsmodell für einfache Web-Anwendungen:<br />

➥ Client-Tier: Web-Browser zur Anzeige<br />

➥ Middle-Tier: Web-Server mit Servlets / JSP / ASP<br />

➥ Server-Tier: Datenbank-Server<br />

➥ Vorteile: Anwendungslogik zentral administrierbar, skalierbar<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 24


1.1 Architekturmodelle ...<br />

(Animierte Folie)<br />

Beispiel: typische Internet-Anwendung<br />

DMZ<br />

Intranet<br />

Web−<br />

Client<br />

01<br />

Web−<br />

Client<br />

Internet<br />

Firewall<br />

01<br />

10<br />

01<br />

10<br />

00 11<br />

00 11<br />

00 11<br />

00 11<br />

000 111<br />

000 111<br />

000 111<br />

000 111<br />

Web−<br />

Server<br />

Firewall<br />

00 11<br />

00 11<br />

00 11<br />

00 11<br />

000 111<br />

000 111<br />

000 111<br />

000 111<br />

01<br />

10<br />

01<br />

10<br />

Web−<br />

Server<br />

00 11<br />

00 11<br />

00 11<br />

00 11<br />

000 111<br />

000 111<br />

000 111<br />

000 111<br />

Anwen−<br />

dungs−<br />

Server<br />

00 11<br />

00 11<br />

00 11<br />

00 11<br />

000 111<br />

000 111<br />

000 111<br />

000 111<br />

Daten−<br />

bank−<br />

Server<br />

Tier 1 Tier 2 Tier 3 Tier 4<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 25<br />

1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n<br />

Was ist der Unterschied zwischen einem <strong>verteilte</strong>n System <strong>und</strong><br />

einem Ein-/Mehrprozessorsystem?<br />

➥ Ein- bzw. Mehrprozessorsystem:<br />

➥ nebenläufige Prozesse: pseudo-parallel durch time sharing<br />

bzw. echt parallel<br />

➥ globale Zeit: alle Ereignisse in den Prozessen lassen sich<br />

zeitlich eindeutig ordnen<br />

➥ globaler Zustand: zur jeder Zeit kann ein eindeutiger Zustand<br />

des Systems angegeben werden<br />

➥ Verteiltes System<br />

➥ echte Parallelität<br />

➥ keine globale Zeit<br />

➥ kein eindeutiger globaler Zustand<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 26


1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n ...<br />

Globale Zeit<br />

➥ Auf Ein-/Mehrprozessorsystem<br />

➥ jedem Ereignis kann (zumindest theoretisch) ein eindeutiger<br />

Zeitstempel derselben lokalen Uhr zugeordnet werden<br />

➥ bei Mehrprozessorsystemen: Synchronisation am<br />

gemeinsamen Speicher<br />

➥ In <strong>verteilte</strong>n <strong>Systeme</strong>n:<br />

➥ viele lokale Uhren (eine pro Knoten)<br />

➥ exakte Synchronisation der Uhren (prinzipiell!) nicht möglich<br />

➥ ⇒ Reihenfolge von Ereignissen <strong>auf</strong> verschiedenen Knoten<br />

nicht (immer) eindeutig zu ermitteln<br />

➥ (vgl. spezielle Relativitätstheorie)<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 27<br />

1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n ...<br />

Eine Auswirkung der Verteiltheit<br />

➥ Szenario: zwei Prozesse beobachten zwei andere Prozesse<br />

x y z<br />

Beobachter A<br />

x y<br />

Prozess 1<br />

Prozess 2<br />

Beobachter B<br />

z<br />

z x<br />

y<br />

➥ Die Beobachter sehen die Ereignisse ggf. in unterschiedlicher<br />

Reihenfolge!<br />

➥ Problem z.B., falls die Beobachter replizierte Datenbanken <strong>und</strong><br />

die Ereignisse Datenbank-Updates sind<br />

➥ Replikate sind nicht mehr konsistent!<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 28


1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n ...<br />

Die Lamport’sche Kausalitätsrelation<br />

➥ In zwei Fällen kann die Reihenfolge von Ereignissen auch ohne<br />

globale Uhr bestimmt werden:<br />

➥ falls die Ereignisse im selben Prozeß sind, reicht lokale Uhr<br />

➥ das Senden einer Nachricht ist immer vor deren Empfang<br />

➥ Definition der Kausalitätsrelation → (happened before)<br />

➥ falls Ereignisse a, b im selben Prozeß i sind <strong>und</strong> t i (a) < t i (b)<br />

(t i : Zeitstempel mit Uhr von i), so gilt a → b<br />

➥ falls a das Senden einer Nachricht <strong>und</strong> b deren Empfang ist,<br />

so gilt a → b<br />

➥ falls a → b <strong>und</strong> b → c, so gilt auch a → c (Transitivität)<br />

➥ a → b bedeutet, daß b kausal von a abhängen kann<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 29<br />

1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n ...<br />

Beispiele<br />

Prozeß 1<br />

Prozeß 2<br />

c<br />

b<br />

g<br />

i<br />

k<br />

Prozeß 3<br />

a<br />

d<br />

f<br />

h<br />

Prozeß 4<br />

e<br />

j<br />

l<br />

➥ Hier gilt u.a.:<br />

➥ b → i <strong>und</strong> a → h (Ereignisse im selben Prozeß)<br />

➥ c → d <strong>und</strong> e → f (Senden / Empfang einer Nachricht)<br />

➥ c → k <strong>und</strong> a → i (Transitivität)<br />

➥ g ↛ l <strong>und</strong> l ↛ g: l <strong>und</strong> g sind nebenläufig (concurrent)<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 30


1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n ...<br />

Globaler Zustand: Ein Beispiel zur Motivation<br />

➥ Szenario: Peer-to-Peer-Anwendung, Prozesse senden sich<br />

gegenseitig Aufträge<br />

➥ Frage: wann kann die Anwendung terminieren?<br />

➥ Falsche Antwort: wenn kein Prozeß mehr einen Auftrag<br />

bearbeitet<br />

➥ Gr<strong>und</strong>: Aufträge können noch in Nachrichten unterwegs sein!<br />

Prozeß 1 Prozeß 2<br />

Auftrag<br />

idle<br />

idle<br />

➥ Weitere Anwendungen: <strong>verteilte</strong> Garbage-Collection, <strong>verteilte</strong><br />

Deadlock-Erkennung, ...<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 31<br />

1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n ...<br />

➥ Wie bestimmt sich der Gesamtzustand eines <strong>verteilte</strong>n Prozeßsystems?<br />

➥ naiv: Summe der Zustände aller Prozesse (falsch!)<br />

➥ Zwei Aspekte müssen beachtet werden:<br />

➥ Nachrichten, die noch in Übertragung sind<br />

➥ müssen mit in den Zustand <strong>auf</strong>genommen werden<br />

➥ Fehlen einer globalen Zeit<br />

➥ ein Globalzustand zur Zeit t kann nicht definiert werden!<br />

➥ Zustände der Prozesse beziehen sich immer <strong>auf</strong> lokale<br />

(<strong>und</strong> damit unterschiedliche) Zeiten<br />

➥ Frage: Bedingung an die lokalen Zeiten? ⇒ konsistente<br />

Schnitte<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 32


1.2 Zeit <strong>und</strong> Zustand in <strong>verteilte</strong>n <strong>Systeme</strong>n ...<br />

(Animierte Folie)<br />

Konsistente Schnitte<br />

➥ Ziel: bilde aus (nicht zeitgleich ermittelten) lokalen Zuständen<br />

einen sinnvollen globalen Zustand<br />

➥ Prozesse modelliert durch Folgen von Ereignissen:<br />

Prozeß 1<br />

Prozeß 2<br />

Prozeß 3<br />

konsistente Schnitte<br />

inkonsistenter Schnitt<br />

➥ Schnitt: betrachte in jedem Prozeß ein Präfix der Ereignisfolge<br />

➥ Konsistenter Schnitt:<br />

➥ falls der Schnitt den Empfang einer Nachricht beinhaltet, so<br />

beinhaltet er auch das Senden dieser Nachricht<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 33<br />

1.3 Middleware<br />

Verteilte Anwendung (VA)<br />

VA−<br />

Komponente<br />

VS−Knoten<br />

Netz<br />

VA−<br />

Komponente<br />

VS−Knoten<br />

Verteiltes System (VS)<br />

Verteilte Anwendung (VA)<br />

VA−<br />

Komponente<br />

Middleware<br />

VS−Knoten<br />

Netz<br />

VA−<br />

Komponente<br />

Middleware<br />

VS−Knoten<br />

Verteiltes System (VS)<br />

➥ VA nutzt VS für Kommunikation zwischen ihren Komponenten<br />

➥ VSe bieten i.a. nur einfache Kommunikationsdienste an<br />

➥ direkte Nutzung: Netzwerkprogrammierung<br />

➥ Middleware bietet intelligentere Schnittstellen<br />

➥ verbirgt Details der Netzwerkprogrammierung<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 34


1.3 Middleware ...<br />

➥ Middleware ist Schnittstelle zwischen <strong>verteilte</strong>r Anwendung <strong>und</strong><br />

<strong>verteilte</strong>m System<br />

➥ Ziel: Verbergen der Verteilungsaspekte vor der Anwendung<br />

➥ u.a. Zugriffs- <strong>und</strong> Orts-Transparenz<br />

➥ Middleware kann auch Zusatzdienste für Anwendungen bieten<br />

➥ starke Unterschiede bei existierender Middleware<br />

➥ Unterscheidung:<br />

➥ kommunikationsorientierte Middleware<br />

➥ (nur) Abstraktion von der Netzwerkprogrammierung<br />

➥ anwendungsorientierte Middleware<br />

➥ neben Kommunikation steht Unterstützung <strong>verteilte</strong>r<br />

Anwendungen im Mittelpunkt<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 35<br />

1.3.1 Kommunikationsorientierte Middleware<br />

➥ Fokus: Bereitstellung einer Kommunikationsinfrastruktur für<br />

<strong>verteilte</strong> Anwendungen<br />

➥ Aufgaben:<br />

➥ Kommunikation<br />

➥ Behandlung der Heterogenität<br />

➥ Fehlerbehandlung<br />

Anwendung<br />

Kommunikationsorientierte<br />

Middleware<br />

Betriebssystem / <strong>verteilte</strong>s System<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 36


1.3.1 Kommunikationsorientierte Middleware ...<br />

Entfernter Prozedur<strong>auf</strong>ruf (RPC, Remote Procedure Call)<br />

➥ Ermöglicht einem Client den Aufruf einer Prozedur in einem<br />

entfernten Server-Prozeß<br />

Client−<br />

Prozeß<br />

y = P(x);<br />

Eingabeparameter<br />

Resultate<br />

P(a) {<br />

...<br />

return b;<br />

}<br />

Server−<br />

Prozeß<br />

➥ Kommunikation nach Anfrage / Antwort-Prinzip<br />

Entfernter Methoden<strong>auf</strong>ruf (RMI, Remote Method Invocation)<br />

➥ Ermöglicht einem Objekt, Methoden eines entfernten Objekts<br />

<strong>auf</strong>zurufen<br />

➥ Prinzipiell sehr ähnlich zu RPC<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 37<br />

1.3.1 Kommunikationsorientierte Middleware ...<br />

Gemeinsame Gr<strong>und</strong>konzepte entfernter Aufrufe<br />

➥ Client <strong>und</strong> Server werden durch Schnittstellendefinition entkoppelt<br />

➥ legt Namen der Aufrufe, Parameter <strong>und</strong> Rückgabewerte fest<br />

➥ Einführung von Client-Stubs <strong>und</strong> Server-Stubs (Skeletons) als<br />

Zugriffsschnittstelle<br />

➥ werden automatisch aus Schnittstellendefinition generiert<br />

➥ IDL-Compiler, Interface Definition Language<br />

➥ sind verantwortlich für Marshalling / Unmarshalling<br />

sowie für die eigentliche Kommunikation<br />

➥ realisieren Zugriffs- <strong>und</strong> Ortstransparenz<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 38


1.3.1 Kommunikationsorientierte Middleware ...<br />

Funktionsweise der Client- <strong>und</strong> Server-Stubs (RPC)<br />

y=P(x)<br />

Client−Prozeß<br />

P(a) {<br />

}<br />

Client−Stub<br />

return b;<br />

Server−Skeleton<br />

while (true) {<br />

Argumente a in<br />

receive(m1);<br />

Nachricht m1 packen client=sender(m1);<br />

send(Server, m1);<br />

Argumente x aus Nach−<br />

richt m1 auspacken<br />

receive(Server, m2) ; y = P(x) ;<br />

Ergebnis b aus Nach−<br />

richt m2 auspacken<br />

}<br />

Server−Prozeß<br />

Ergebnis y in Nach−<br />

richt m2 packen<br />

send(client, m2);<br />

P(a) {<br />

...<br />

return b;<br />

}<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (1/13) 39<br />

Client/Server-Programmierung<br />

WS 2013/2014<br />

25.10.2013<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong><br />

rolanda.dwismuellera@duni-siegena.de<br />

Tel.: 0271/740-4050, Büro: H-B 8404<br />

Stand: 8. November 2013<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) i


1.3.1 Kommunikationsorientierte Middleware ...<br />

Basis von RMI: Das Proxy-Pattern<br />

➥ Client arbeitet mit Stellvertreterobjekt (Proxy) des eigentlichen<br />

Serverobjekts<br />

➥ Proxy <strong>und</strong> Serverobjekt implementieren dieselbe Schnittstelle<br />

➥ Client kennt / nutzt lediglich diese Schnittstelle<br />

<br />

Schnittstelle<br />

Client Proxy Objekt<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 40<br />

1.3.1 Kommunikationsorientierte Middleware ...<br />

Abl<strong>auf</strong> eines entfernten Methoden<strong>auf</strong>rufs<br />

Client−Rechner<br />

Server−Rechner<br />

Client ruft<br />

eine<br />

Methode<br />

<strong>auf</strong><br />

Client<br />

Proxy<br />

Client−BS<br />

Selbe Schnitt−<br />

stelle wie beim<br />

Objekt<br />

Skeleton ruft<br />

dieselbe<br />

Methode für<br />

das Objekt <strong>auf</strong><br />

Server<br />

Skeleton<br />

Server−BS<br />

Objekt<br />

Status<br />

Methode<br />

Schnitt−<br />

stelle<br />

Netzwerk<br />

Verpackter Aufruf wird über das Netzwerk weitergegeben<br />

(Objekt−ID, Methodenname, Parameter)<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 41


1.3.1 Kommunikationsorientierte Middleware ...<br />

Erstellung eines Client/Server-Programms<br />

Server−<br />

Prozeduren<br />

Compiler<br />

Server<br />

Server−Skel.<br />

Schnittstellen−<br />

beschreibung<br />

IDL−<br />

Compiler<br />

Client−Stubs<br />

RPC/RMI<br />

L<strong>auf</strong>zeit−<br />

Bibliothek<br />

Client−<br />

Programm<br />

Compiler<br />

Client<br />

➥ Gilt prinzipiell für alle Realisierungen entfernten Aufrufe<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 42<br />

1.3.2 Anwendungsorientierte Middleware<br />

➥ Setzt <strong>auf</strong> kommunikationsorientierter Middleware <strong>auf</strong><br />

➥ Erweitert diese um:<br />

➥ L<strong>auf</strong>zeitumgebung<br />

➥ Dienste<br />

➥ Komponentenmodell<br />

Anwendungs−<br />

komponente<br />

Dienste<br />

Anwendungs−<br />

komponente<br />

Komponentenmodell<br />

L<strong>auf</strong>zeitumgebung<br />

Anwendungs−<br />

komponente<br />

Kommunikationsinfrastruktur<br />

Betriebssystem / <strong>verteilte</strong>s System<br />

Dienste<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 43


1.3.2 Anwendungsorientierte Middleware ...<br />

L<strong>auf</strong>zeitumgebung<br />

➥ Ressourcenverwaltung<br />

➥ Pooling von Prozessen, Threads, Verbindungen<br />

➥ Steuerung der Nebenläufigkeit<br />

➥ Verbindungsverwaltung<br />

➥ Verbesserung der Verfügbarkeit<br />

➥ Replikation, Clustering<br />

➥ Sicherheitsmechanismen<br />

➥ Authentifizierung <strong>und</strong> Autorisierung<br />

➥ Vertraulichkeit <strong>und</strong> Integrität<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 44<br />

1.3.2 Anwendungsorientierte Middleware ...<br />

Dienste<br />

➥ Namensdienst (Verzeichnisdienst)<br />

➥ Zuordnung von Namen zu Referenzen (Adressen)<br />

➥ Sitzungsverwaltung<br />

➥ Transaktionsverwaltung<br />

➥ Persistenzdienst<br />

➥ z.B. objektrelationaler Mapper (OR-Mapper)<br />

Komponentenmodell<br />

➥ Komponentenbegriff, Schnittstellenverträge, L<strong>auf</strong>zeitumgebung<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 45


1.4 Java RMI<br />

➥ Java RMI ist fester Bestandteil von Java<br />

➥ erlaubt Nutzung entfernter Objekte<br />

➥ Stub- <strong>und</strong> Skeleton-Klassen werden automatisch aus Schnittstellendefinition<br />

(Java Interface) generiert<br />

➥ ab JDK 1.5 dynamisch zur L<strong>auf</strong>zeit<br />

➥ Namensdienst: RMI Registry<br />

➥ Verteilte Garbage-Collection<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 46<br />

1.4 Java RMI ...<br />

Beispiel: Hello World<br />

Client−JVM<br />

Interface<br />

interface Hello {<br />

String sayHello();<br />

}<br />

Server−JVM<br />

Client−Klasse<br />

class HelloClient {<br />

...<br />

Hello h;<br />

...<br />

s = h.sayHello();<br />

...<br />

Server−Klasse<br />

class HelloServer<br />

implements Hello {<br />

String sayHello() {<br />

return "Hello World";<br />

}<br />

...<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 47


1.4 Java RMI ...<br />

Hello-World Interface<br />

import java.rmi.Remote;<br />

import java.rmi.RemoteException;<br />

public interface Hello extends Remote {<br />

}<br />

String sayHello() throws RemoteException;<br />

Marker−Schnittstelle ,<br />

enthält keine Methoden,<br />

markiert Interface als<br />

RMI−Schnittstelle<br />

RemoteException zeigt<br />

Fehler im entfernten<br />

Objekt bzw. bei Kommu−<br />

nikation an<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 48<br />

1.4 Java RMI ...<br />

Hello-World Server<br />

import java.rmi.*;<br />

import java.rmi.server.UnicastRemoteObject;<br />

public class HelloServer extends UnicastRemoteObject<br />

implements Hello {<br />

public HelloServer() throws RemoteException {<br />

super();<br />

}<br />

public String sayHello() {<br />

return "Hello World!"; Remote Methode<br />

}<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 49


1.4 Java RMI ...<br />

Hello-World Server ...<br />

}<br />

public static void main(String args[]) {<br />

}<br />

try {<br />

}<br />

HelloServer obj = new HelloServer();<br />

catch (Exception e) {<br />

}<br />

Naming.rebind("rmi://localhost/Hello−Server", obj);<br />

System.out.println("Error: " + e.getMessage());<br />

e.printStackTrace();<br />

Erzeugen des<br />

Server−Objekts<br />

Registrieren des Server−Objekts<br />

unter dem Namen "Hello−Server"<br />

beim Name−Server (RMI−Registry,<br />

lokaler Rechner, Port 1099)<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 50<br />

1.4 Java RMI ...<br />

Hello-World Client<br />

import java.rmi.*;<br />

public class HelloClient {<br />

public static void main(String args[]) {<br />

try {<br />

Objektreferenz vom<br />

Name−Server holen<br />

(Hello)Naming.lookup("rmi://bspc02/Hello−Server");<br />

String message = obj.sayHello();<br />

System.out.println(message);<br />

}<br />

catch (Exception e) {<br />

...<br />

} } } Hello obj =<br />

Aufruf der Methode<br />

des entfernten Objekts<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 51


1.4 Java RMI ...<br />

Übersetzen <strong>und</strong> Starten des Systems<br />

HelloClient.java<br />

Hello.java<br />

HelloServer.java<br />

javac<br />

javac<br />

HelloClient.class Hello.class Hello.class HelloServer.class<br />

Client−Seite<br />

bis JDK 1.4<br />

rmic<br />

Server−Seite<br />

HelloServer_Stub.class<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 52<br />

1.4 Java RMI ...<br />

Parameterübergabe<br />

➥ Übergabe von Parametern an Remote-Methoden erfolgt<br />

➥ entweder über call-by-value<br />

➥ für Werttypen <strong>und</strong> serialisierbare Objekte<br />

➥ oder über call-by-reference<br />

➥ für Objekte, die Remote implementieren<br />

➥ Entscheidung wird z.T. erst zur L<strong>auf</strong>zeit getroffen!<br />

➥ Rückgabe des Ergebnisses folgt selben Regeln wie Parameterübergabe<br />

Roland Wismüller<br />

<strong>Betriebssysteme</strong> / <strong>verteilte</strong> <strong>Systeme</strong> Client/Server-Programmierung (2/13) 53

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!