2 auf 1 - Betriebssysteme und verteilte Systeme
2 auf 1 - Betriebssysteme und verteilte Systeme
2 auf 1 - Betriebssysteme und verteilte Systeme
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