A Überblick über die 1. Übung

Größe: px
Ab Seite anzeigen:

Download "A Überblick über die 1. Übung"

Transkript

1 A Überblick über die 1 Übung A2 Übungstermine A2 Übungstermine Organisatorisches Sun RPC RMI Tafelübung: Mittwoch Uhr (Raum 0031) Rechnerübung: Freitag 12:00-14:00 Uhr (Raum 01155) Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 1 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 3 A1 Organisatorisches A1 Organisatorisches A3 Übungsaufgaben A3 Übungsaufgaben 1 Allgemeines Tobias Distler TobiasDistler@informatikuni-erlangende Raum: 0041 Michael Gernoth MichaelGernoth@informatikuni-erlangende Raum: 0042 Anmeldung: über WAFFEL: Projektverzeichnis: /proj/i4vs/<loginname> Bearbeitung der Übungsaufgaben in Zweier-/Dreiergruppen Gruppenzugehörigkeit festlegen mit: /proj/i4vs/bin/vsgroups Alle Aufgaben müssen pünktlich abgegeben werden Korrektur erfolgt durch Demonstration in den Übungen (CIP-Pool 01155): Aufgaben 1&2: Aufgaben 3&4: Aufgaben 5&6: Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 2 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 4

2 A4 Abgabe A4 Abgabe Abgabe durch einchecken der Lösung in vorgegebenes Subversion- Repository Repository wird von uns nach Aufruf von "vsgroups" manuell erzeugt Erreichbar per HTTPS Zugangsdaten werden per mitgeteilt Login-Name entspricht dem CIP-Pool Login Änderungen übernehmen Jede Änderung (zb editieren, anlegen, löschen, einer Datei) an der Working-Copy muss dem zentralen Repository mitgeteilt werden > svn commit <Hier öffnet sich ein Editor für die Log-Message> Sending Makefile Transmitting file data Committed revision 2 Working-Copy aktualisieren Um die im Repository gespeicherten Änderungen (zb einer anderen Person) in die eigene Kopie zu übernehmen, muss diese aktualisiert werden > svn up U Makefile Updated to revision 2 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 5 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 7 Checkout des Repositories Dateien werden in eine lokale,,working-copy ausgecheckt und können dort bearbeitet werden > svn co Authentication realm: < VS Subversion Repository Password for gernoth : A gruppe0/simplex Checked out revision 1 Dateien hinzufügen Dateien, die in der Working-Copy angelegt werden, fallen nicht automatisch unter die Kontrolle der Versionsverwaltung Dateien entfernen Eine Datei nur in der Working-Copy zu löschen ist nicht ausreichend, sie wird beim nächsten "svn up" wiederhergestellt > svn delete Makefile D Makefile Gelöschte Datei wiederherstellen Eine gelöschte Datei kann aus einer früheren Revision wiederhergestellt werden > svn cp -r 2 Makefile A Makefile > svn add Makefile clntc svcc simplex A Makefile Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 6 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 8

3 B Fernaufruf-Systeme aus Benutzersicht Änderungen anzeigen Während der Arbeit kann es nützlich sein, sich die aktuellen lokalen Änderungen gegenüber des zentralen Repositories anzeigen zu lassen > svn diff Index: Makefile ================================================================= --- Makefile (revision 4) +++ Makefile (working copy) -1,4 +1,4 -#CFLAGS=-DDEBUG +CFLAGS=-DDEBUG all: clnt svc Ziele in einem Fernaufruf-System Transparenter Mechanismus (-> Netzwerktransparenz) Methodenaufruf als Grundmechanismus im lokalen wie auch im verteilten Fall (Zugriffstransparenz) Namensdienst: Zugriff auf Dienst, ohne Ort kennen zu müssen (Ortstransparenz) Behandlung von Heterogenität (Heterogenitätstransparenz) Sprache, Betriebssystem, Hardware, Im Idealfall zusätzlich auch Fehlertransparenz, Migrationstransparenz, Replikationstransparenz, usw Wir betrachten zunächst: Zugriffs- und Ortstransparenz in existierenden Systemen (Sun RPC, Java RMI) Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (Orgfm ) A - 9 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 2 B Fernaufruf-Systeme aus Benutzersicht Zweck dieser Übung Programmieren mit den Basismechanismen von existierenden einfachen Fernaufruf-Systemen, aus Sicht des Benutzers Kennenlernen der wichtigstens Probleme und Aufgaben eines Fernaufruf- Systems Kennenlernen der bereitgestellten Mechanismen und Werkzeuge in diesen Systemen Betrachtet werden Sun RPC (Remote Procedure Call) Java RMI (Remote Methode Invocation) Erwartetes Ziel Selbständiger Entwurf einer einfachen verteilten Anwendung mit Hilfe von Sun RPC und Java RMI B Fernaufruf-System aus Benutzersicht Sun RPC Programmiersprache: Hauptsächlich C Bibliotheken für Marshalling von Standard-Datentypen in architekturunabhängiges Netzwerkformat Code-Generation aus Schnittstellenbeschreibung Java RMI Programmiersprache: Java In die Sprache integrierter Mechanismus Tiefergehende Grundlagen zu Fernaufrufen werden später in der Vorlesung aufgegriffen, und dann auch in der Übung behandelt (eigene Implementierung eines RPC-Systems!) Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 1 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 3

4 Überblick SUN-RPC SUN-RPC basiert auf dem Stub-Mechanismus Generierung von Klient und Server am Beispiel eines Fernaufrufs zur Ermittlung des Inhalts eines Verzeichnisses ("remote ls") Client foo(); Server void foo() return; Client foo(); Client Stub void foo() call() return; Server Stub invoke() foo(); Server void foo() return; rlsc dirx Methodenschnittstelle rpcgen dir_procc Netzwerk Stellvertr des Dienst- nehmers Dienstnehmer Methodenstellvertreter Konvertierungsroutinen Methode Utility "rpcgen" zur automatischen Generierung der Stubs Dokumentation: "ONC+ Developer s Guide", Sun Microsystems cc Dienstnehmender Prozeß Dienstleistender Prozeß cc Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 4 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 6 Eigenschaften des Sun RPC Pro RPC-Aufruf ist lediglich ein Parameter erlaubt Benötigt der RPC mehrere Parameter, muss eine Hilfsstruktur definiert werden! (Diese Aufgabe kann der rpcgen übernehmen) Der Host, an dem der RPC aufgerufen wird, muss beim Aufruf bekannt sein Übliche Abbildungen via DNS (und NIS/NIS+) werden durchgeführt Als Transportschicht kann UDP und TCP verwendet werden Für das Marshalling von Parametern und Rückgabewerten wird der XDR-Standard verwendet Dadurch wird eine gewisse Kompatibilität mit alternativen Implementationen gewährleistet Ein RPC wird durch ein Tripel (Programm-Nummer, Versions-Nummer, Prozedur-Nummer) identifiziert Die Programm-Nummer repräsentiert dabei eine Gruppe von verwandten RPC s Ports und Portmapper: Namensdienst Dienstnehmermaschine (Klient) dienstnehmender Prozeß ➂ ➁ ➀ Dienstleistermaschine (Server) a 111 b c d Portmapper rpcbind dienstleistender Prozeß (Server-Prozeß) (worker) Ports Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 5 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 7

