C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces...

18
2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/ C Java RMI C.1 2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/ 1 Java Objektorientierte Sprache Objekte und andere Datentypen: int, float, boolean, etc. Objektreferenzen Verweise auf Objekte keine Zeiger, Adressen o.ä. Methodenaufruf bei vorhandener Objektreferenz Übergabe von Parametern Rückgabe eines Ergebnisses statische Methoden (static) sind an Klasse gebunden nicht an Objekte Aufruf über Klassennamen C.2

Transcript of C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces...

Page 1: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

C Java RMI

C.1

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

1 Java

■ Objektorientierte Sprache

◆ Objekte

• und andere Datentypen: int, float, boolean, etc.

◆ Objektreferenzen

• Verweise auf Objekte

• keine Zeiger, Adressen o.ä.

◆ Methodenaufruf

• bei vorhandener Objektreferenz

• Übergabe von Parametern

• Rückgabe eines Ergebnisses

◆ statische Methoden (static)

• sind an Klasse gebunden nicht an Objekte

• Aufruf über Klassennamen

C.2

Page 2: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

1 Java (2)

■ Objektorientierte Sprache (fortges.)

◆ Semantik der Parameterübergabe

• Call-By-Object-Reference für Objekte

• Call-By-Value für andere Datentypen (z.B. Integer-Typ)

ObjektAufruf

übergebene ReferenzInstanzvariable

ObjektAufruf

übergebener WertInstanzvariable42

42

C.3

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

1 Java (3)

■ Objektorientierte Sprache (fortges.)

◆ einfache Vererbung (extends)

• maximal eine Basisklasse

◆ mehrfache Interface-Vererbung (implements)

• lediglich Schnittstelle jedoch keine Implementierung wird geerbt

• Interfaces enthalten nur Methoden oder Konstanten keine Attribute/Instanzvariablen

■ Exception-Handling

◆ teilweise obligatorische Deklaration bei Methoden

C.4

Page 3: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

1 Java (4)

■ Hierarchische Benennung von Interfaces und Klassen

◆ Paketname + Klassenname (Package)

• z.B. java.lang.Object

◆ weltweite eindeutige Benennung durch Anlehnung des Paketnamens an Domainname

• z.B. org.aspectix.orb.Orb (angelehnt an aspectix.org)

■ Compilierung auf Klassenebene (Class File)

◆ übersetzt in interpretierten Byte-Code

■ Dynamisches Laden von Klassen

◆ ClassLoader kann Klassen von beliebigen Quellen laden

■ Threads als Sprachkonzept

• verfügbar als spezielle Objekte

C.5

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

1 Java (5)

■ Sicherheitsmechanismen

◆ Byte-Code-Verifier

• Ausführung des Byte-Codes erhält Semantik der Sprache– z.B. kein Zugriff auf nicht-öffentliche Instanzvariablen

anderer Objekte möglich

◆ Sandboxing

• Klassen eines neuen ClassLoaders werden von einem SecurityManager kontrolliert

• versagt oder gewährt— Zugriff auf Dateien— Zugriff auf Netzwerkverbindungen— etc.

C.6

Page 4: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

1 Java (6)

■ JVM, Java Virtual Machine

◆ Interpreter für Java Class-Files (JIT-Compiler)

◆ Ausführungsumgebung für Java Programme bzw. Klassen

◆ mehrere ClassLoader möglich

C.7

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2 Java RMI Grundlagen

■ Java Remote Method Invocation

◆ Erweiterung des Java Programmiermodells für Verteilung

◆ mehrere JVMs spannen eine verteilte Rechenplattform auf

■ Verteilungseinheiten

◆ Java Objekte

■ Verteilungstransparenz

◆ orts- und zugriffstransparente Methodenaufrufean verteilten Java Objekten

C.8

Page 5: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.1 Verteilte Java Objekte

■ Schnittstelle

◆ verteilte Java Objekte / RMI-Objekte implementierenspezielle Java-Interfaces

◆ genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote erbt

◆ dient als Marker, enthält keine Methoden

◆ alle Methoden in von java.rmi.Remote erbenden Interfaces müssen die Exception java.rmi.RemoteException deklarieren

• zeigt Fehler bei entfernten Aufrufen an– in der Regel At-Most-Once-Semantik

• es kann auch eine Basisklasse deklariert werden, z.B.java.io.IOException oder java.lang.Exception

C.9

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.1 Verteilte Java Objekte (2)

■ Beispiel

package avo;

public interface Printer implements java.rmi.Remote {public void print( String s )

throws java.rmi.RemoteException;}

