7.1.5 Java RMI – Remote Method Invocation

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Objektorientierte Programmierung
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Einführung in die Programmierung Zusammenfassung
Kritische Betrachtung
DI Christian Donner cd (at) donners.com
Imperative Programmierung -Entwicklungswerkzeuge
Objektorientierte Programmierung
Tomcat Web-Server installieren
Internetzugriff mit Strings und Streams
Abstrakte Klassen HS Merseburg (FH) WS 06/07.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Abstrakte Klassen.
Ein Beispiel in Java.
Konstruktoren.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Interface bzw. Schnittstelle anschaulich: Hüllenklasse
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Objektorientierte Programmierung JDK-Klassenbibliothek
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
JAVA RMI.
Remote Methode Invocation (RMI)
Einführung in Java Alexander Dreßler modifiziert Peter Brichzin und Matthias Spohrer Literatur Installation der Programme.
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG1 - Applets1 Applets. DVG1 - Applets2 Die Klasse Applet n Applets sind Grafikobjekte, die unter Steuerung eines anderen Programms (z.B. eines Browsers,
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Vererbung Einfache Vererbung – Erben von abstrakten Klassen – Implementieren eines Interfaces.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Sommersemester 2004 Jan Drewnak Entwicklung und Einsatz von Geosoftware I Praktikum Sitzung 7 Sitzung 7: User Interfaces in Java.
Herzlich Willkommen zu „Einführung in die Programmierung mit Java“
Teil II Objekte ergeben ein Ganzes
Objektorientiertes Konstruieren
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Parallele Programmierung in Java
Javelin Internet-based parallel computing using Java.
Programmiervorkurs WS 2014/15 Instanzmethoden
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Vs Grundzüge der Fernaufruf-Implementierung = tatsächliche Aufrufbeziehungen Netz Fernaufrufdienst Transportdienst Hardware BS aus Bibl. Vertreter.
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
8.4 Microsoft.NET Framework =  CLR – Common Language Runtime ist objektorientierte virtuelle Maschine für Ausführung.
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
7.5.5 Namensdienste (bereits erwähnte Beispiele: Rmiregistry, Portmapper)  dienen der Abbildung von „Namen“ auf Verweise, Nummern,...  sollten ihre Information.
Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 6: Verteilte Objekte durch RMI.
Java-Kurs Übung Besprechung der Hausaufgabe
NET Remoting.Net („dotnet“) :von Microsoft eingeführte Plattform für verteilte Anwendungen, virtuelle Maschine für die verteilte Ausführung von.
MD 4/02 CORBA Static/Dynamic Invocation Interface (SII/DII), Interface Repository.
Java Programme nur ein bisschen objektorientiert.
Vs Java RMI – Remote Method Invocation ( ) (
 Präsentation transkript:

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 ) (http://java.sun.com/docs/books/tutorial/rmi ) (http://java.sun.com/developer/onlineTraining/rmi/RMI.html ) Unterstützung von Fernaufrufen durch Bibliothekspakete java.rmi java.rmi.server java.rmi.registry und weitere . . . RMI bietet leider nur begrenzte Verteilungsabstraktion. vs7.1.5

7.1.5.1 Grundzüge der Fernaufruf-Programmierung in Java  interface Remote Für fernaufrufbares Objekt und sein Vertreterobjekt muß gemeinsame Schnittstelle definiert werden, die von java.rmi.Remote erben muß, z.B. import java.rmi.*; interface RemoteService extends Remote { String echo(String s) throws RemoteException; } Spätere Vertretererzeugung gelingt nur dann, wenn die Ausnahme java.rmi.RemoteException vereinbart wird. vs7.1.5

 class UnicastRemoteObject Klasse eines fernaufrufbaren Objekts muß von java.rmi.server.UnicastRemoteObject erben, z.B. import java.rmi.*; import java.rmi.server.*; class Server extends UnicastRemoteObject implements RemoteService { public Server() throws RemoteException { } nötig! private String memo = ""; public String echo(String s) // throws entbehrlich! { return memo += s; } } UnicastRemoteObject redefiniert die Operationen von Object und registriert das fernaufrufbare Objekt bei der RMI-Verwaltung. Achtung: Ein Server-Objekt kann durchaus auch lokal benutzt werden. vs7.1.5

Namensdienst ist über statische Operationen der Klasse  class Naming: Namensdienst ist über statische Operationen der Klasse java.rmi.Naming erreichbar: public static void rebind(String name, Remote object) throws RemoteException, MalformedURLException // java.net public static Remote lookup(String name) throws NotBoundException, RemoteException, MalformedURLException (weitere Operationen: bind, unbind, list ) vs7.1.5

Der Parameter String name ist im URL-Format anzugeben – er identifiziert den Station und Port des Namensdienstes und Enthält den eigentlichen Objektnamen: [ // host [ : port ] / ] name Adresse des Namensdienstes Standard-Host = lokale Station Standard-Port = 1099 Ein Namensdienst wird (unter Unix) gestartet mit rmiregistry [ port ] & (und sollte – wenn nicht mehr benötigt – mit kill beendet werden) Achtung: Inhalt verändern nur lokal, Inhalt befragen auch entfernt ! vs7.1.5

Server -Objekt erzeugen und beim (lokalen) Namensdienst registrieren: Anbieterseitig: Server -Objekt erzeugen und beim (lokalen) Namensdienst registrieren: Naming.rebind("Service", new Server()); Klientenseitig: Klient erfragt Objekt beim Namensdienst: RemoteService s = (RemoteService)Naming.lookup("//obelix/Service"); System.out.println(s.echo("bla"); Casting erforderlich! Es wird geprüft, ob das von lookup gelieferte Vertreterobjekt tatsächlich die benötigte Schnittstelle implementiert. vs7.1.5

7.1.5.2 Vertretererzeugung und -installation Vertretergenerator heißt RMI Compiler und wird aufgerufen mit rmic <ServerClass> also z.B. rmic Server ( - nicht mit Schnittstelle RemoteService !) und generiert Stubs – bereits als .class -Dateien Eingabe Ausgabe Server_Stub.class (Vertreter) Server.class Server_Skel.class (Treiber) vs7.1.5

Installation der .class-Dateien: CLASSPATH geeignet setzen!  Beim Erzeugen des fernaufrufbaren Objekts muss der zugehörige Treiber-Code greifbar sein.  Beim Registrieren des fernaufrufbaren Objekts beim Namensdienst muss auch der zugehörige Vertreter-Code greifbar sein - denn Vertreter-Objekt samt Code (s.u. ) wird zum Namensdienst geschickt.  Beim Erzeugen des Vertreter-Objekts beim Klienten – als Folge der Anfrage beim Namensdienst – muss dort der Vertreter-Code greifbar sein. (Alternative: Namensdienst liefert Vertreter-Objekt samt Code (s.o.) – sofern Security Manager das Herunterladen erlaubt; vgl. 7.2.4) vs7.1.5

7.1.5.3 Von der Programmierung bis zur verteilten Ausführung import java.rmi.*; // Anbieter-Code Server.java import java.rmi.server.*; // Start mit java Server & interface RemoteService extends Remote { String echo(String s) throws RemoteException; } class Server extends UnicastRemoteObject implements RemoteService { public Server() throws RemoteException { } private String memo = ""; public String echo(String s) { return memo += s+" "; } public static void main(String[] arg) throws Exception { Naming.rebind("Service", new Server()); } // Programm stoppt hier nicht – wegen verborgener RMI Threads vs7.1.5

Übersetzen auf Server-Maschine obelix: javac Server.java liefert RemoteService.class Server.class Erzeugung der Stubs: rmic Server liefert Server_Stub.class Server_Skel.class Namensdienst einrichten (falls nicht schon vorhanden): rmiregistry & Server starten (er registriert sich selbst beim Namensdienst): java Server & vs7.1.5

… und hier ein Beispiel-Klient: import java.rmi.*; // Klienten-Code Client.java import java.io.*; // Start mit java Client host text interface RemoteService extends Remote { String echo(String s) throws RemoteException; } class Client { public static void main(String[] arg) throws Exception { RemoteService s = (RemoteService)Naming.lookup("//"+arg[0]+"/Service"); System.out.println(s.echo(arg[1])+"\n"); System.exit(0); Damit das Programm nicht Fernaufrufe wegen der RMI Threads hängenbleibt vs7.1.5

Übersetzen auf irgendeiner Klienten-Maschine: javac Client.java Vertreter-Code bereitstellen, Server_Stub.class , über Netzdateisystem oder Dateiübertragung von Server-Maschine obelix Klient z.B. wiederholt starten: > java Client obelix hallo hallo hallo hallo hallo hallo hallo vs7.1.5

Alternatives Szenario mit separater Entwickler-Station: Entwickler-Station Klienten-Station Anbieter-Station > javac Server.java > javac Client.java > rmic Server RemoteService.class RemoteService.class RemoteService.class Server.class Server.class Client.class Client.class Server_Stub.class Server_Stub.class Server_Stub.class Server_Skel.class Server_Skel.class > rmiregistry & > java Server & > java Client elfe bla bla > vs7.1.5

7.1.5.4 Verweise in Fernaufruf-Parametern Übergeben wird entweder Vertreter oder Kopie des Objekts:  Schnittstelle des formalen Parameters erbt von Remote: aktueller Parameter muß (statisch) gleiche Schnittstelle implementieren, (dynamisch) von UnicastRemoteObject erben, andernfalls MarshalingException  Netzverweis/Vertreterobjekt wird übergeben vs7.1.5

 Schnittstelle des formalen Parameters erbt nicht von Remote: aktueller Parameter muß (statisch) gleiche Schnittstelle implementieren, (dynamisch) Schnittstelle java.io.Serializable implementieren, andernfalls MarshalingException  Objektkopie wird übergeben In Objekte eingebettete Verweise werden entsprechend behandelt ! Felder (arrays) und Zeichenketten (strings) sind serializable ! vs7.1.5

Wenn ein formaler Parameter einen Schnittstellentyp hat, kennt man Achtung! Wenn ein formaler Parameter einen Schnittstellentyp hat, kennt man vom aktuellen Parameter nur diese Schnittstelle (unabhängig davon, ob es sich um einem lokalen oder einen Fernaufruf handelt). Wird ein fernaufrufbares UnicastRemoteObject übergeben, so weiß man nicht, ob das Objekt tatsächlich entfernt oder aber lokal vorliegt. Handelt es sich um ein serialisierbares Objekt, so wird in Abhängigkeit von seiner Lage entweder eine Kopie oder das Objekt selbst geliefert!  Die Semantik des Aufrufs ist nicht eindeutig bestimmt ! (siehe dazu auch Brose/Löhr/Spiegel: Java resists transparent distribution) vs7.1.5

werden erst bei Bedarf erzeugt – allerdings nach vorangegangener 7.1.5.5 Aktivierbare Objekte werden erst bei Bedarf erzeugt – allerdings nach vorangegangener Registrierung über den RMI Daemon rmid import java.rmi.activation.*; class Server extends Activatable implements RemoteService {............ public Server(ActivationID id, MarshalledObject data) throws RemoteException { super(id, 0); } } // Register the object with the activation system // then export it on an anonymous port Server.class muss bei rmid, die zugehörige Vertreterklasse beim Namensdienst registriert werden – dafür muss ein setup-Programm geschrieben werden. http://java.sun.com/j2se/1.3/docs/guide/rmi/activation.html vs7.1.5