5 Erzeugung der Marshaling-Methoden faui40% rpcgen dirx dirx Beschreibung der Methodenschnittstelle und der Einbettung in den Server => Erzeugt verschiedene Hilfsdateien: dirh gemeinsame Typdefinitionen dir_svcc Rahmenprogramm des Auftragnehmers dir_xdrc Prozeduren zur (Rück-)Konvertierung in/aus der Datendarstellung, die bei der Übertragung von Parametern verwendet wird dir_clntc Stellvertreter der Methode Datentypen im unverteilten Fall Typ Dateinamen typedef char *nametype; Verkettete Liste aus Dateinamen typedef struct namenode *namelist struct namenode nametype name; namelist next; ; Ergebniscode, und falls dieser gleich 0, Liste der Dateinamen struct readdir_res int myerrno; namelist list; ; Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 8 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 10 Erzeugung des Klienten (rlsc) faui40% cc rlsc dir_clntc dir_xdrc -o rls -lnsl 1 Erzeugung des Servers (Implementierung in dir_procc) faui40% cc dir_procc dir_svcc dir_xdrc -o dir_svc -lnsl 1 Ausführung Start des Dienstes (Server): dir_svc& Start des Klienten rls faui02a ~ Datentypen im verteilten Fall (Fernaufrufe): dirx Typ der Dateinamen const MAXNAMELENGTH = 255; typedef string nametype<maxnamelength>; Verkettete Liste aus Dateinamen typedef struct namenode *namelist struct namenode nametype name; namelist next; ; Typ des Methodenergebnisses, bestehend aus einer Fehlerkennung und (falls sie den Wert 0 hat), einer Liste von Dateinamen union readdir_res switch(int myerrno) case 0: namelist list; default: void; ; 1 -lnsl wird nur unter Solaris benötigt Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 9 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 11

6 Anmerkung: Bei "union" wird in den Programmen eine Struktur mit einer zusätzlichen Komponente gebildet Die Union-Komponente wird durch den Union- Typnamen mit angeschlossener Zeichenfolge _u identifiziert struct readdir_res int myerrno; union namelist list; readdir_res_u; ; XDR (external Data Representation) XDR sieht ein Muster zur Konvertierung zwischen C-Datentypen und einer externen Darstellung als Bitfolge vor Für die Standardtypen von C sind Bibliotheksroutinen verfügbar Diese Routinen zusammen mit unterstützenden Routinen bilden die Grundlage, auf der für jeden benutzerdefinierten Datentyp Routinen implementiert werden können, die die Konvertierung in beiden Richtungen vornehmen Für jeden Datentyp wird eine Routine benötigt mit zwei Argumenten: bool_t xdr_<type>(xdr *xdrs, <type> argresp) xdrs verweist auf ein XDR-Objekt, in das bzw aus dem konvertiert werden soll Das XDR-Objekt enthält eine Komponente, die angibt, ob nach XDR konvertiert werden soll (encode) oder aus XDR (decode) Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 12 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 14 Die Schnittstellenbeschreibung (dirx) program DIRPROG version DIRVERS readdir_res readdir(nametype) = 1; = 1; = ; Der Server erhält den Namen DIRPROG Der Server wird unter der Nummer registriert Die Version DIRVERS (==1) stellt die Methode READDIR zur Verfügung, die unter der Methodennummer 1 erreicht wird Dienstnehmer rufen diese Methode mit dem Namen readdir_1 auf (die Zahl nach dem Unterstrich ist die Versionsnummer) Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 13 Struktur eines XDR-Objektes enum xdr_op XDR_ENCODE = 0, XDR_DECODE = 1, XDR_FREE = 2 ; typedef struct enum xdr_op x_op; struct xdr_ops bool_t (*x_getlong)(); /* Long aus Stream lesen */ bool_t (*x_putlong)(); /* Long in Stream schreiben */ bool_t (*x_getbytes)();/* Bytes aus Stream lesen */ bool_t (*x_putbytes)();/* Bytes in Stream schreiben */ u_int (*x_getpostn)(); /* Position im Stream lesen */ bool_t (*x_setpostn)();/* Position im Stream setzen */ long * (*x_inline)(); /* Zeiger auf Streamdaten */ void (*x_destroy)(); /* Private Daten freigeben */ *x_ops; caddr_t x_public; /* Benutzerdaten */ caddr_t x_private; /* Zeiger auf private Daten */ caddr_t x_base; /* Private Positionsinformation */ int x_handy; /* zusaetzliche private Daten */ XDR; Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 15

7 Aus den Datenstrukturen für rls werden unter Rückgriff auf die Konversionsroutinen für Standardatentypen folgende Routinen erzeugt; (dir_xdrc) /* * Please do not edit this file * It was generated using rpcgen */ #include "dirh" bool_t xdr_nametype(xdr *xdrs, nametype *objp) register long *buf; if (!xdr_string(xdrs, objp, MAXNAMELENGTH)) return (FALSE); return (TRUE); bool_t xdr_readdir_res(xdr *xdrs, readdir_res *objp) register long *buf; if (!xdr_int(xdrs, &objp->myerrno)) return (FALSE); switch (objp->myerrno) case 0: if (!xdr_namelist(xdrs, &objp->readdir_res_ulist)) return (FALSE); break; return (TRUE); Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 16 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 18 bool_t xdr_namelist(xdr *xdrs, namelist *objp) register long *buf; if (!xdr_pointer(xdrs, (char **)objp, sizeof (struct namenode),(xdrproc_t) xdr_namenode)) return (FALSE); return (TRUE); bool_t xdr_namenode(xdr *xdrs, namenode *objp) register long *buf; if (!xdr_nametype(xdrs, &objp->name)) return (FALSE); if (!xdr_namelist(xdrs, &objp->next)) return (FALSE); return (TRUE); Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 17 Die Implementierung des Servers (dir_procc) // Der Methodenname besteht aus einer symbolischen Bezeichnung // gefolgt von einem Unterstrich und der Versionsnummer // Parameter- und Ergebnistypen werden in der // Methodenschnittstelle definiert readdir_res * readdir_1_svc(nametype *dirname, struct svc_req *req) DIR *dirp; struct dirent *d; namelist *nlp, nl; static readdir_res res; dirp = opendir(*dirname); if(dirp == NULL) resmyerrno = errno; return(&res); // alten Speicher freigeben xdr_free(xdr_readdir_res, (char *)&res); Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 19