C.10

Page 6: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.1 Verteilte Java Objekte (2)

■ Entfernt ansprechbare Methoden

◆ entfernt sind nur die Methoden aus Interfaces ansprechbar, die von Remote erben

◆ andere Methoden und Instanzvariablen sind nur lokal ansprechbar

■ Referenzen

◆ Referenzen nur mit dem Namen eines Remote-Interfaces typisieren

◆ nicht mit dem Klassennamen der Implementierung

◆ Beispiel:

avo.Printer p;... try {

p.print( “Testdruck” );}catch( java.rmi.RemoteException e) {

... }

C.11

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.2 Erzeugen eines RMI-Objekts

■ Übliches Vorgehen

◆ Implementierungsklasse erbt/implementiert mind. ein Remote-Interface

◆ Implementierungsklasse erbt von java.rmi.server.UnicastRemoteObject

• bereitet Objektinstanz für entfernte Aufrufe: exportiert Objekt

■ Alternative

◆ Implementierungsklasse erbt/implementiert mind. ein Remote-Interface

◆ manuelles Vorbereiten für entfernte Aufrufe:

• Aufruf vonjava.rmi.server.UnicastRemoteObject.exportObject( obj, ... )

C.12

Page 7: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.3 Erzeugen eines RMI-Objekts (2)

■ Beispiel

package avo;

public class MyPrinter extends java.rmi.UnicastRemoteObjectimplements avo.Printer {

... public void print( String s )

throws java.rmi.RemoteExeception {...

} ...

}

C.13

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.3 Erzeugen eines RMI-Objekts (3)

■ RMI Compiler

◆ erzeugt Stubklasse für Clientseite

• nur bis Java 1.4 notwendig

• ab Java 1.5 (Java 2 Version 5) generische Stubs

◆ erzeugt Skeletonklasse für Serverseite

• nur bis Java 1.1 notwendig

• ab Java 1.2 generische Skeletons

◆ Kommando rmic

• z.B. für avo.MyPrinter wird Stubklasse avo.MyPrinter_Stuberzeugt

C.14

Page 8: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.3 Erzeugen eines RMI-Objekts (4)

■ Stubklasse implementiert alle Remote-Interfaces der ursprünglichen Objektklasse

◆ Compiler erkennt Remote-Interfaces an Marker-Interface java.rmi.Remote

■ Objekte der Stubklasse

◆ werden als Stellvertreter auf Clientseite benutzt

◆ Client hat Java Objektreferenz auf Stubobjekt

• statt auf lokales Objekt

Client RMI-ObjektStubobjekt Skeleton

C.15

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.3 Erzeugen eines RMI-Objekts (5)

■ Beispiel für das Erzeugen des Objekts im Java-Code

◆ Objekt wurde durch Basisklasse automatisch exportiert

• sofort von außen (entfernt) ansprechbar

◆ lokaler Aufruf wie bisher

◆ entfernter Aufruf (?)

• Referenz auf RMI-Objekt notwendig

... avo.Printer p = new avo.MyPrinter();// Erzeugung des Objekts...

C.16

Page 9: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.4 Finden initialer Referenzen

■ Namensdienst zum Registrieren von Objekten

◆ Klasse java.rmi.registry.LocateRegistry

• erlaubt das Erzeugen einer Namensdienst-Instanz

• erlaubt das Erzeugen einer Objektreferenz zu einer (entfernten) Namensdienst-Instanz

• Hostname und Portnummer für TCP/IP-Verbindungen zum Namensdienst müssen bekannt sein

◆ Objektreferenz ist vom Remote-Interface java.rmi.registry.Registry

• bind( String s, Remote obj )

registriert Objekt obj unter Name s

• lookup( String s )

gibt Objektreferenz für Objekt mit Namen s zurück

C.17

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.4 Finden initialer Referenzen (2)

■ Naming-Interface

◆ abkürzender Zugriff auf bestehende Registry

◆ statische Methoden der Klasse java.rmi.Naming

• bind( String s, Remote obj )registriert Objekt obj unter Name s

• lookup( String s )gibt Objektreferenz für Objekt mit Namen s zurück

• String s ist von der Form: rmi://host:port/objectname— host = Rechner, auf dem Registry läuft— port = Portnummer, unter der Registry registriert ist— objectname = Objektname beim Registrieren bzw. Nachfragen

C.18

Page 10: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.4 Finden initialer Referenzen (3)

■ Beispiel

◆ auf Serverseite

package avo;

