Realisierung verteilter Anwendungen: Teil 4 zBeim vorigen Mal: RMI und Grundlagen von CORBA zInhalt heute yVerteilung und Objektorientierung (Voyager)

Slides:



Advertisements
Ähnliche Präsentationen
EJB, Norbert Schuler1 Enterprise Java Beans z Was sind Enterprise JavaBeans? z Historie z Motivation z Architektur z Konstruktion eines Enterprise.
Advertisements

der Universität Oldenburg
DI Christian Donner cd (at) donners.com
© 2003 Patrick Brunner Spontane Vernetzung – Jini 9. Januar 2004 Spontane Vernetzung Patrick Brunner.
Internetzugriff mit Strings und Streams
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
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.
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
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.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Remote Methode Invocation (RMI)
Proxy Pattern Vorlesung Design Patterns Sieglinde Heinrich
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
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.
JDBC EDV JDBC.
05 - Reflection Das Reflection API Reflection2 Ziel Es kommt vor, dass eine Methode ein Objekt als Parameter übergeben bekommt, ohne dass bekannt.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
© 2006 MPohlig Grundkurs Informatik mit Java 1 JFrame-Vorlage Step by step by step by step by step by step by step by step by.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
Grundlagen der Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Beschreiben Sie das Szenario wenn ein ORB einen Server aktiviert und eine Objektimplementation aufruft. Activate Server impl_is_ready Activate Object (GetID.
Die Architektur von Jini Präsentation von Thomas Heinis & Michea Wankerl Seminar Information & Kommunikation WS 2000/01.
7.1.5 Java RMI – Remote Method Invocation
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Javelin Internet-based parallel computing using Java.
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.
Programmiervorkurs WS 2014/15 Instanzmethoden
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 6: Verteilte Objekte durch RMI.
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Reflection API1 Motivation Reflection API Core Reflection API: java.lang.reflect Seit JDK 1.1 integraler Bestandteil der Java- Klassenbibliothek Ermöglicht:
Enterprise-IT-Praktikum Hibernate-Einführung Institut für Telematik Universität zu Lübeck Wintersmester 2012/13 Dennis Boldt David Gregorczyk.
Objektorientierte Programmierung (OOP)
Rusch Philipp, Spiegel Philipp, Sieber Michael, Ucar Sahin, Wetzel Markus.
Realisierung verteilter Anwendungen: Teil 5 zBeim vorigen Mal: yObjektmigration (Voyager) ySpontane Vernetzung (Jini) zInhalt heute yDynamische Datenbankanfragen.
Objektorientierte Datenbanken
Realisierung verteilter Anwendungen zVoraussetzungen yDatenstrukturen und Algorithmen, Java, HTML, XML zÜbungen im Rahmen des Software-Praktikums zLernziele.
Objektorientierte Datenbanken zBeim vorigen Mal: yJava Data Objects zHeute: yDer Object Data Standard der ODMG-Group xKurz: ODMG-Standard yDie POET-Implementierung.
Realisierung verteilter Anwendungen: Teil 3 zBeim vorigen Mal: Sockets, RMI zInhalt heute yCommon Object Request Broker Architecture (CORBA) zLernziele:
Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines.
GUI Programmierung in Java Branimir Djordjevic. GUI - Wichtige Begriffe -  Die Swing-Bibliothek in Java stellt zum Beispiel die folgenden Windows zur.
Java Programme nur ein bisschen objektorientiert.
© 2012 TravelTainment Einführung in Enterprise JavaBeans Seminarvortrag von Ralf Penners Folie 1 von 34.
JAVA - Einführung. © Übersicht Hintergrund und Geschichte Wie sieht ein JAVA Programm aus ? Was ist ein JAVA Programm ? Wie schreibt/übersetzt.
Vs Java RMI – Remote Method Invocation ( ) (
Vererbung in Java. public abstract class Form { protected int breite; protected int hoehe; protected String farbe; /** * Erzeuge eine Form der Breite.
Konstruktoren.
Dynamisches Laden von Klassen
Grundkurs Informatik 11-13
Remote Method Invocation
 Präsentation transkript:

Realisierung verteilter Anwendungen: Teil 4 zBeim vorigen Mal: RMI und Grundlagen von CORBA zInhalt heute yVerteilung und Objektorientierung (Voyager) ySpontane Vernetzung (Jini) zLernziele: yVerständnis der Probleme und Lösungsansätze bei Objektmigration und spontaner Vernetzung Ralf Möller, FH-Wedel

Voyager zZu Java kompatible Laufzeitumgebung und Bibliothek, die auf eine umfassende Lösung für sehr viele Bereiche und Probleme der Programmierung verteilter Systeme zielt zFunktions- und Leistungsumfang wächst mit jeder neuen Version zIn dieser Vorlesung nur grundlegende Techniken

Basistechniken (1) zEntfernte Objekte yErzeugung eines entfernten Objekts aus einem lokalen Objekt zur Laufzeit und zu jeder Java-Klasse zEntfernte Referenzierung yTransparente Referenzierung entfernter Objekte yTyp: gemeinsames Interface zEntfernte Erzeugung yErzeugung von Objekten in einer anderen VM (statt nur Erzeugung lokaler Objekte) yAutomatische Erzeugung von lokalen Stellvertretern

Basistechniken (2) zVerteilte Garbage Collection yLöschung erst, wenn weder lokale noch entfernte Referenz auf Objekte existieren zAusnahmebehandlung yWeiterleitung von Ausnahmen, die bei einem entfernten Objekt auftreten, an ein lokales Objekt zNamensdienst yBekanntmachung von entfernten Objekten über Namen

Ergänzende Techniken zObjektmigration zMobile Agenten zApplet-zu-Applet-Kommunikation zGruppenkommunikation (Multicast) zAktivierung von Objekten aus DB zDatenbankunabhängige verteilte Persistenz

Voyager-Laufzeitumgebung zLaufzeitumgebung starten: Voyager.startup(String port) yauch: sun> voyager zQuellcode nachladen: VoyagerClassLoader.addResourceLoader(String URL) yauch: sun> voyager c file://usr/local/www/classes/ y lin> voyager c zIntegrierter HTTP-Server: ClassManager.enableResourceServer() yauch: sun> voyager r win> voyager c

Entfernte Objekte zErzeugung von Proxies zur Laufzeit ynicht wie bei RMI zur Übersetzungszeit vorbereitet yähnlich wie bei RMI über lokalen Stellvertreter (Proxy) reference invocation proxy local invocation Proxy.of("B") B reference invocation proxy local invocation Proxy.of("B") B

Beispiel: Baseball mit Voyager zpublic class Ball { ypublic void hit() { System.out.println("Ball has been hit") }} zpublic interface IBall { ypublic void hit(); } zpublic class Ball implements IBall, Serializable {... } zTool zur Erzeugung von Interfaces: igen

Typkompatibles Proxy zu Interface erzeugen zLokale Erzeugung yProxy.of(Object obj) zNamensdienst yNamespace.bind("8000/Ball", iball) zEntfernte Erzeugung yFactory.create(String classname, String url) zBeispiel: yBall ball = new Ball(); yIBall iball = (IBall) Proxy.of(ball) yIBall iball = (IBall) Factory.create("Ball", "sun:8000")

Fortsetzung des Beispiels zimport com.objectspace.voyager.*; zpublic class Bat { ypublic void play(IBall ball) { ball.hit() } ypublic static void main(String args[]) { try { Voyager.startup(); Bat bat = new Bat; IBall ball = (IBall) Factory.create("Ball","sun:8000"); bat.play(ball); } catch (... ) {... } Voyager.shutdown(); } } Konstruktor ohne Argument

Entfernte Konstruktoren mit Argumenten zObject[] arguments = new Object[]{new Integer(5)}; zIBall ball = (IBall) Factory.create("Ball", arguments, "sun:8000"); Konstruktor mit Argumente

Objektmigration (1) zAnwendungsgebiete: yZeitaufwand minimieren yLastbalancierung yBesitz- oder Verantwortungswechsel yMobile Geräte (bzw. nicht-permanent verfügbare Geräte)

Objektmigration (2) zEntfernter Zugriff vs. Migration

Objektmigration (3) zProtokoll für die Migration ytry { y IMobility mobileObj = MobilityOf(a); y mobileObj.moveTo("vodka.fh-wedel.de:8000"); y} catch (MobilityException e) { y... }

Probleme bei der Migration (1) zMigration durch Kopie simulieren? zDurch Migration muß Identität erhalten bleiben zLaufzeitumgebung stellt Korrektheit von "alten" Referenzen auf migrierte Objekte sicher D dA a IC cA aC c sunlinmac

Probleme bei der Migration (1) zMigration durch Kopie simulieren? zDurch Migration muß Identität erhalten bleiben zLaufzeitumgebung stellt Korrektheit von alten Referenzen auf migrierte Objekte sicher D dA a IC c A aC c sunlinmac A a C c

Probleme bei der Migration (2) zWas passiert mit referenzierten Objekten? zKopiersemantik zEventuell problematisch für "normale" Objekte zUnproblematisch für referenzierte Proxies D dA a IC cA aC c sunlinmac

Probleme bei der Migration (2) zWas passiert mit referenzierten Objekten? zKopiersemantik zEventuell problematisch für "normale" Objekte zUnproblematisch für referenzierte Proxies D d IC cA aC c sunlinmac A a IC cA a

Behandlung laufender Aufrufe zimport java.io.*; zpublic class Ball implements IBall, Serializable { ysynchronized public void hit() { System.out.println("Ball has been hit") } z}

Gruppenkommunikation zMulticast oder Publish-Subscribe-Mechanismus zVoyager spaces and subspaces ySubspace localSubspace = new Subspace() zEntfernter Zugriff über Namensraum yIsubspace remoteSubspace = (Isubspace) Namespace.lookup("//sun:9000/Subspace"); localSubspace.connect(remoteSubspace); ylocalSubspace.add(client);

Räume und Unterräume Space Rechner Subspace sunlin winmacnt Verknüpfung

Verteilung von Nachrichten im Unterraum zObject[] parameter = new Object[]{param}; zMulticast.invoke(subspace, "message", parameter, "Class"); zoder: IClass mcastProxy = localSubspace.getMulticastProxy("Class"); z mcastProxy.message(param); sun Nachricht Rechner Objekt Subspace

Mobile Agenten: Kommunikationsschema zOhne Agenten vs. mit Agenten

Bewegung und Aktion von Agenten zVorher: Explizite Migration von Objeken (Unterstützung der Methode moveTo) zAus welcher Motivation heraus werden Agenten bewegt? z"Eigeninitiative!" zBDI-Architektur yBeliefs yDesires yIntentions Wie kann man denn das hinkriegen???

Mobile Agenten: Einsatzgebiete zVerteilte Informationssuche zBörsenbeobachter zElektronischer Preisvergleich zMehrwertleistungen zJust-in-Time-Produktion

Mobile Agenten: Bewertung zVorteile: yReduktion der Netzwerklast yMöglichkeiten zum Offline-Gehen des Auftraggebers während der Agent aktiv ist yFlexiblere Reaktion auf Umgebung möglich als z.B. RMI zNachteile: yKomplexität der Programmierung/Erstellung yInfrastruktur erforderlich ySicherheitsprobleme (für Agenten und für jeweilige Wirtsumgebung)

Dienste in einer Umgebung Internet gateway PDA service Music service Discovery Alarm Camera Guests devices Laptop TV/PC Hotel wireless network

Diensterbringung durch Server

Konfigurierungsproblematik

Spontane Vernetzung zEintreten in eine Gruppe zDienste anbieten / anmelden für Gruppe zNachfrage nach Diensten einer Gruppe zMit einem Dienstinteressenten in Kontakt treten zKonkreten Dienst für bestimmte Zeit zusagen zKein Fehler: sich einfach entfernen, wenn gerade keiner auf eine konkrete Diensterbringung wartet zkein Fehler: sich einfach entfernen, wenn die Zeit für zugesagte Dienste abgelaufen ist zFehler: zugesagten Dienst nicht erbringen

Jini: Registrierung

Jini: Lookup und Leasing

Was ist eine Gruppe / Föderation?

Multicast Request: Service Announcement zDatagramm-Paket auf und Port 4160 Client Lookup Service Provider Service Objekt Service Attributes Nicht über Router geleitet

Multicast Request: Service Announcement zDatagramm-Paket auf und Port 4160 Client Lookup Service Provider Service Objekt Service Attribute Service Proxy Service Attribute

Multicast Request: Service Discovery zDatagramm-Paket auf und Port 4160 Client Lookup Service Provider Service Objekt Service Attributes Service Proxy Service Attributes

Multicast Request: Service Discovery zDatagramm-Paket auf und Port 4160 Client Lookup Service Provider Service Objekt Service Attributes Service Proxy Service Attributes Service Proxy

Multicast Request: Lookup Announcement zDatagramm-Paket auf und Port 4160 Lookup Service Nicht über Router geleitet

Softwarepakete in Java zimport java.rmi.*; zimport java.rmi.server.*; zimport net.jini.core.lookup.*; zimport sun.com.jini.lookup.*; zimport sun.com.jini.lease.*; siehe: Java in verteilten Systemen Marko Boger

Dienste: Beispiel Baseball zpublic class Ball extends UnicastRemoteObject implements RemoteBall ServiceIDListener { ypublic Ball throws RemoteException { super(); } ypublic void serviceIdNotify(ServiceID id) { System.out.println("ServiceId is " + id); } ypublic hit() { System.out.println("Ball has been hit.") } z}

Das Interface RemoteBall zimport java.rmi.* zpublic interface RemoteBall extends Remote { ypublic void hit() throws RemoteException; z}

Das Anmelden von Diensten (1) zKlasse JoinManager und entspr. Konstruktor zÜbergabe des als Service angebotenen Objekts, zdessen Beschreibung, zeines Callback-Objektes und zeines Leasing Managers:

Das Anmelden von Diensten (2) zpublic class BallStarter { ypublic static void main(String[] args) { try { xSystem.setSecurityManager(new RMISecurityManager ()); xRemoteBall ball = (RemoteBall) new Ball(); xLeaseRenewalManager renewal = new LeaseRenewalManager(); xEntry[] attributes = new Entry[]{ new Name("Jini enabled ball") }; xJoinManager join = new JoinManager(ball, attributes, (Ball) ball, renewal); xSystem.out.println("Ball started and registered at Lookup-Server"); y} catch (Exception e) { e.printStackTrace(); } y} z}

Lookup von Diensten: Suche durch Muster zKlasse ServiceTemplate und entspr. Konstruktor zÜbergabe an Konstruktor entweder yeines ServiceID-Objekts yoder einer Service-Beschreibung: xeiner Menge von Klassen xoder einer Menge von Attribut-Wert-Paaren yBeispiel mit Service-Beschreibung als Klasse: xClass[] classes = new Class[] { RemoteBall.class }; xServiceTemplate template = new ServiceTemplate(null, classes, null);

Zugriff auf den Dienstvermittler zRepräsentation des Dienstvermittlers als Objekt zDienstvermittler enthält Registratur zSuchmuster wird an Registratur übergeben zBeispiel: yLookupLocator l = new LookupLocator("jini://sun"); yServiceRegistrar r = l.getRegistrar(); yRemoteBall = b = (RemoteBall) r.lookup(template);

Aufruf eines Dienstes (1) zimport java.rmi.* zimport net.jini.core.discovery.*; zimport net.jini.core.lookup.*; zpublic class Bat { ypublic void play(RemoteBall ball) { try { ball.hit(); System.out.println("I hit the ball"); } catch (RemoteException e) { System.out.println(e) } }

Aufruf eines Dienstes (2) ypublic static void main(String[] args) { xBat bat = new Bat(); xtry { System.setSecurityManager(new RMI SecurityManager ()); x LookupLocator locator = new LookupLocator("jini://sun"); x ServiceRegistrar registrar = locator.getRegistrar(); x Class[] classes = new Class { RemoteBall.class }; x ServiceTemplate template = new ServiceTemplate(null, classes, null); x RemoteBall remoteBall = (RemoteBall) registrar.lookup(template); x bat.play(remoteBall); x} catch (Exception e) { x e.printStackTrace(); x} y}}

Starten und Aufrufen eines Dienstes zHTTP-Server, RMI-Daemon und Jini Lookup-Server starten yjava -cp /usr/remote/java/jini1_0/lib/jini-examples.jar com.sun.jini.example.service.StartService zServer: ysun> java -Djava.rmi.server.codebase= - Djava.security.policy=/jini1_0/batball/policy.all BallStarter ysun| Ball started an registered at Lookup-Server ysun| ServiceId is f7a17bde-e40b-42cb-94d4-bb6d37a999b8 zClient: ylin> java -Djava.security.policy=/jini1_0/batball/policy.all Bat ysun| Ball has been hit ylin| I hit the ball

Leasing zpublic interface Lease { ylong getExpiration(); yvoid renew (long duration) throws LeaseDeniedException, UnknownLeaseException, RemoteException; yvoid cancel() throws UnknownLeaseException, RemoteException; z} zVorher verwendete Klasse LeaseRenewalManager erneuert Leasing-Verträge automatisch

Auch beim nächsten Mal... z... gibt's wieder Neues in der Diskussion über Middleware yDatenbankanschluß (JDBC) yKomponentenorientierte Softwarekonstruktion (Beans) yMultitier-Architekturen (J2EE) xEnterprise Java Beans xServlets, Java Server Pages xXML