8 nlp = &resreaddir_res_ulist; printf("\n"); while (d = readdir(dirp)) nl = *nlp = (namenode *) malloc(sizeof(namenode)); nl->name = strdup(d->d_name); nlp = &nl->next; *nlp = NULL; resmyerrno = 0; closedir(dirp); printf("\n"); return(&res); // Erzeugung eines Deskriptors für den Serverzugang cl = clnt_create(server, DIRPROG, DIRVERS, "tcp"); // Aufruf der Methode readdir am durch cl identifizierten // Server result = readdir_1(&dir, cl); // Ausgabe des Ergebnisses aus dem Methodenaufruf for (nl = result->readdir_res_ulist; nl!= NULL; nl = nl->next) printf("%s\n", nl->name); exit(0); Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 20 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 22 Die Implementierung des Klienten (rlsc) Das Programm wird mit zwei Parametern gestartet, nämlich dem Namen des Rechners, auf dem das auszugebende Verzeichnis liegt und dem Pfadnamen des auszugebenden Verzeichnisses main(int argc, char *argv[]) CLIENT *cl; char *server, *dir; readdir_res *result; namelist nl; // Übernahme der Parameter server = argv[1]; dir = argv[2]; Der Stellvertreter des Klienten (automatisch generiert) static struct timeval TIMEOUT = 25, 0 ; readdir_res * readdir_1(nametype argp, CLIENT *clnt) static readdir_res clnt_res; memset((char *)&clnt_res, 0, sizeof (clnt_res)); if (clnt_call(clnt, READDIR, (xdrproc_t) xdr_nametype, (caddr_t) argp, (xdrproc_t) xdr_readdir_res, (caddr_t) &clnt_res, TIMEOUT)!= RPC_SUCCESS) return (NULL); return (&clnt_res); Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 21 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 23

9 B2 Jave Remote Methode Invocation (RMI) B2 Jave Remote Methode Invocation (RMI) Der Stellvertreter des Servers (automatisch generiert) main() register SVCXPRT *transp; struct netconfig *nconf = NULL; ermöglicht Abstraktion in einem verteilten System Socket-Kommunikation keine Abstraktion // Erzeuge eine RPC Server Handle transp = svc_tli_create(0, nconf, NULL, 0, 0)) // Registriere Server mit DIRPROG und DIRVERS svc_reg(transp, DIRPROG, DIRVERS, dirprog_1, 0); Fernaufrufe (RPC) Methoden-Fernaufrufe (RMI) prozedurale Abstraktion Abstraktion auf Objektebene // Diese Routine kehrt nur bei einem Fehler zurück // Sie wartet auf RPC-Aufrufe und leitet diese an die // entsprechende Service-Routine weiter svc_run(); Methoden-Fernaufrufe: Aufruf von Methoden an Objekten auf anderen Rechnern Transparente Objektreferenzen zu entfernten Objekten Dokumentation: zb Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 24 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 26 B2 Überblick B2 Jave Remote Methode Invocation (RMI) Zusammenfassung Explizite Schnittstellenbeschreibung ("dirx") Daraus automatische Generierung von Stubs und Marshalling-Funktionen mit Hilfe von "rpcgen" Einheitliche Informationsdarstellung nach XDR für heterogene Systeme Portmapper als lokaler Namensdienst Stub: Stellvertreter (Proxy) des entfernten Objekts Skeleton: Ruft die Methoden am entfernten Objekt auf Stub Skeleton entferntes Objekt RPC und Kommunikationsschichten Anfrage: Objekt ID, Methoden ID, Parameter Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 25 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 27

10 B2 Einführung B2 Jave Remote Methode Invocation (RMI) B2 Ausführung B2 Jave Remote Methode Invocation (RMI) Remote Object (entferntes Objekt): Ein Objekt, welches aus einer anderen JVM heraus genutzt werden kann Klient-Rechner Klient-JVM Server-Rechner Remote Interface: Beschreibt die Methoden eines entfernten Objekts Ein Remote Interface muss von javarmiremote abgeleitet sein Zugriffe auf ein entferntes Objekt sind nur über ein Remote Interface möglich Die Klasse eines entfernten Objekts muss mindestens ein Remote Interface implementieren Entfernte Objekte können selbst wieder entfernte Objekte nutzen Parameter werden wie folgt übergeben: by value: Bei allen Parametern, die keine entfernten Objekte sind by reference: Bei Parametern welche javarmiremote implementieren 2: Naminglookup ("rmi://i4vs/hallo"); halloimpl_stub 3: Objektref 4: hallosay() Server-JVM halloimpl_skel 5: Ergebnis Namensdienst: Registry 1: Namingbind("hallo", hallo); class HalloImpl implements Hallo String say(string msg) return "Hallo "+msg; Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 28 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 30 B2 Jave Remote Methode Invocation (RMI) B2 lokaler vs entfernter Methodenaufruf B2 Registry (1) B2 Jave Remote Methode Invocation (RMI) Jeder Aufruf kann eine RemoteException auslösen Aufrufer weiß nicht, ob die Methode komplett, teilweise, oder gar nicht ausgeführt wurde Entfernte Objekte können nur über Interfaces angesprochen werden Normale Objekte werden kopiert, anstatt eine Referenz darauf zu übergeben Die Registry übernimmt als Namesdienst die Abbildung von Objektnamen auf Objektreferenzen Der Zurgriff erfolgt über die Klasse javarminaming void bind(string name, Remote obj) registriert ein Objekt unter einem eindeutigen Namen; falls das Objekt bereits registriert ist, wird eine Exception ausgelöst void rebind(string name, Remote obj) registriert ein Objekt unter einem eindeutigen Namen; falls das Objekt bereits registriert ist, wird der alte Eintrag gelöscht Remote lookup(string name) liefert die Objektreferenz zu einem gegebenen Namen void Namingunbind(String name) löscht den Namenseintrag Die Registrierung ist nur bei der Registry auf dem aktuellen Rechner möglich! Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 29 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 31