public class MyPrinter extends java.rmi.UnicastRemoteObject {...static void main( String [] args ) {

...avo.Printer p = new avo.MyPrinter();java.rmi.Naming.bind( "rmi:MyPrinter", p ); ...

}...public void print( String s )

throws java.rmi.RemoteExeception {...

} }

C.19

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.4 Finden initialer Referenzen (4)

■ Beispiel

◆ auf Clientseite

package avo;

public class MyClient {...static void main( String [] args ) {

...avo.Printer p;p= java.rmi.Naming.lookup( "rmi:MyPrinter" ); ...try {

p.print( “Testdruck” );}catch( java.rmi.RemoteException e) {

...}

}}

C.20

Page 11: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.5 Parameterübergabe

■ Parameterübergabesemantik bei lokalen Aufrufen

◆ Call-By-Value für Nicht-Objekttypen (z.B. Integer)

◆ Call-By-Object-Reference für Standard-Java-Objekte undlokale RMI-Objekte

◆ entfernte RMI-Objekte

• Referenz auf Stubobjekt wird übergeben

• Client verwendet Stubobjekt wie lokales Objekt

➜ Call-By-Object-Reference Semantik für RMI-Objekte

ObjektAufruf

übergebene ReferenzInstanzvariable

C.21

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.5 Parameterübergabe (2)

■ Parameterübergabesemantik bei entfernten Aufrufen

◆ Marshalling der Parameter

• Parameter werden serialisiert (Java Serialization)

• Erzeugung eines Bytestroms aus den Parametern

• Übertragung des Bytestroms

• Regenerierung der Datentypen und Java-Objekte aus Bytestrom

◆ Call-By-Value für Nicht-Objekttypen (z.B. Integer)

• Datentypen werden kopiert

• Beispiel:

ObjektAufruf

übergebener WertInstanzvariable42

42

Knotengrenze

C.22

Page 12: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.5 Parameterübergabe (3)

◆ serialisierbare Java-Objekte und lokale, nicht-exportierte RMI-Objekte

• Serialisierung führt zu vollständiger Kopie eines Objekts und seiner untergeordneten Objekte

• evtl. große transitive Hülle zu übertragender Daten– aber: Erhaltung der Objektstruktur über alle Parameter

• Call-By-Copy Semantik

ObjektAufruf

übergebene ObjektstrukturInstanzvariable

Knotengrenze

C.23

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.5 Parameterübergabe (3)

■ Parameterübergabesemantik bei entfernten Aufrufen (fortges.)

◆ nicht-serialisierbare Java-Objekte

• nicht übertragbar: MarshalException

◆ lokale, exportierte RMI-Objekte

• Einfügung eines geeigneten Stubobjekts in den Bytestrom

• Regenerierung des Stubobjekts auf der Empfängerseite

➜ Call-By-Object-Reference Semantik für lokale RMI-Objekte

◆ entfernte, exportierte RMI-Objekte

• Einfügung des vorhandenen Stubobjekts in den Bytestrom

➜ Call-By-Object-Reference Semantik für entfernte RMI-Objekte

ObjektAufruf

übergebene ReferenzInstanzvariable

C.24

Page 13: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.6 Beispiel

■ Aufbau der Referenz über Namensdienst

JVM Client

JVM Registry

JVM Server

MyPrinterMyClient

Registry

2:bind()1:Ref

3:Ref

4:lookup()

C.25

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

2.6 Beispiel (2)

■ Aufbau der Stubs und Skeletons

JVM Client

JVM Registry

JVM Server

MyPrinterMyClient

Registry

C.26

Page 14: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

3 Programmiermodell

■ Erweiterung des Java-Programmiermodells

▲ Wesentliche Änderungen gegenüber Java

◆ Interface obligatorisch

◆ Exception-Handling obligatorisch

◆ veränderte Parameterübergabesemantik bei übergebenenNicht-RMI-Objekten

• Zugriffstransparenz verletzt

◆ keine Erkennung von doppelten Object-Locks

• Deadlock beim Wiedereintritt in das selbe RMI-Objekt

Programmiermodell von JavaJava RMI

C.27

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

3 Programmiermodell (2)

✱ Bewahrte Konzepte aus dem Java-Programmiermodell

◆ Objekte

• Methodenaufrufe syntaktisch gleich

◆ Parameterübergabesemantik für übergebene RMI-Objekteund Nicht-Objekte

◆ Typisierung

• volle Typisierung im verteilten Fall

• (dynamische) Type-Casts auch für RMI-Objekte möglich– Stubobjekte besitzen alle Methoden des Originals

