C Java RMI. 1 Java. Objektorientierte Sprache

Ähnliche Dokumente
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

C.6 C.8. 1 Java (5) 1 Java (4) 1 Java (6) 2 Java RMI Grundlagen. Sicherheitsmechanismen. Hierarchische Benennung von Interfaces und Klassen

Remote Method Invocation

Remote Method Invocation

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

7.1.5 Java RMI Remote Method Invocation ( (

Java RMI Remote Method Invocation

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Java-Programmierung. Remote Method Invocation - RMI

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

Java Remote Method Invocation (RMI)

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

Remote Method Invocation

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

7 Remote Method Invocation (RMI)

Konzepte von Betriebssystem-Komponenten Middleware RMI

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

Client/Server-Programmierung

Client/Server-Programmierung

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

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

Schematische Schnittstelle eines Naming-Context-Objekts und des Binding-Iterators. BindingIterator. next_one next_n destroy

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken

Programmieren II. Remote-Programmierung. Institut für Angewandte Informatik

Praktikum aus Softwareentwicklung 2, Stunde 8

Praktikum Verteilte Anwendungen

Programmieren in Java

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

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

8.1.5 Java RMI Remote Method Invocation

J Fernmethodenaufrufe Remote Method Invocation (RMI)

Grundlagen verteilter Systeme

E.1 Object Request Brokers

Algorithmen und Datenstrukturen

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Einstieg in die Informatik mit Java

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

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

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

3 Objektorientierte Konzepte in Java

Remote Method Invocation (RMI)

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

Programmieren in Java

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Einführung in die Programmiersprache Java II

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kommunikation. Björn und Georg

Internetanwendungstechnik (Übung)

10.1 Remote Method Invocation (RMI)

Einstieg in die Informatik mit Java

36.2 Example ClassLoader Example Appletviewer

Remote Methode Invocation (RMI) ETIS SS05

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

-Testen verteilter Anwendungen

Javakurs für Anfänger

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Anwendung eines Enterprise Java Beans

Web-Services Implementierung mit Java

Vererbung, Polymorphie

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

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

Repetitorium Informatik (Java)

Java Einführung Klassendefinitionen

Instrumentierung und Dekodierung

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

Szenario 3: Service mit erweiterter Schnittstelle

Einstieg in die Informatik mit Java

3 Objektorientierte Konzepte in Java

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Interfaces und Vererbung

Programmieren in Java -Eingangstest-

12 Abstrakte Klassen, finale Klassen und Interfaces

Einstieg in die Informatik mit Java

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Arrays. Einleitung. Deklarieren einer Array Variablen

Fragen zur OOP in Java

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

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

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Objektserialisierung

Einstieg in die Informatik mit Java

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Java I Vorlesung 6 Referenz-Datentypen

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Wiederholung: Gerüstbeispiel. Vererbungshierarchie: Typ 0

Methoden und Wrapperklassen

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006

Verteiltes Rechnen. Verteilte Dienste mit Java Remote Method Invocation (RMI). Prof. Dr. Nikolaus Wulff

Informatik II Übung 05. Benjamin Hepp 3 April 2017

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Properties und Proxies

Transkript:

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 Übergabe von Parametern Rückgabe eines Ergebnisses statische Methoden (static) sind an Klasse gebunden nicht an Objekte Aufruf über Klassennamen 2

1 Java (2) Objektorientierte Sprache (fortges.) Semantik der Parameterübergabe all-by-object-reference für Objekte Objekt Instanzvariable Aufruf übergebene Referenz all-by-value für andere Datentypen (z.b. Integer) Objekt Aufruf Instanzvariable 42 42 übergebener Wert 3 1 Java (3) Objektorientierte Sprache (fortges.) einfache Vererbung (extends) maximal eine Basisklasse mehrfache Interface-Vererbung (implements) lediglich Schnittstelle jedoch keine Implementirung wird geerbt Interfaces enthalten nur Methoden oder Konstanten keine Attribute/ Instanzvariablen Exception-Handling teilweise obligatorische Deklarieration bei Methoden 4

1 Java (4) Hierarchische Benennung von Interfaces und Klassen Paketname + Klassenname (Package) z.b. java.lang.object weltweite eindeutige Benennung durch Anlehnung des Paketnamens and Domainname z.b. org.aspectix.orb.orb (angelehnt an aspectix.org) ompilierung auf Klassenebene (lass File) übersetzt in interpretierten Byte-ode Dynamisches Laden von Klassen lassloader kann Klassen von beliebigen Quellen laden Threads als Sprachkonzept verfügbar als spezielle Objekte 5 1 Java (5) Sicherheitsmechanismen Byte-ode-Verifier Ausführung des Byte-odes erhält Semantik der Sprache z.b. kein Zugriff auf nicht-öffentliche Instanzvariablen anderer Objekte möglich Sandboxing Klassen eines neuen lassloaders werden von einem SecurityManager kontrolliert versagt oder gewährt Zugriff auf Dateien Zugriff auf Netzwerkverbindungen etc. 6

1 Java (6) JVM, Java Virtual Machine Interpreter für Java lass-files (JIT-ompiler) Ausführungsumgebung für Java Programme bzw. Klassen mehrere lassloader möglich 7 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 Methodenaufrufe an verteilten Java Objekten 8

2.1 Verteilte Java Objekte Schnittstelle verteilte Java Objekte / RMI-Objekte implementieren spezielle 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 9 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; 10

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) { 11 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 von java.rmi.server.unicastremoteobject. exportobject( obj, ) 12

2.3 Erzeugen eines RMI-Objekts (2) Beispiel package avo; public class MyPrinter extends java.rmi.unicastremoteobject implements avo.printer { public void print( String s ) throws java.rmi.remoteexeception { 13 2.3 Erzeugen eines RMI-Objekts (3) RMI ompiler erzeugt Stubklasse für lientseite 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 avi.myprinter_stub erzeugt 14

2.3 Erzeugen eines RMI-Objekts (4) Stubklasse implementiert alle Remote-Interfaces der ursprünglichen Objektklasse ompiler erkennt Remote-Interfaces an Marker-Interface java.rmi.remote Objekte der Stubklasse werden als Stellvertreter auf lientseite benutzt lient hat Java Objektreferenz auf Stubobjekt statt auf lokales Objekt lient Stubobjekt Skeleton RMI-Objekt 15 2.3 Erzeugen eines RMI-Objekts (5) Beispiel für das Erzeugen des Objekts im Java-ode avo.printer p = new avo.myprinter();// Erzeugung des Objekts Objekt wurde durch Basisklasse automatisch exportiert sofort von außen (entfernt) ansprechbar lokaler Aufruf wie bisher entfernter Aufruf (?) Referenz auf RMI-Objekt notwendig 16

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 TP/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 17 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 18

2.4 Finden initialer Referenzen (3) Beispiel auf Serverseite package avo; public class MyPrinter { static void main( String [] args ) { avo.printer p = new avo.myprinter(); java.rmi.naming.bind( "rmi:myprinter", p ); 19 2.4 Finden initialer Referenzen (4) Beispiel auf lientseite package avo; public class Mylient { static void main( String [] args ) { avo.printer p; p= java.rmi.naming.lookup( "rmi:myprinter" ); try { p.print( Testdruck ); catch( java.rmi.remoteexception e) { 20

2.5 Parameterübergabe Parameterübergabesemantik bei lokalen Aufrufen all-by-value für Nicht-Objekttypen (z.b. Integer) all-by-object-reference für Standard-Java-Objekte und lokale RMI-Objekte entfernte RMI-Objekte Referenz auf Stubobjekt wird übergeben lient verwendet Stubobjekt wie lokales Objekt all-by-object-reference Semantik für RMI-Objekte 21 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 all-by-value für Nicht-Objekttypen (z.b. Integer) Datentypen werden kopiert 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 all-by-opy Semantik 22

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 all-by-object-reference Semantik für lokale RMI-Objekte entfernte, expotierte RMI-Objekte Einfügung des vorhandenen Stubobjekts in den Bytestrom all-by-object-reference Semantik für entfernte RMI-Objekte 23 3 Programmiermodell Erweiterung des Java-Programmiermodells Programmiermodell von Java Java RMI Wesentliche Änderungen gegenüber Java Interface obligatorisch Exception-Handling obligatorisch veränderte Parameterübergabesemantik bei übergebenen Nicht-RMI-Objekten Zugriffstransparenz verletzt keine Erkennung von doppelten Object-Locks Deadlock beim Wiedereintritt in das selbe RMI-Objekt 24

3 Programmiermodell (2) Bewahrte Konzepte aus dem Java-Programmiermodell Objekte Methodenaufrufe syntaktisch gleich Parameterübergabesemantik für übergebene RMI-Objekte und Nicht-Objekte Typisierung volle Typisierung im verteilten Fall (dynamische) Type-asts auch für RMI-Objekte möglich Stubobjekte besitzen alle Methoden des Originals Garbage ollection transparente Speicherbereinigung verteiltes Verfahren zur Speicherbereinigung basierend auf Leases 25 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 lass-path (?) 26

4 Dynamisches Klassenladen (2) Serverseite Bereitstellung der Klassen über einen externen Server Web-Server FTP-Server File-Server odebase-url gibt Wurzel für Klassen pro Server an odebase muss beim Server-Lauf festgelegt werden Java Property java.rmi.server.codebase liefert odebase-url z.b. java -Djava.rmi.server.codebase=http://wwwvs.informatik.uni-ulm.de/teach/ws04/avo/classes/ 27 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 odebase in Bytestrom ein empfangendes RMI-System: 1. Suche der Klasse lokal 2. falls nicht gefunden: Laden der Klasse über odebase + Klassenname z.b. Klasse avo.myprinter_stub unter http://www-vs.de/teach/ws04/avo/classes/avo/ MyPrinter_Stub.class 3. falls nicht gefunden: Laden der Klasse über clientseitig definierte odebase (z.b. über odebase-property) 4. falls nicht gefunden: lassnotfoundexception für entfernt geladene Klassen steht odebase für erneute Weitergabe fest 28