11 B2 Jave Remote Methode Invocation (RMI) B2 Jave Remote Methode Invocation (RMI) B2 Registry (2) B2 Stubs und Skeletons Einen bestimmten Port verwenden: Die Registry nimmt TCP/IP-Verbindungen an Port 1099 entgegen als Parameter kann jedoch ein anderer Port angegeben werden zb 10412: rmiregistry Wenn eine Registry an einem bestimmten Port verwendet werden soll, so muss die URL, die bei bind/rebind/unbind/lookup verwendet wird diesen Port enthalten: Namingrebind("rmi://faui40:10412/hallo", hallo) Naminglookup("rmi://faui40:10412/hallo") 0 0 Stub (auf Klientenseite) - implementiert das remote interface (1) erhält einen ObjectOutputStream von der RMI - Referenzenschicht (2) schreibt die Parameter in diesen Strom (3) teilt der RMI - Referezenschicht mit, die Methode aufzurufen (4) holt einen ObjectInputStream von der RMI - Referezenschicht (5) liest das Rückgabeobjekt aus diesem Strom (6) liefert das Rückgabeobjekt an den Aufrufer Skeleton (auf Serverseite) (1) erhält einen ObjectInputStream von der RMI - Referezenschicht (2) liest die Parameter aus diesem Strom (3) ruft die Methode am implementierten Objekt auf (4) holt einen ObjectOutputStream von der RMI - Referezenschicht (5) schreibt das Rückgabeobjekt in diesem Strom Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 32 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 34 B2 Systemarchitektur B2 Jave Remote Methode Invocation (RMI) B2 Jave Remote Methode Invocation (RMI) B2 Referenzenschicht (Remote Reference Layer) Klient Server Verantwortlich für das Aufräumen (Garbage Collection) der entfernten Objekte Klient Stubs Server Skeletons Stubs Skeletons Implementiert die Aufrufsemantik, zb: unicast, Punkt-zu-Punkt RMI Referenzenschicht (Remote Reference Layer) RMI Referenzenschicht (Remote Reference Layer) Aufruf an einem replizierten Objekt Strategien zum Wiederaufbau der Verbindung nach einer Unterbrechung RMI- Transportschicht RMI- Transportschicht Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 33 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 35

12 B2 Jave Remote Methode Invocation (RMI) B2 Jave Remote Methode Invocation (RMI) B2 Transportschicht B2 Ein einfaches Beispiel Verantwortlich für die Datenübertragung zwischen den Rechnern Aktuelle Implementierung basiert auf TCP/IP Sockets Klient Stubs Server Skeletons RMI Referenzenschicht (Remote Reference Layer) 0 (1) Remote Interface (2) Server (3) Serverinitialisierung (4) Klient (5) Starten des Systems Verschiedene Transportmechanismen sind denkbar RMI- Transportschicht Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 36 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 38 B2 Interface und Implementierung javarmiremote extends Hallo implements implements B2 Jave Remote Methode Invocation (RMI) Skeleton dynamisch generiert HalloImpl dynamisch generiert Stub das muss selbst geschrieben werden Klasse Interface Der Programmierer schreibt die Remote-Schnittstelle Hallo und die Implementierung HalloImpl Der Stellvertreter (Stub) und das Skeleton werden dynamisch aus der Implementierung HalloImpl generiert 1 Beispiel - Remote Interface B2 Jave Remote Methode Invocation (RMI) Alle Methoden, die ein Objekt für seine Klienten anbietet, werden mit einem Interface beschrieben Das Objekt muss dieses Interface implementieren Das Interface muss von javarmiremote erben Alle Methoden können javarmiremoteexception werfen Alle Parameter und Rückgabewerte müssen entweder serialisierbar sein (dh sie müssen das Interface javaioserializable implementieren) oder sie müssen entfernte Objekte sein Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 37 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 39

13 1 Beispiel - Remote Interface Remote Interface Bank: B2 Jave Remote Methode Invocation (RMI) public interface Bank extends javarmiremote void deposit(money amount, Account account) throws javarmiremoteexception; 3 Beispiel - Serverinitialisierung B2 Jave Remote Methode Invocation (RMI) Das Remote-Objekt muss mit bind oder rebind in die Registry eingetragen werden Namingbind("rmi://faui40u:10412/bank", bank); Remote Interface Account: public interface Account extends javarmiremote void deposit(money amount) throws javarmiremoteexception; Parameter Money: public class Money implements javaioserializable private float value; public Money(float value) thisvalue = value; Protokoll Rechnername Objektname RMISecurityManager: ohne SecurityManager können keine Klassen vom Netz geladen werden Server-JVM muss einen SecurityManager setzen, zb SystemsetSecurityManager(new RMISecurityManager()); RMISecurityManager ist ähnlich AppletSecurityManager Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 40 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B Beispiel - Server B2 Jave Remote Methode Invocation (RMI) 3 Beispiel - Security Policies B2 Jave Remote Methode Invocation (RMI) Der Server implementiert das Interface Methoden brauchen keine RemoteException zu werfen Zwei Alternativen zur Erzeugung eines Remote-Objektes Der Server wird von UnicastRemoteObject abgeleitet import javarmiserver*; public class BankImpl extends UnicastRemoteObject implements Bank public BankImpl () throws javarmiremoteexception public void deposit(money amount, Account account) throws javarmiremoteexception accountdeposit(amount); Security Policies Legen das Verhalten des SecurityManagers fest Standard-Policy in: $JAVA_HOME/jre/lib/security/javapolicy Benutzer-Policy in: $HOME/javapolicy Zusätzliche Policy wird mit der Eigenschaft javasecuritypolicy angegeben java -Djavasecuritypolicy=URL Klassenname Jedem alles erlauben: grant permission javasecurityallpermission "", ""; ; oder es wird mit exportobject ein Remote-Objekt erzeugt: public class BankImpl implements Bank Remote bank = UnicastRemoteObjectexportObject(new BankImpl(), 0) Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 41 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 43

14 4 Beispiel - Klient B2 Jave Remote Methode Invocation (RMI) B2 Jave Remote Methode Invocation (RMI) 6 Interaktionen während des Methoden-Fernaufrufes Der Klient kann sich mit lookup eine Referenz auf das entfernte Objekt (den Server) besorgen Beispiel: public class Client public static void main (String argv[]) throws javanetmalformedurlexception, javarminotboundexception, javarmiremoteexception Bank bank= (Bank)javarmiNaminglookup ("rmi://faui40u:10412/bank"); Account account = new AccountImpl(); bankdeposit(new Money(10), account); money client account bank Client JVM Server JVM Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 44 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B Beispiel - System starten B2 Jave Remote Methode Invocation (RMI) B2 Jave Remote Methode Invocation (RMI) 6 Interaktionen während des Methoden-Fernaufrufes (2) Klassenpfad setzen, damit rmic und java (server) die Klassen finden setenv CLASSPATH /proj/i4vs/felser/aufgabe1 Auf dem Serverrechner die Registry starten rmiregistry 10412& money account Auf dem Serverrechner das Serverobjekt starten java -Djavarmiservercodebase= file:///proj/i4vs/felser/aufgabe1/ BankImpl client deposit Kopie von money account stub bank Von jedem beliebigen Rechner aus kann nun der Klient benutzt werden: java Client Client JVM Server JVM Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 45 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 47