◆ Garbage Collection

• transparente Speicherbereinigung

• verteiltes Verfahren zur Speicherbereinigung basierend auf Leases

C.28

Page 15: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

4 Dynamisches Klassenladen

■ Deserialisierung

◆ Objektinstanzen werden regeneriert

• Instanzvariablen werden restauriert

◆ pro JVM und pro Objekt muss Klasse verfügbar sein

◆ im Verteilten System Verfügbarkeit der Klassen nicht automatisch garantiert

■ Serialisierter Bytestrom enthält Objektdaten keine Klassen

◆ Klassenname wird übertragen

◆ Klasse lokal vorhanden:

• Verwendung für regenerierte Objektinstanz

◆ Klasse nicht lokal vorhanden:

• Möglichkeit des dynamischen Ladens der Klasse über das Netzwerk

• Class-Path (?)

C.29

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

4 Dynamisches Klassenladen (2)

■ Serverseite

◆ Bereitstellung der Klassen über einen externen Server

• Web-Server

• FTP-Server

• File-Server

• Codebase-URL gibt Wurzel für Klassen pro Server an

◆ Codebase muss beim Server-Lauf festgelegt werden

• Java Property java.rmi.server.codebaseliefert Codebase-URL z.B.java -Djava.rmi.server.codebase=http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/classes/ ...

C.30

Page 16: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

4 Dynamisches Klassenladen (3)

■ Weitergabe von Referenzen auf RMI-Objekte

◆ z.B. bei Registrierung in Registry oder Namensdienst

◆ Stubobjekt wird serialisiert

• RMI-System trägt Klassenname und Codebase in Bytestrom ein

◆ empfangendes RMI-System:

1. Suche der Klasse lokal

2. falls nicht gefunden: Laden der Klasse über Codebase + Klassennamez.B. Klasse avo.MyPrinter_Stub unterhttp://www-vs....de/teach/ws04/avo/classes/avo/

MyPrinter_Stub.class

3. falls nicht gefunden: Laden der Klasse über clientseitig definierteCodebase (z.B. über Codebase-Property)

4. falls nicht gefunden: ClassNotFoundException

◆ für entfernt geladene Klassen steht Codebase für erneute Weitergabe fest

C.31

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

4 Dynamisches Klassenladen (4)

■ Beispiel

◆ Code für MyPrinter_Stub wird dynamisch geladen

JVM Registry

JVM Server

MyPrinter

RegistryWebserver

C.32

Page 17: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

4 Dynamisches Klassenladen (5)

■ Beispiel

◆ Code für MyPrinter_Stub wird dynamisch geladen

JVM Registry

JVM Server

MyPrinter

RegistryWebserver

JVM Client

MyClient

C.33

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

5 Implementierung

■ Vorgabe eines RMI-Gerüstes durch Sun Microsystem

◆ verschiedene Implementierungen möglich

• meist jedoch die von Sun verwendet (Package sun.rmi)

C.34

Page 18: C Java RMI - fileverteilte Java Objekte / RMI-Objekte implementieren spezielle Java-Interfaces genauer: mindestens ein Java-Interface, das direkt oder indirekt von java.rmi.Remote

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

5.1 Client-Seite

■ Implementierung der Stubs

RemoteObject

RemoteStub

MyPrinter_Stub

0..1

<<Interface>>RemoteRef

◆ sichtbare RMI-Komponenten

◆ RemoteObject

• Basisklasse für Stubs und RMI-Objekte

◆ RemoteStub

• Basisklasse für alle Stubs

◆ RemoteRef

• Interface für Protokollimplementierung

C.35

2002-2005, Franz J. Hauck, Verteilte Systeme, Univ. Ulm, [2005w-AvO-C-RMI.fm, 2005-10-14 11.08] http://www-vs.informatik.uni-ulm.de/teach/ws04/avo/

5.1 Client-Seite (2)

■ Stub generalisiert Aufrufe

■ Aufruf der invoke()-Methode an RemoteRef

◆ wie bei Java-Reflection

• Method-Objekt bezeichnet Methode, Object-Array bezeichnet Parameter

■ Java Remote Method Protocol (JRMP)

◆ im Wesentlichen Java-Serialisierung

• Annotierung der Codebase, falls vorhanden

◆ Signalisierung von Aufrufen

◆ Multiplexen mehrerer Aufrufe

◆ Adressierung über Hostname/IP-Adresse, Portnummer

• Bestandteil der RemoteRef

◆ weitere Adressierung über Objektidentifikator

C.36