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