15 B2 Jave Remote Methode Invocation (RMI) 6 Interaktionen während des Methoden-Fernaufrufes (3) B2 Zusammenfassung B2 Jave Remote Methode Invocation (RMI) Ein entferntes Objekt muss ein Remote Interface implementieren money client account deposit remote reference Kopie von money bank Alle Methoden des Interfaces müssen eine javarmiremoteexception werfen Um ein entferntes Objekt zu erzeugen, kann man entweder direkt von javarmiserverunicastremoteobject ableiten oder die Methode exportobject verwenden Um entfernte Objekte an der Registry zu registrieren oder zu suchen, kann man javarminaming verwenden Klienten verwenden nur das Remote interface Client JVM Server JVM Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 48 Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 50 B2 Jave Remote Methode Invocation (RMI) 6 Interaktionen während des Methoden-Fernaufrufes (4) money client account Kopie von money deposit Kopie von "Kopie von money" deposit bank Client JVM Server JVM Universität Erlangen-Nürnberg Informatik 4, 2010 SS 2010 VS (RPCfm ) B - 49

A Überblick über die 1. Übung

A Überblick über die 1. Übung A Überblick über die 1 Übung A2 Übungstermine A2 Übungstermine Organisatorisches Sun RPC Tafelübung: Mittwoch 1000-1200 Uhr (Raum 0031) Mittwoch 1200-1400 Uhr (Raum 0031) RMI Rechnerübung: Freitag 12:00-14:00

Mehr

J Fernmethodenaufrufe Remote Method Invocation (RMI)

J Fernmethodenaufrufe Remote Method Invocation (RMI) J Fernmethodenaufrufe Remote Method Invocation (RMI) ermöglicht Abstraktion in einem verteilten System Socket-Kommunikation Fernaufrufe (RPC) J Fernmethodenaufrufe Remote Method Invocation (RMI) keine

Mehr

verwendete Entwurfsmuster (Designpattern) SecurityManager RMI MW - Übung E.1

verwendete Entwurfsmuster (Designpattern) SecurityManager RMI MW - Übung E.1 E Überblick über die 4. Übung E Überblick über die 4. Übung verwendete Entwurfsmuster (Designpattern) SecurityManager RMI Universität Erlangen-Nürnberg Informatik 4, 2007 E-Uebung4.fm 2007-11-15 18.13

Mehr

Einführung: Verteilte Systeme - Remote Method Invocation -

Einführung: Verteilte Systeme - Remote Method Invocation - Einführung: Verteilte Systeme - - Prof. Dr. Michael Cebulla 11. Dezember 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 43 M. Cebulla Verteilte Systeme Gliederung 1 2 Architektur RMI Kommunikation

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation spezielle Technik aus dem Java-Umfeld Ausführung der Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VM s Aufruf

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation Spezielle Technik aus dem Java-Umfeld Ausführung von Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VMs Aufruf

Mehr

F.1 Design Patterns (Entwurfsmuster) CLIENT SERVER. 1 Model-View-Controller. 1 Model-View-Controller (2) verwendete Entwurfsmuster (Designpattern)

F.1 Design Patterns (Entwurfsmuster) CLIENT SERVER. 1 Model-View-Controller. 1 Model-View-Controller (2) verwendete Entwurfsmuster (Designpattern) F Überblick über die 5. Übung F Überblick über die 5. Übung 1 Model-View-Controller verwendete Entwurfsmuster (Designpattern) 1: Maustaste gedrückt SecurityManager Controller RMI 2: Grafikobjekt löschen

Mehr

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc. 7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.html) bietet leider nur begrenzte Verteilungsabstraktion Unterstützung

Mehr

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS14) Java RMI 1 1

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS14) Java RMI 1 1 Überblick Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 VS-Übung (SS14) Java RMI 1 1 Fernmethodenaufrufe Remote Method Invocation (RMI) Aufrufe von Methoden an Objekten

Mehr

Konzepte von Betriebssystem-Komponenten Middleware RMI

Konzepte von Betriebssystem-Komponenten Middleware RMI Konzepte von Betriebssystem-Komponenten Middleware RMI Mario Kiefer 21. Januar 2005 1 Einführung RMI (Remote Method Invocation) ermöglicht es mit relativ einfachen Mitteln verteilte Anwendungen zu erstellen.

Mehr

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS12) Java RMI 1 1

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS12) Java RMI 1 1 Überblick Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 VS-Übung (SS12) Java RMI 1 1 Fernmethodenaufrufe Remote Method Invocation (RMI) Aufrufe von Methoden an Objekten

Mehr

Java RMI Remote Method Invocation

Java RMI Remote Method Invocation Java RMI Remote Method Invocation Ziel: Aufruf von Instanzmethoden entfernter Objekte basierend auf Java. Paket: java.rmi und Unterpakete Topologie: RMI Registry RMI Server RMI Client Der Server registriert

Mehr

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS16) Java RMI 1 1

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS16) Java RMI 1 1 Überblick Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 VS-Übung (SS16) Java RMI 1 1 Fernmethodenaufrufe Remote Method Invocation (RMI) Aufrufe von Methoden an Objekten

Mehr

Überblick. Middleware - Übung. Model-View-Controller. Entwurfsmuster (Design Patterns)

Überblick. Middleware - Übung. Model-View-Controller. Entwurfsmuster (Design Patterns) Überblick Middleware - Übung Tobias Distler, Michael Gernoth, Rüdiger Kapitza Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007 Systemprogrammierung Projekt: Java RMI Wintersemester 2006 / 2007 Systemprogrammierung 1. Einleitung 2. Einführung in RPC 3. RMI 4. Code Beispiele 5. Live Vorstellung 6. Ausblick 7. Fazit 2 1. Einleitung

Mehr

Java Remote Method Invocation (RMI)

Java Remote Method Invocation (RMI) Java Remote Method Invocation (RMI) Alexander Petry 13. Mai 2003 engl.: Entfernter Methodenaufruf 1 Übersicht 1. Einleitung 2. RMI Interfaces und Klassen 3. Parameterübergabe 4. Dynamisches Nachladen von

Mehr

36.2 Example ClassLoader. 36.3 Example Appletviewer

36.2 Example ClassLoader. 36.3 Example Appletviewer 36 ClassLoader How are classes loaded into the Java Virtual Machine (JVM)? from the local file system (CLASSPATH). by an instance of ClassLoader... and when? - When they are needed the first time. class

Mehr

Überblick. Fernmethodenaufrufe

Überblick. Fernmethodenaufrufe Überblick Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 Fernmethodenaufrufe Remote Method Invocation (RMI) Aufrufe von Methoden an Objekten auf anderen Rechnern Remote-Referenz:

Mehr

Java-Programmierung. Remote Method Invocation - RMI

Java-Programmierung. Remote Method Invocation - RMI Java-Programmierung Remote Method Invocation - RMI Entwicklungsmethoden Sockets Entwurf verteilter Anwendungen ist relativ aufwändig, da zunächst ein Kommunikationsprotokoll entwickelt werden muss aufwändig

