Folien des zweiten BS

Werbung
Wiederholung
letzte Veranstaltung
Verteilte Anwendungen
Seminar
05.01.2005
Seminar VA (04/05)
S (
)
Lernziele
69
Einführung und Motivation
TCP/IP-Protokollsatz
– Grundlagen Schichtenarchitektur
– Netzwerkschnittstelle
– Netzwerkschicht: IP
• Konzepte (Kapselung, Funktionen)
• Adressierung (Namensräume, Adressen, 141.24.35.254)
• Routing
– Transportschichte
• Protokoll-Port-Konzept
• UDP/TCP
)
Client/Server-Modell
Client/Server-Modell
P2P-Modell
Socket-API
– Adressstruktur
– Kommunikationsmodelle
( Zwei Beispiele...)
Remote Procedure Call
Java Remote Method Invocation
Seminar VA (04/05)
S (
Seminar VA (04/05)
S (
)
(Internet)
Seminar VA (04/05)
S (
)
0
Erweitertes Client-/Server-Modell
Kommunikations-Modell zwischen Client und Server
Die Kommunikation erfolgt in Form von Frage-Antwort-Paaren.
Es besteht eine asymmetrische Kommunikationsbeziehung, die sich im Prozeßkonzept
widerspiegelt.
a) Der Client schickt eine Anforderung (Request) an einen Server.
b) Der Server behandelt die Anforderung und schickt eine Antwort (Response) mit
Ergebnis.
Erweiterung des reinen Client-Server-Modells auf mehr als zwei Teilnehmer:
Definition des Clients bleibt bestehen:
Ein Client ist die auf einen Dienst bezogene originäre/ursprüngliche Quelle der
Anfrage und letzte Senke der Antwort.
Achtung!:
DNS-Aufrufe oder ähnliche systemfremde Hilfsmittel gehören nicht in die
Betrachtung des Modells!
Request
Client
Delegation von Teilaufgaben
Nachrichtenketten
Server
Response
Asymmetrie auch in der Kommunikationsform:
a) Der Client überliefert asynchron (zu einem beliebigen Zeitpunkt) eine Anforderung
an einen Server.
b) Der Server antwortet synchron (in einem bestimmten Zeitintervall).
S (
Seminar VA (04/05)
)
Seminar VA (04/05)
Peer-to-Peer
Peer-to-Peer
Idee
Definition
Zuletzt häufig genutzter Name ( Buzzword… )
Name „flacher“ / „anarchistischer“ Systeme
Eigentlich eine Systemarchitektur (CDK: „Peer-Process“)
Zentrale Probleme:
– Finden von Ressourcen (Lokalisierung):
• Andere Knoten
• Dienste anderer Knoten
– Sinnvolle Weiterleitung von Anfragen/Daten (Routing)
Seminar VA (04/05)
S (
)
5
S (
)
4
Kommunikationsmodell asynchron (request-response)
Rollenmodell: nur eine Rolle
– symmetrisches Verhalten, alle Teilnehmer können prinzipiell das gleiche
Organisationsmodell: vollkommen unstruktiert
– ausser Bootstrapping-Punkt kein Kontextwissen und keine bekannte Struktur
Per se keine Bezeichner, lediglich Namen
– Bezeichner können verteilt-algorithmisch eingeführt werden (Hashwerte...)
– Strukturen können verteilt-algorithmisch eingeführt werden (dynamische
Supernodes...).
Bessere Bezeichnungen:
– Collaborative Systems, dezentrale verteilte Systeme, kooperative Systeme
Seminar VA (04/05)
S (
)
6
Berkeley-Socketinterface - API für verteilte
Anwendungen
⇒
Socket - API
zur Einordnung der Socket-API
Applikation
Anwendungsprotokolle
Socket-API
Transport
Internet Protokoll
Netzwerk Schnittstelle
Seminar VA (04/05)
S (
Seminar VA (04/05)
S (
)
Struktur der Socket-Systemaufrufe bei verbindungslosem
Protokoll
Ein Socket ist ein Kommunikationsendpunkt innerhalb eines
Kommunikationsbereiches.
Ein Kommunikationsbereich spezifiziert eine Adreßstruktur und ein Protokoll.
– Adreßstruktur: z.B. Internet → Host/Port
– Protokoll: z.B. TCP, UDP
Die Kommunikationsverbindung zwischen zwei Sockets ist durch ein SocketPaar gekennzeichnet.
Ein Datenaustausch erfolgt zwischen zwei Sockets desselben
Kommunikationsbereiches.
Eine Kommunikationsbeziehung ist immer durch folgendes Fünfertupel
definiert:
(protocol, local-addr, local-process, foreign-addr, foreign-process)
Seminar VA (04/05)
– Ein-/Ausgabe über das Netz aber komplizierter als
Datei-Ein-/Ausgabe, da Interaktion zwischen zwei getrennten Prozessen
Unterstützung verbindungsloser und verbindungsorientierter Kommunikation
)
Socket – API (II)
Die Netzwerkfunktionalität ist im allgemeinen in das UNIX-System integriert.
Die Socket-API stellt entsprechende API-Funktionen bereit.
– Systemrufe
– Bibliotheksfunktionen
Orientierung an Unix-Dateiarbeit
– Arbeit über Deskriptoren
– Ein-/Ausgabe über das Prinzip: create, open, read, write, close
S (
)
9
Server
Client
socket()
socket()
bind()
bind()
recvfrom()
sendto()
sendto()
recvfrom()
close()
close()
Seminar VA (04/05)
S (
)
0
Struktur der Socket-Systemaufrufe bei verbindungslosem
Protokoll mit connect ()
Client
Server
socket()
socket()
bind()
bind()
Struktur der Socket-Systemaufrufe bei
verbindungsorientiertem Protokoll
Client
Server
socket()
socket()
bind()
listen()
connect()
accept()
connect()
read()
write()
write()
read()
close()(accept)
close()
send()
recvfrom()
recv()
sendto()
close()
close()
Seminar VA (04/05)
S (
)
close()(socket)
Seminar VA (04/05)
Socketserver mit Python
Python Server
Ganz einfaches Beispiel...
Erklärungen
#
# based on Python 2.1.1. documentation chapter 7.2.2
#
import socket
HOST = ''
# Symbolischer Name für den localhost
PORT = 8330
# beliebige Portnummer (über 1024!)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
(1)
s.bind((HOST, PORT))
(2)
(3)
s.listen(1)
(4)
conn,addr = s.accept()
while 1:
(5)
data = conn.recv(1024)
if not data: break
(6)
conn.send(data)
(7)
conn.close()
Seminar VA (04/05)
S (
)
S (
)
(1) Einen Socket vom Betriebssystem anfordern
– AF_INET Adressfamilie Internet (IP...)
– SOCK_STREAM Stream, also TCP-Socket
(2) Server an vorgegebenen Port (>1024!) binden
(3) Auf eingehende Verbindung für den Socket warten
(4) Eingegangenen Verbindungswunsch akzeptieren
(5) Eingehende Daten einlesen
(6) Daten zurückschicken
(7) Verbindung schließen
Seminar VA (04/05)
S (
)
4
...und der Client
Socket-Server mit Java
auch in Python, analog zum Server
etwas komplizierteres Beispiel, mit Exception-Handling...
#
# based on Python 2.1.1. documentation chapter 7.2.2
#
(1) Variablen vorbereiten
(2) Server-Port festlegen
(3) Mit Port verbinden und auf eingehende Verbindungswünsche warten
(4) Eingehende Verbindung akzeptieren
(5) BufferedReader an den eingehenden Datenstrom hängen
(6) PrintWriter für die Ausgabe
(7) Eingehende Nachricht auslesen
(8) Bestätigung schicken
(9) Socket wieder schließen
import socket
HOST = 'localhost' # Rechner, auf dem der Server läuft
PORT = 8330
# Port, auf welchem Server lauscht
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', data
Seminar VA (04/05)
S (
)
5
Seminar VA (04/05)
S (
)
TCPSocketServer.java (1)
TCPSocketServer.java (2)
Vorbereitungen...
Socket öffnen, Verbindung annehmen
import java.io.*;
import java.net.*;
// o et aufma en und an Port binden
tr. {
server trea oc et = ne
erver oc et(serverPort);
/ catch (01E2ception e) {
S.stem.err.println(3TCPSocketServer4 5ehler beim Binden3);
S.stem.err.println(3E2ception6essage4 3 7 e.get6essage());
S.stem.e2it(8);
/
/** Einfache Server-Klasse, die einen Socket oeffnet, auf diesem lauscht,
eingehende Pakete ausdruckt und eine Bestaetigung zuruecksendet */
class TCPSocketServer {
public static void main(String[] args){
int serverPort=0;
ServerSocket serverStreamSocket = null;
Socket streamSocket = null;
BufferedReader bufReader = null;
PrintWriter printWriter = null;
String nachricht;
String bestaetigung;
(1)
// Port ist der erste beim Aufruf angegebene Parameter
serverPort = Integer.decode(args[0]).intValue();
Seminar VA (04/05)
S (
)
6
(2)
// An ommende erbindung anne men
tr. {
strea oc et = server trea oc et.acce t();
/ catch (01E2ception e) {
S.stem.err.println(3TCPSocketServer4 5ehler beim .accept3);
S.stem.err.println(3E2ception6essage4 3 7 e.get6essage());
S.stem.e2it(8);
/
Seminar VA (04/05)
S (
)
(3)
(4)
TCPSocketServer.java (3)
TCPSocketServer.java (4)
Socketoperationen durchführen...
// ein ommenden und ausge enden atenstrom orbereiten
tr. {
u!"eader = ne9 BufferedReader(
ne9 0nputStreamReader(streamSocket.get0nputStream()));
rint#riter = ne9 PrintWriter(
ne9 Buffered1utputStream(streamSocket.get1utputStream(),
:;<), false);
// in ommende a ri t aus esen
nac$ric$t = u!"eader.read%ine();
S.stem.out.println(nachricht);
(5)
(6)
(7)
// estaetigung senden
bestaetigung = 3=achricht4 37nachricht73 angekommen>3;
rint#riter. rintln( estaetigung);
rint#riter.!lus$();
Seminar VA (04/05)
Und alles wieder zumachen
S (
)
/
/
// aurfraeumen
printWriter.close();
bufReader.close();
strea oc et.close();
/ catch (01E2ception e) {
S.stem.err.println(3TCPSocketServer4 5ehler>3);
S.stem.err.println(3E2ception6essage4 3 7 e.get6essage());
e.printStackTrace();
/
(9)
(8)
9
Seminar VA (04/05)
S (
)
TCPSocketClient.java
TCPSocketClient.java (1)
der zugehörige Client
Variablen und Parameter festlegen...
90
import java.io.*;
import java.net.*;
(1) Variablen vorbereiten
(2) Server-Host,
(3) Server-Port und
(4) die zu versendende Nachricht aus den Aufrufparametern festlegen
(5) TCP-Socket zum TCPSocketServer öffnen
(6) Aus- (DataOutputStream [ Bytes!]) und
(7) Eingabedatenströme (BufferedReader) verknüpfen
(8) Nachricht Byteweise übermitteln
(9) Bestätigung annehmen und ausgeben
(10)Socket wieder schließen
Seminar VA (04/05)
S (
)
9
/** Einfache Client-Klasse, die einen Socket zu einem Server oeffnet, eine
=achricht sendet, eine Bestaetigung empf?ngt und diese ausgibt */
public class TCPSocketClient {
public static void main(String[] args) {
String server@ost = null;
int serverPort = 0;
Socket streamSocket = null;
Aata1utputStream outStream = null;
BufferedReader bufReader = null;
String nachricht;
(1)
server&ost = args[0];
serverPort = Integer.decode(args[’]).intValue();
nac$ric$t = args[(];
(2)
(3)
(4)
Seminar VA (04/05)
S (
)
9
TCPSocketClient.java (2)
TCPSocketClient.java (3)
ServerSocket öffnen...
Senden, empfangen und alles zumachen...
// o et um !P o
tr. {
strea oc et = ne
et er er aufma
en
oc et(server&ost) serverPort);
(5)
//... und die Aatenstroeme anbinden4
out trea = ne9 Aata1utputStream(streamSocket.get1utputStream());
u!"eader = ne9 BufferedReader(ne9
0nputStreamReader(streamSocket.get0nputStream()));
/
// "e ner des er ers unbe annt#
catch ()nkno*nHostE+ception e) {
S.stem.err.println(3TCPSocketClient4 3 7
30P-Bdresse konnte nicht aufgeloest 9erden4 3 7 server@ost);
S.stem.err.println(36essage4 3 7 e.get6essage());
S.stem.e2it(8);
// irgendein anderer $e er
/ catch (IOE+ception e) {
S.stem.err.println(3TCPSocketClient4 5ehler43);
S.stem.err.println(36essage4 3 7 e.get6essage());
S.stem.e2it(8);
/
S (
Seminar VA (04/05)
)
(6)
(7)
tr. {
// a ri t senden% diesma dire t in den &testrom
out trea . rite*+tes(nac$ric$t);
out trea . rite*+te(,-n,);
// estaetigung em’fangen
+ste .out. rintln(. erver/ . 0 u!"eader.read%ine());
outStream.close();
bufReader.close();
strea oc et.close();
/ catch (01E2ception e) {
S.stem.err.println(3TCPSocketClient4 3 7
301E2ception4 3 7 e.get6essage());
e.printStackTrace();
/
/
/
9
Seminar VA (04/05)
S (
(8)
(9)
(10)
)
94
Architekturmodelle verteilter Anwendungen
Was sind verteilte Anwendungen?
Peer-to-Peer
(Modelle)
Client/Server
Internet
UI
application
Verteilte Anwendungen
App
application
DB
presentation
session
transport
transport
internet
network
Data link
Network
interface
TCP/IP
App.-protokolle
Plattformen für verteilte Anwendungen
Middleware
(Verteilte Systeme)
Betriebssystem
Netzwerk
Protokolle
Cluster/Grids
mgr.
Internet
qmast.
Server
3-Tier
RZ
Client
execD
Hardware
physical
ISO/OSI
Internetcomputing
Verteiltes Rechnen
RZ
Kunden
Seminar VA (04/05)
S (
)
95
Seminar VA (04/05)
S (
)
96
Anwendungsfelder verteilter Anwendungen
Verteilte Anwendungen
Portale
Webapps
P2PComputing
Marktplätze
VA
Online-Banking
Online-Buchung
DSM
#Cruncher/
Cluster
Verteilte
Systeme
Vert.
BS
Vert.
Filesysteme
Meta-/ Distributed-/
Internet-Computing
Plattformen
Ressourcenanbindung
Geldautomaten
EAI
SOAP
DB-Anbindung
Flugbuchung
Steuern,
Messen, Regeln
SCM
Backoffice
InformationsKooperationssysteme
Seminar VA (04/05)
J2EE
Konnektoren
CORBA
„.NET“
„Agentensysteme“
S (
)
Was ist der Unterschied zu verteilten Systemen?
Ein verteiltes System ist ein System, dessen Daten und dessen
Funktionskomponenten auf mehrere, zu einem Netz zusammengeschlossene
Rechner verteilt sind.
Also:
Bei verteilten Systemen bezieht sich die Verteilung in der Regel auf die
Funktionalität unterhalb der Anwendung!
9
Seminar VA (04/05)
Aufgaben, Anforderungen und Ziele verteilter
Anwendungen
Eine verteilte Anwendung besteht aus mehreren nebenläufigen, untereinander
kommunizierenden Prozessen, die gemeinsam die Leistung der verteilten
Anwendung erbringen.
Aufgaben: Dezentralisierung von Programmsystemen
– Dezentralisierung der Datenverwaltung
– Dezentrale Verarbeitung von Daten
– Entfernter Zugriff auf Daten
– Entfernter Eingriff auf die Datenverarbeitung
– Unterstützung der Anwenderkommunikation
Anforderungen:
– Zuverlässigkeit
– Geschwindigkeit
– Transparenz
– Sicherheit
Ziele:
– Ressourcen-Sharing
– Informations-Sharing
S (
)
9
Problematik verteilter Anwendungen
VA zeichnen sich durch sehr hohe Komplexität aus:
•
Systemumfang
•
Heterogene Teilsysteme
•
Kommunikation über das Netzwerk
- Ausfall des Netzes
- Fehler bei der Übertragung
- Adressierung
Verteilte Anwendungen stellen auf Basis der Netzwerke spezielle Dienste bereit
Seminar VA (04/05)
S (
)
99
Seminar VA (04/05)
S (
)
00
Mittel zur Lösung
Mittel zur Lösung
Netzwerktransparenz
Kommunikation, Interoperabilität
Die Kommunikation über das Netzwerk birgt Probleme, von denen abstrahiert
werden soll:
Fehleranfälligkeit:
– Erkennung, Übertragungswiederholung, Reihenfolgegenauigkeit etc. TCP
Adressauflösung/ Ortstransparenz
– Host-/ Prozessadresse auflösen, Migration und Replikation erlauben Namens- und Lokalisierungsdienste
Zugriffstransparenz
– Programmierung als gäbe es keine örtliche Trennung lokale
Proxyobjekte
Seminar VA (04/05)
S (
)
Kommunikationsmechanismen:
– IPC
– RPC
– RMI
Interoperabilität: Verbindung heterogener Einzelsysteme bedarf:
– Standardisierter Protokolle
– Externer Datendarstellung (XDR, CDR)
– Normierter Schnittstellen
0
Seminar VA (04/05)
Erinnerung: Socket – API
(protocol, local-addr, local-process, foreign-addr, foreign-process)
Wunsch nach höherer Abstraktion von der Netzprogrammierung und nach
Transparenz der Datendarstellung
S (
)
)
0
Remote Procedure Call
Ein Socket ist ein Kommunikationsendpunkt innerhalb eines
Kommunikationsbereiches.
Ein Datenaustausch erfolgt zwischen zwei Sockets
Die Verbindung zwischen zwei Sockets ist durch ein Socket-Paar
gekennzeichnet.
Eine Socket-Kommunikationsbeziehung ist immer durch folgendes
Fünfertupel definiert:
Seminar VA (04/05)
S (
0
Erweiterung des Prozeduraufruf-Mechanismus von Einzel-Rechnern auf
verteilte Bearbeitungsumgebungen
Der Server bietet ein oder mehrere Interface(s) für die Anforderung seiner
Dienste (in Form von entfernten Prozeduraufrufen) an.
Kapselung von Client-Requests in einfache (entfernte) Prozeduraufrufe
Für den Programmierer ist nur ein geringer Anteil Netzprogrammierung
erforderlich, im Vordergrund steht die Gestaltung der Client/ServerAnwendung.
Unterstützung durch RPC-Laufzeitsystem
– die Umwandlung/Übersetzung von auszutauschenden Parametern zwischen
verteilten (heterogenen) Komponenten übernimmt,
– Transferdienstbesonderheiten vor der Anwendung verdeckt
(z.B. Timeouts und Retransmission)
Seminar VA (04/05)
S (
)
04
Interprozesskommunikation:
Ablauf eines RPC
lokal
Client
Procedures
Return
Client Process
Interface
verteilt
(1)
Server Process
Client
Return
Interface
Client Stub
(2)
S (
)
05
Seminar VA (04/05)
RPC-Generator/Compiler
Server-Stub
Header
Compiler
Client-Stub
(Objekt)
ClientObjektdateien
ServerRoutinen
Server-Stub
Compiler
RPCBibliothek
RPCBibliothek
ServerObjektdateien
Linker
Linker
Client
Server
Seminar VA (04/05)
S (
)
S (
)
06
Distributed Computing Environment
DCE
RPC-Spezifikationsdatei
Header
RPCLaufzeitsystem
(3)
(allgemein)
Header
(4)
(8)
RPCLaufzeitsystem
RPC/RMI-Entwicklungsprozess
Client-Stub
(7)
(9)
RPC Runtime Library
Seminar VA (04/05)
ClientRoutinen
ServerStub
Server Stub
RPC Runtime Library
(5)
(6)
Call
Return
Network Messages
Client-Stub
(10)
ClientStub
Manager
Call
ServerRoutinen
ClientRoutinen
Call
Server-Stub
(Objekt)
Für RPC wird Laufzeitumgebung benötigt.
„The Open Group“ (Open Software Foundation) DCE
– Tools und Services zur Unterstützung, Nutzung und Wartung verteilter
Anwendungen in heterogenen Rechnerumgebungen:
Vereinfachung der Entwicklung und des Managements durch Tools
Skalierbarkeit durch Zellenkonzept
Struktur: übersichtliches Modell und Zugang zu globalem Computing
Env.
Portabilität und Interoperabilität (Umsetzung für viele Plattformen!)
Data Sharing zwischen allen Nutzern
Integraler Bestandteil vieler BS und „Mutter aller Middleware“
Aber: aus marktpolitischen Gründen hat sich DCE nicht durchgesetzt, ist
allerdings Vorbild für viele folgende Systeme verteilter Anwendungen.
0
Seminar VA (04/05)
S (
)
0
Anwendungsentwicklung mit dem DCE-RPC
DCE - Architektur
UUID Generator
Editor
Anwendungen
DCE Diskless
Support Service
DCE
Security
Service
IDL File
IDL Compiler
Zukünftige
Dienste
Client
Stub
DCE Distributed File Service
DCE
Distributed
Time Service
DCE
Directory
Service
Management
Editor
Client
Stub
RPC
Library
Server Files
RPC
Library
Server
Objects
Linker
Linker
Client
Server
09
S (
Seminar VA (04/05)
A Simple Interface Definition
/* FILE NAME: arithmetic.idl
*/
/* This Interface Definition Language file represents
*/
/* a basic procedure that remote procedure call can use */
[
uuid(C985A380-255B-11C9-A50B-08002B0ECEF1),
version(1.0)
]
interface arithmetic
/* interface name */
{
const long ARRAY_SIZE = 10;
Header
C-Compiler
Client
Object
Betriebssystem und Transferdienste
)
Header
C-Compiler
DCE Threads
S (
Editor
Client File
Zukünftige
Dienste
DCE Remote Procedure Call
Seminar VA (04/05)
Server
Stub
Header
)
Knoten A
„Server?“
Cell Directory
Server
Client
„Am Knoten X“
Knoten Z
„Request“
„Server?“
„Am
Port y“
Port y
Server
}
Anmelden
Port *
RPC
Daemon
* well known
Knoten X
Seminar VA (04/05)
0
Binding
typedef long long_array[ARRAY_SIZE];
void sum_arrays(
[in] long_array a,
[in] long_array b,
[out] long_array c
);
S (
)
Server
Stub
Seminar VA (04/05)
S (
)
Zusammenfassung
RPC-Laufzeitprozess
(DCE)
Client
Server
9. Ausführen
Prozedur
2. Aufruf
Prozedur
15. Entgegennahme
Ergebnis
Client Stub
Server Stub
4. Verpacken
Aufruf nach
RPC-Protokoll
14. Entpacken
Daten nach
RPC-Protokoll
3. Finden
Server über CDS
und RPC-Daemon
10. Übergabe
Ergebnis
8. Übernahme
Prozeduranforderung
11. Verpacken
Ergebnis nach
RPC-Protokoll
Server bei CDS
und RPC-Daemon
RPC Runtime
RPC Runtime
5. Übertragung
Daten zu
Partner-RPCRuntime-Instanz
13. Warten und
Entgegennahme
von Daten für
Client
Seminar VA (04/05)
12. Übertragung
Daten zu
Partner-RPCRuntime-Instanz
S (
7. Entpacken
Daten nach
RPC-Protokoll
1. Anmelden
6. Warten und
Entgegennahme
von Daten für
Server
Kommunikation auf der Basis interagierender Prozesse
transparente Interoperabilität in heterogener Umgebung
gute Skalierbarkeit durch das Cell-Konzept und die Implementierung einzelner
Dienste, wie zum Beispiel Cell (Global) Directory Service
zahlreiche Werkzeuge und Dienste, beispielsweise ein konzeptionell ausgefeilter
und umfangreich implementierter Security Service
Ortstransparenz durch Cell Directory Service
Lösungen für die Einbindung von Legacy Systems, zum Beispiel über die
Integration traditioneller Transaktionsmonitore, wie CICS
Programmierung: Anlehnung an C (mit anderen Sprachen aber auch möglich!)
Aber: CORBA hat im Bereich der standardisierten Plattformen für offene verteilte
Systeme und Anwendungen eine größere Verbreitung gefunden und SOAP
verdrängt zur Zeit langsam aber sicher CORBA
)
Seminar VA (04/05)
S (
)
4
Remote Method Invocation (RMI)
Pause
Seminar VA (04/05)
S (
)
5
Remote Method Invocation entspricht dem RPC in Java
Der Client einer Distributed Object Application arbeitet mit Referenzen auf
entfernte Objekte. (Stubs!)
RMI führt eine strenge Trennung in Interface und Klassen ein
Lokalisierung entfernter Objekte auf zwei Wegen:
– RMI naming service
– Rückgabe eines Methodenaufrufs
Die Kommunikation zwischen Client und Server stellen Surrogate-Objekte
(Stubs und Skeletons) sicher.
RMI benutzt Object Serialization für das „Einpacken“ (Marshal) und die
Übergabe bzw. das „Auspacken“ (Unmarshal) der Parameter.
Seminar VA (04/05)
S (
)
6
RMI-System-Architektur
Stubs, Parameterübergabe, Exception Handling
Der Client kommuniziert mit dem Server-Stub (Proxy), der die gleichen
Interfaces wie der zugehörige Server zur Verfügung stellt.
Stubs werden über das Werkzeug rmic generiert.
Als Parameter oder Rückgabewerte kommen alle Werte beziehungsweise
Objekte in Frage, die serialisierbar sind. Darunter fallen alle BasisDatentypen sowie Objekte, die das Interface
java.io.Serializable implementieren.
Der Client muß Vorkehrungen zum Abfangen der
java.rmi.RemoteException treffen.
Seminar VA (04/05)
S (
)
Eine entfernte Objektreferenz kann mit Hilfe von URL-basierten Methoden
der Klasse java.rmi.Naming verwaltet werden.
Das RMI-System stellt einen einfachen Name Server zur Ermittlung von
Objektreferenzen auf einer Maschine bereit.
Beispiel:
Server
String url = "//einstein:8329/HelloServer";
Client
try {
Hello objRef = (Hello)java.rmi.Naming.lookup(url);
} catch (Exception e) {...}
Seminar VA (04/05)
S (
)
Stub
Skeleton
Remote Reference Layer
Remote Reference Layer
Transport
Transport
Stubs und Skeltons: Abbildung der Objektreferenzen, Marshal
Remote Reference Layer: Semantik der Methodenaufrufe, zum Beispiel ein
Objekt oder mehrere Verbindungen, ständig laufender Server oder zu
startender Server
Transport Layer: Management der Verbindung
S (
)
Sicherheitsmechanismen für den entfernten Zugriff
String url = "//einstein:8329/HelloServer";
try {
HelloImpl obj = new HelloImpl();
java.rmi.Naming.rebind(url, obj);
} catch (Exception e) {...}
Remote Object
Seminar VA (04/05)
Lokalisierung von entfernten Objekten
Client
9
Für die Nutzung von RMI muss ein Security Manager vorhanden sein.
Zum Beispiel:
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
Ab JDK 1.2 müssen in einem Security Policy File die Rechte für den Zugriff auf
Ressourcen vereinbart werden.
Zum Beispiel:
grant {
permission java.net.SocketPermission “*:1024-65535“,
“connect, accept“;
};
Seminar VA (04/05)
S (
)
0
RMI: Entwicklungsprozeß
Remote Interface
Jedes Remote Interface erweitert das Interface java.rmi.Remote.
Jede entfernte Methode muß die Exception
java.rmi.RemoteException im throws-Statement deklarieren.
Diese wird generiert, wenn der Aufruf einer entfernten Methode fehlschlägt.
Jedes entfernte Objekt, das als Parameter oder Rückgabewert übergeben
wird, muß als das Remote Interface deklariert werden, nicht als die
Implementierungsklasse.
i. Design und Implementierung der verteilten Applikation
- Definition des Remote Interface
- Implementierung der Remote Object Class
- Implementierung des Client
ii. Übersetzen der Quellen (javac) und Generieren von Stubs und
Skeletons (rmic)
iii. Start der Applikation inklusive Registry, Server und Client
public interface Hello extends java.rmi.Remote {
String sayHelloTo(String me)
throws java.rmi.RemoteException;
}
Seminar VA (04/05)
S (
)
Seminar VA (04/05)
S (
)
Implementierung eines Interface: Beispiel
Implementierung eines Interface
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
Eine Klasse zur Implementierung eines Remote Interface erweitert in
der Regel java.rmi.server.UnicastRemoteObject und erbt
dabei von der Klasse java.rmi.server.RemoteObject und
java.rmi.server.RemoteServer.
Eine Klasse, die ein Remote Interface implementiert kann
– mehrerer Interfaces implementieren und eine andere Klasse
erweitern, die ein Remote Interface implementiert,
– Methoden implementieren, die nicht Bestandteil eines Remote
Interface sind (diese sind aber nur lokal verfügbar),
– von einer anderen Klasse als Remote Object abgeleitet werden, muß
dann aber für die Methoden hashCode, equals und
toString die entfernte Semantik implementieren.
public class HelloImpl
extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException {
super();
}
public String sayHelloTo(String you)
throws RemoteException {
return(“Hello “ + you + “!“);
}
...
}
Seminar VA (04/05)
S (
)
Seminar VA (04/05)
S (
)
4
... und nun an die Arbeit! ☺
Nicht vergessen, es darf gefragt werden! ;-)
Seminar VA (04/05)
S (
)
5
Herunterladen