Mehr

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion 1 Java 1.1 e B Java RMI orientierte Sprache e beschrieben in Klassendefinitionen und andere Datentypen: int, float, boolean, etc. referenzen Verweise auf e keine Zeiger, Adressen o.ä. B.1 B.2 1.1 e (2)

Mehr

D.1 Organisatorisches

D.1 Organisatorisches D Überblick über die 3. Übung D Überblick über die 3. Übung D.1 Organisatorisches D.1 Organisatorisches RPC und ORB Präsentation der Übungsaufgaben 1 und 2 Aufrufsemantiken Hinweise Aufgabe 2 Live in der

Mehr

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz. Institut für Angewandte Informatik

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz.  Institut für Angewandte Informatik Programmieren II Remote Method Invocation (RMI) Heusch -- Ratz KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Remote Method

Mehr

9. Remote Method Invocation Grundlagen der Programmierung II (Java)

9. Remote Method Invocation Grundlagen der Programmierung II (Java) 9. Remote Method Invocation Grundlagen der Programmierung II (Java) Prof. Dr. Bernhard Humm Hochschule Darmstadt University of Applied Sciences Sommersemester 2006 Übersicht Grundlagen der Programmierung

Mehr

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Überblick Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Stubs & Skeletons Aufgabe 2 Tutorial: http://download.oracle.com/javase/tutorial/reflect/index.html

Mehr

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method Überblick Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Stubs & Skeletons Aufgabe 2 Tutorial: http://docs.oracle.com/javase/tutorial/reflect/index.html

Mehr

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth Überblick Verteilte Systeme - 4. Übung Tobias Distler, Michael Gernoth Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI 1 Motivation Motivation ierte Objektmodel Standard Middleware für objektorientierte Anwendungen CORBA,.NET-Remoting Java Remote Method Invocation (RMI) Java RMI ierte Objekte undjava RMI Zusammenfassung

Mehr

Praktikum Verteilte Anwendungen

Praktikum Verteilte Anwendungen Technische Informatik (Info II) -Sommersemester 2006 - Folie 1 / 27 0 Gliederung 1.) Kurze Wiederholung/ Einleitung 2.) RPC/ RMI 3.) Praktisches Beispiel 4.) Aufgabenblatt Folie 2 / 27 Wiederholung/ Einleitung

Mehr

F.1 Überblick. 1 RPC-System in Aufgabe 3. Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern aus

F.1 Überblick. 1 RPC-System in Aufgabe 3. Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern aus F 5. Übung F 5. Übung F.1 Überblick Aufgabe 3 RPC-System im Überblick Marshalling primitiver Datentypen Byteorder Fließkommawerte s und s F.1 Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern

Mehr

8.1.5 Java RMI Remote Method Invocation

8.1.5 Java RMI Remote Method Invocation 8.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi ) (http://java.sun.com/j2se/1.5/docs/guide/rmi ) (http://java.sun.com/docs/books/tutorial/rmi ) (http://java.sun.com/developer/onlinetraining/rmi/rmi.html

Mehr

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker RMI, Zusammenfassung und Lehrevaluation PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker Steffen Helke Technische Universität Berlin Fachgebiet Softwaretechnik 8. Juli 2013 Übersicht

Mehr

Überblick. Verteilte Systeme Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

Überblick. Verteilte Systeme Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth Überblick Verteilte Systeme Übung Tobias Distler, Michael Gernoth Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1 Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7 Inhaltsverzeichnis RMI Projekt gettime 1 Schritt 1: Interface Klasse definieren 1 Schritt 2: Implementation Class definieren 2 Schritt 3: RMI Compiler erstellen

Mehr

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel UNIVERSITÄT LEIPZIG Mainframe Internet Integration Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013 Java Remote Method Invocation RMI Beispiel el0100 copyright Abt. Technische Informatik,

Mehr

B Java RMI B.1 B.2. 1 Java. 1.1 Objekte. Objektorientierte Sprache

B Java RMI B.1 B.2. 1 Java. 1.1 Objekte. Objektorientierte Sprache B Java RMI B.1 1 Java 1.1 Objekte Objektorientierte Sprache Objekte beschrieben in Klassendefinitionen und andere Datentypen: int, float, boolean, etc. Objektreferenzen Verweise auf Objekte keine Zeiger,

Mehr

Verteilte Systeme Übung

Verteilte Systeme Übung Verteilte Systeme Übung Tobias Distler, Klaus Stengel, Timo Hönig, Christopher Eibel, Tobias Klaus Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

Remote Methode Invocation (RMI) ETIS SS05

Remote Methode Invocation (RMI) ETIS SS05 Remote Methode Invocation (RMI) ETIS SS05 Motivation Ablauf der Kommunikation Erstellung Remote-Service Zusammenfassung Gliederung 2 Motivation I RMI: Remote Method Invokation Möglichkeit verteilte Java-Anwendungen

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation Aufruf von Methoden über die Grenzen der VM hinweg. Javaprozesse der rufenden und gerufenen Methode können auf verschiedenen Hosts laufen. Eine RMI-Applikation besteht aus dem

Mehr

Verteilte Systeme. Verteilte Objektorientierte Systeme I. Prof. Dr. Oliver Haase

Verteilte Systeme. Verteilte Objektorientierte Systeme I. Prof. Dr. Oliver Haase Verteilte Systeme Verteilte Objektorientierte Systeme I Prof. Dr. Oliver Haase 1 Überblick Verteilte Objektorientierte Systeme 1 RPC verteilte objektorientierte Architekturen Java RMI Verteilte Objektorientierte

Mehr

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1 Komponenten 1 2. Die Anfänge 3 Peter Sturm, Universität Trier 1 Selbstzufrieden Anwendung Hardware 4 Oh? Da gibt es noch jemanden? Anwendung Anwendung TCP/IP Hardware Hardware 5 Peter Sturm, Universität

Mehr

Grundlagen verteilter Systeme

Grundlagen verteilter Systeme Universität Augsburg Institut für Informatik Prof. Dr. Bernhard Bauer Stephan Roser Viviane Schöbel Aufgabe 1: Wintersemester 07/08 Übungsblatt 2 20.11.07 Grundlagen verteilter Systeme Lösungsvorschlag

Mehr

SVN-Einführung für das SEP DS und CM. Julian Timpner, Stefan Brenner, Stephan Rottmann

SVN-Einführung für das SEP DS und CM. Julian Timpner, Stefan Brenner, Stephan Rottmann SVN-Einführung für das SEP DS und CM Julian Timpner, Stefan Brenner, Stephan Rottmann 23. April 2014 Subversion (SVN) - Allgemeines Versionsverwaltung für Dokumente Primär für reine Textdateien (*.txt,

Mehr

Überblick. Verteilte Systeme - 4. Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs

Überblick. Verteilte Systeme - 4. Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs Überblick Verteilte Systeme - 4. Übung Tobias Distler, Michael Gernoth, Reinhard Tartler Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1)

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1) Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1) Robert Tolksdorf und Peter Löhr Überblick 1. Fernaufrufbare Objekte 2. Das Objektverzeichnis rmiregistry 3. Parametersemantik Dokumentation

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2013/2014 groppe@ifis.uni-luebeck.de Institut für Informationssysteme Universität zu Lübeck Kommunikations-Middleware Bietet höhere Kommunikations-Dienste

Mehr

7 Remote Method Invocation (RMI)

7 Remote Method Invocation (RMI) 7 Remote Method Invocation (RMI) Verteilte Java Anwendungen; Client/Server Architektur Vorläufige Version 188 c 2005 Peter Thiemann Server: Aufgaben erstellt remote objects Objekte, deren Methoden von

Mehr

C Java RMI. 1 Java. Objektorientierte Sprache

C Java RMI. 1 Java. Objektorientierte Sprache Java RMI 1 1 Java Objektorientierte Sprache Objekte und andere Datentypen: int, float, boolean, etc. Objektreferenzen Verweise auf Objekte keine Zeiger, Adressen o.ä. Methodenaufruf bei vorhandener Objektreferenz

Mehr

Übung zur Vorlesung "Einführung in Verteilte Systeme"

Übung zur Vorlesung Einführung in Verteilte Systeme Übung zur Vorlesung "Einführung in Verteilte Systeme" Wintersemester 2004/05 Thema: Java RMI Ulf Rerrer Institut für Informatik Universität Paderborn Inhalt Java Remote Method Invocation RMI-Architektur!

Mehr

C Java RMI C.2 C.4. 1 Java. 1 Java (2) 1 Java (3) Objektorientierte Sprache. Objektorientierte Sprache (fortges.) Objektorientierte Sprache (fortges.

C Java RMI C.2 C.4. 1 Java. 1 Java (2) 1 Java (3) Objektorientierte Sprache. Objektorientierte Sprache (fortges.) Objektorientierte Sprache (fortges. 1 Java C Java RMI orientierte Sprache e und andere Datentypen: int, float, boolean, etc. referenzen Verweise auf e keine Zeiger, Adressen o.ä. Methodenaufruf bei vorhandener referenz Übergabe von Parametern

Mehr

E.1 Object Request Brokers

E.1 Object Request Brokers E Überblick über die 4. Übung E Überblick über die 4. Übung 1 Komponenten eines ORBs Lösungsskizze Aufgabe 2 RPC und ORB Aufrufsemantiken Hinweise Aufgabe 3 Kommunikationsschicht: tauscht Daten zwischen

Mehr

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Aufgabe 1 Bitte schreiben Sie ein RMI Objekt, das eine Person repräsentiert. Es soll die folgende Schnittstelle implementieren: public interface Person

Mehr

Übungsaufgabe 5. Verteilte Systeme - 6. Übung. Fehler & RPC (lokaler Fall) Transparenz beim Fernaufruf. RPC-Aufrufsemantiken Fehlermodell

Übungsaufgabe 5. Verteilte Systeme - 6. Übung. Fehler & RPC (lokaler Fall) Transparenz beim Fernaufruf. RPC-Aufrufsemantiken Fehlermodell Übungsaufgabe 5 Verteilte Systeme - 6. Übung Tobias Distler, Michael Gernoth, Reinhard Tartler Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

Überblick. Java Reflection API. Class-Objekte

Überblick. Java Reflection API. Class-Objekte Bietet die Möglichkeit, das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Tutorial: http://docs.oracle.com/javase/tutorial/reflect/index.html [...] This

Mehr

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler Seminar Ausgewählte Komponenten von Betriebssystemen IDL4 Compiler IDL4 Compiler Hristo Pentchev Überblick CORBA IDL Allgemein IDL4 Compiler Beispiele CORBA Common Objekt Request Broker Architecture Gemeinsame

Mehr

Informatik II Übung 5

Informatik II Übung 5 Informatik II Übung 5 Florian Scheidegger florsche@student.ethz.ch Folien mit freundlicher Genehmigung adaptiert von Gábor Sörös und Simon Mayer gabor.soros@inf.ethz.ch, simon.mayer@inf.ethz.ch 27.03.2013

Mehr

Überblick. Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2. VS-Übung (SS17) Stubs & Skeletons 2 1

Überblick. Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2. VS-Übung (SS17) Stubs & Skeletons 2 1 Überblick Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2 VS-Übung (SS17) Stubs & Skeletons 2 1 Java Reflection API Übersicht Bietet die Möglichkeit, das

Mehr

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Remote-Objekte Motivation Architektur Client und Server-Implementierung Parameterübergabe Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H.

Mehr

39 Object Request Brokers. 40 Components of an ORB. 40.1 Stubs and Skeletons. 40.1.1 Stub

39 Object Request Brokers. 40 Components of an ORB. 40.1 Stubs and Skeletons. 40.1.1 Stub 39 Object Request Brokers 40.1 Stubs and s invoke methods at remote objects (objects that run in another JVM) Stub: Proxy for remote object example ORBs: RMI, JavaIDL : Invokes methods at remote object

Mehr

Überblick. Verteilte Systeme Übung. VS-Übung. Callback Stubs revisited Callback JUnit. Tobias Distler, Michael Gernoth. Sommersemester 2010

Überblick. Verteilte Systeme Übung. VS-Übung. Callback Stubs revisited Callback JUnit. Tobias Distler, Michael Gernoth. Sommersemester 2010 Überblick Verteilte Systeme Übung Tobias Distler, Michael Gernoth Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

-Testen verteilter Anwendungen

-Testen verteilter Anwendungen -Testen verteilter Anwendungen Seminar Simulation und Bildanalyse mit Java im SS04 Konstantin Tjo, Urs Pricking Testen verteilter Anwendungen 1 Übersicht Einführung in verteilte Anwendungen RMI (Remote

Mehr

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP UNIVERSITÄT LEIPZIG Mainframe Internet Integration Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013 Java Remote Method Invocation Teil 3 RMI over IIOP el0100 copyright Abt. Technische Informatik,

Mehr

Inhalt. Übung zur Vorlesung "Einführung in Verteilte Systeme" Das RMI-Schichtenmodell. Java Remote Method Invocation. Wintersemester 2004/05

Inhalt. Übung zur Vorlesung Einführung in Verteilte Systeme Das RMI-Schichtenmodell. Java Remote Method Invocation. Wintersemester 2004/05 Übung zur Vorlesung "Einführung in Verteilte Systeme" Wintersemester 2004/05 Ulf Rerrer Thema: Java RMI Institut für Informatik Universität Paderborn Inhalt Java Remote Method Invocation RMI-Architektur!

Mehr

Überblick. Verteilte Systeme - Übung. VS-Übung. Callback Stubs revisited Callback JUnit. Tobias Distler, Michael Gernoth, Reinhard Tartler

Überblick. Verteilte Systeme - Übung. VS-Übung. Callback Stubs revisited Callback JUnit. Tobias Distler, Michael Gernoth, Reinhard Tartler Überblick Verteilte Systeme - Übung Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de Sommersemester 2008

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2010/2011 groppe@ifis.uni-luebeck.de Institut für Informationssysteme Universität zu Lübeck Java Remote Method Invocation (RMI) Realisierung

Mehr

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks Zusammenfassung für CS-Prüfung 3 Seite 1 CS-Zusammenfassung für Prüfung 3 vom 24. 6. 2002 Deadlock Im Beispiel gibt es 3 Deadlocks Unterschied zwischen Blockieren, Verklemmen und Verhungenrn= -> Band 1

Mehr

7.4 Verteilungsabstraktion in heterogener Umgebung

7.4 Verteilungsabstraktion in heterogener Umgebung 7.4 Verteilungsabstraktion in heterogener Umgebung Szenario: reiner Maschinencode (native code) bei unterschiedlichen Rechnerarchitekturen, unterschiedlichen Betriebssystemen, unterschiedlichen Übersetzern,

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Themen. Web Service - Clients. Kommunikation zw. Web Services

Themen. Web Service - Clients. Kommunikation zw. Web Services Themen Web Service - Clients Kommunikation zw. Web Services Bisher: Implementierung einer Java Anwendung und Bereitstellung durch Apache Axis unter Apache Tomcat Java2WSDL Erzeugen einer WSDL-Datei zur

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

Netzwerkprogrammierung unter Linux und UNIX

Netzwerkprogrammierung unter Linux und UNIX Netzwerkprogrammierung unter Linux und UNIX Bearbeitet von Stefan Fischer, Walter Müller 2. Auflage 1999. Buch. XII, 228 S. Hardcover ISBN 978 3 446 21093 6 Format (B x L): 14 x 20,9 cm Gewicht: 329 g

Mehr

RPC-Codegenerierung Codegenerierung mit Perl

RPC-Codegenerierung Codegenerierung mit Perl RPC-Codegenerierung Codegenerierung mit Perl Martin Vorländer PDV-SYSTEME GmbH Die Ausgangslage q MEDAS q Messdaten-Erfassungs- und -Archivierungs-System q für Industrie-Prozesse; minimale Auflösung: 1

Mehr

39 Object Request Brokers

39 Object Request Brokers 39 Object Request Brokers invoke methods at remote objects (objects that run in another JVM) example ORBs: RMI, JavaIDL OODS 1997-2000 Michael Golm Object Request Brokers 39.312 40 Components of an ORB

Mehr

39 Object Request Brokers

39 Object Request Brokers 39 Object Request Brokers invoke methods at remote objects (objects that run in another JVM) example ORBs: RMI, JavaIDL OODS 1997-2000 Michael Golm Object Request Brokers 39.312 40 Components of an ORB

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 22 Einstieg in die Informatik mit Java Grundlagen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 22 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White

Mehr

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1

Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1 Beuth Hochschule Parameter-Übergabe-Mechanismen WS17/18, S. 1 Parameter-Übergabe-Mechanismen in Java und in anderen Sprachen. 1. Methoden vereinbaren mit Parametern Wenn man (z.b. in Java) eine Methode

Mehr

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form

Mehr

Das Interface-Konzept am Beispiel der Sprache Java

Das Interface-Konzept am Beispiel der Sprache Java Das Interface-Konzept am Beispiel der Sprache Java Klaus Kusche, November 2013 Inhalt Motivation: Wozu braucht man Interfaces? Interfaces in Java Was spricht gegen die große Lösung? Voraussetzungen Kenntnisse

Mehr

Praktikum aus Softwareentwicklung 2, Stunde 8

Praktikum aus Softwareentwicklung 2, Stunde 8 Praktikum aus Softwareentwicklung 2, Stunde 8 Lehrziele/Inhalt 1. Remoting Remoting Über Remoting können Objekte über JavaVMs hinweg miteinander kommunizieren. Das ist auch mit Socket-Programmierung möglich.

Mehr

AvO-Übung 2 Remote Method Invocation

AvO-Übung 2 Remote Method Invocation AvO-Übung 2 Remote Method Invocation Jörg Domaschka und Andreas I. Schmied Institut für Verteilte Systeme 30. Oktober 2007 Übersicht 1 Besprechung der letzten Aufgaben 2 Aufruf-Semantiken 3 Netzwerkkommunikation

Mehr

Kommunikation. Björn und Georg

Kommunikation. Björn und Georg Kommunikation Björn und Georg CORBA CORBA (Common Object Request Broker Architecture) Entwicklung der OMG ( Object Management Group) Zusammenschluss von 800 Firmen Hardware- und Progammiersprachen-unabhängiges

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen 5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter Remote- und Server-Programmierung Dr. Wolfgang Süß Thorsten Schlachter Remote Method Invocation (RMI) Servlets WebServices 2 Remote Method Invocation (RMI) Das Remote Method Invocation (RMI)-Framework

Mehr

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären.

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären. CORBA Lernziele 1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären. Zentrale Idee: Schnittstelle: - mit einer Schnittstelle beschreibt man

Mehr

Informatik II - Tutorium 5

Informatik II - Tutorium 5 Informatik II - Tutorium 5 Vincent Becker vincent.becker@inf.ethz.ch 28.03.2018 Vincent Becker 28.03.2018 1 Neue Webseite Vincent Becker 28.03.2018 3 Allgemeines Java-Konvention: Alle Variablen- und Methodennamen

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 15. Oktober 2015 Betriebssysteme / verteilte

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 15. Oktober 2015 Betriebssysteme / verteilte

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Überblick. Netzprogrammierung 3. Verteilte Objekte in Java RMI. Verteilte Objekte

Überblick. Netzprogrammierung 3. Verteilte Objekte in Java RMI. Verteilte Objekte Überblick Netzprogrammierung 3. Verteilte Objekte in Java RMI 1. Verteilte Objekte / RMI 2. Objektreferenzen 3. Serialisierung 4. Threads und RMI Prof. Dr.-Ing. Robert Tolksdorf Freie Universität Berlin

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Für objektbasiertes Programmieren ist keine objektbasierte Programmiersprache erforderlich!

Für objektbasiertes Programmieren ist keine objektbasierte Programmiersprache erforderlich! 2 Objekte (3) Objekt als abstraktes Konzept Software-Einheit mit Methoden lokalen Daten eindeutiger Identität Programmiermodell auf hohem Abstraktionsniveau Abbildung auf Programmiermodell der Programmiersprache

Mehr