Realisierung verteilter Anwendungen: Teil 4 zBeim vorigen Mal: RMI und Grundlagen von CORBA zInhalt...

51
Realisierung verteilter Anwendungen: Teil 4 Beim vorigen Mal: RMI und Grundlagen von CORBA Inhalt heute Verteilung und Objektorientierung (Voyager) Spontane Vernetzung (Jini) Lernziele: Verständnis der Probleme und Lösungsansätze bei Objektmigration und spontaner Vernetzung Ralf Möller, FH-Wedel

Transcript of Realisierung verteilter Anwendungen: Teil 4 zBeim vorigen Mal: RMI und Grundlagen von CORBA zInhalt...

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

Realisierung verteilter Anwendungen: Teil 4

Beim vorigen Mal: RMI und Grundlagen von CORBA

Inhalt heute Verteilung und Objektorientierung (Voyager) Spontane Vernetzung (Jini)

Lernziele: Verständnis der Probleme und Lösungsansätze bei

Objektmigration und spontaner Vernetzung

Ralf Möller, FH-Wedel

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

Voyager

Zu Java kompatible Laufzeitumgebung und Bibliothek, die auf eine umfassende Lösung für sehr viele Bereiche und Probleme der Programmierung verteilter Systeme zielt

Funktions- und Leistungsumfang wächst mit jeder neuen Version

In dieser Vorlesung nur grundlegende Techniken

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

Basistechniken (1)

Entfernte Objekte Erzeugung eines entfernten Objekts aus einem

lokalen Objekt zur Laufzeit und zu jeder Java-KlasseEntfernte Referenzierung

Transparente Referenzierung entfernter Objekte Typ: gemeinsames Interface

Entfernte Erzeugung Erzeugung von Objekten in einer anderen VM

(statt nur Erzeugung lokaler Objekte) Automatische Erzeugung von lokalen Stellvertretern

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

Basistechniken (2)

Verteilte Garbage Collection Löschung erst, wenn weder lokale noch entfernte

Referenz auf Objekte existierenAusnahmebehandlung

Weiterleitung von Ausnahmen, die bei einem entfernten Objekt auftreten, an ein lokales Objekt

Namensdienst Bekanntmachung von entfernten Objekten über

Namen

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

Ergänzende Techniken

ObjektmigrationMobile AgentenApplet-zu-Applet-KommunikationGruppenkommunikation (Multicast)Aktivierung von Objekten aus DBDatenbankunabhängige verteilte Persistenz

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

Voyager-Laufzeitumgebung

Laufzeitumgebung starten:Voyager.startup(String port) auch: sun> voyager <port>

Quellcode nachladen: VoyagerClassLoader.addResourceLoader(String URL) auch: sun> voyager 8000 -c file://usr/local/www/classes/ lin> voyager 7000 -c http://www.fh-wedel.de/classes/

Integrierter HTTP-Server: ClassManager.enableResourceServer() auch: sun> voyager 8000 -r

win> voyager 9000 -c http://sun.fh-wedel.de:8000/

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

Entfernte Objekte

Erzeugung von Proxies zur Laufzeit nicht wie bei RMI zur Übersetzungszeit vorbereitet ähnlich wie bei RMI über lokalen Stellvertreter

(Proxy)

reference invocationproxy local

localinvocation

Proxy.of("B") B

reference invocationproxy local

localinvocation

Proxy.of("B") B

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

Beispiel: Baseball mit Voyager

public class Ball { public void hit() {

System.out.println("Ball has been hit") }}public interface IBall {

public void hit(); }public class Ball implements IBall,

Serializable { ... }

Tool zur Erzeugung von Interfaces: igen

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

Typkompatibles Proxy zu Interface erzeugenLokale Erzeugung

Proxy.of(Object obj)Namensdienst

Namespace.bind("8000/Ball", iball)Entfernte Erzeugung

Factory.create(String classname, String url)Beispiel:

Ball ball = new Ball(); IBall iball = (IBall) Proxy.of(ball) IBall iball = (IBall) Factory.create("Ball", "sun:8000")

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

Fortsetzung des Beispielsimport com.objectspace.voyager.*;public class Bat {

public void play(IBall ball) { ball.hit() } public 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

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

Entfernte Konstruktoren mit Argumenten

Object[] arguments = new Object[]{new Integer(5)};

IBall ball = (IBall) Factory.create("Ball", arguments, "sun:8000");

Konstruktor mit Argumente

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

Objektmigration (1)

Anwendungsgebiete: Zeitaufwand minimieren Lastbalancierung Besitz- oder Verantwortungswechsel Mobile Geräte (bzw. nicht-permanent verfügbare

Geräte)

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

Objektmigration (2)

Entfernter Zugriff vs. Migration

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

Objektmigration (3)

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

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

Probleme bei der Migration (1)

Migration durch Kopie simulieren?Durch Migration muß Identität erhalten

bleibenLaufzeitumgebung stellt Korrektheit von

"alten" Referenzen auf migrierte Objekte sicher

D d A a

IC cA a C c

sun lin mac

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

Probleme bei der Migration (1)

Migration durch Kopie simulieren?Durch Migration muß Identität erhalten

bleibenLaufzeitumgebung stellt Korrektheit von alten

Referenzen auf migrierte Objekte sicher

D d A a

IC cA a C c

sun lin mac

A aC c

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

Probleme bei der Migration (2)

Was passiert mit referenzierten Objekten?KopiersemantikEventuell problematisch für "normale" ObjekteUnproblematisch für referenzierte Proxies

D d A a

IC cA a C c

sun lin mac

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

Probleme bei der Migration (2)

Was passiert mit referenzierten Objekten?KopiersemantikEventuell problematisch für "normale" ObjekteUnproblematisch für referenzierte Proxies

D d

IC cA a C c

sun lin mac

A a

IC cA a

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

Behandlung laufender Aufrufe

import java.io.*;public class Ball implements IBall, Serializable

{ synchronized public void hit() {

System.out.println("Ball has been hit") }

}

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

Gruppenkommunikation

Multicast oder Publish-Subscribe-MechanismusVoyager spaces and subspaces

Subspace localSubspace = new Subspace()Entfernter Zugriff über Namensraum

Isubspace remoteSubspace = (Isubspace) Namespace.lookup("//sun:9000/Subspace");localSubspace.connect(remoteSubspace);

localSubspace.add(client);

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

Räume und Unterräume

Space Rechner Subspace

sun lin

win mac nt

Verknüpfung

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

Verteilung von Nachrichten im Unterraum

Object[] parameter = new Object[]{param}; Multicast.invoke(subspace, "message", parameter,

"Class"); oder: IClass mcastProxy =

localSubspace.getMulticastProxy("Class"); mcastProxy.message(param);

sun

Nachricht Rechner

Objekt

Subspace

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

Mobile Agenten: Kommunikationsschema

Ohne Agenten vs. mit Agenten

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

Bewegung und Aktion von Agenten

Vorher: Explizite Migration von Objeken (Unterstützung der Methode moveTo)

Aus welcher Motivation heraus werden Agenten bewegt?

"Eigeninitiative!"BDI-Architektur

Beliefs Desires Intentions

Wie kann man denndas hinkriegen???

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

Mobile Agenten: Einsatzgebiete

Verteilte InformationssucheBörsenbeobachterElektronischer PreisvergleichMehrwertleistungenJust-in-Time-Produktion

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

Mobile Agenten: Bewertung

Vorteile: Reduktion der Netzwerklast Möglichkeiten zum Offline-Gehen des

Auftraggebers während der Agent aktiv ist Flexiblere Reaktion auf Umgebung möglich als z.B.

RMINachteile:

Komplexität der Programmierung/Erstellung Infrastruktur erforderlich Sicherheitsprobleme

(für Agenten und für jeweilige Wirtsumgebung)

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

Dienste in einer Umgebung

Internet

gateway

PDA

service

Music service

serviceDiscovery

Alarm

Camera

Guestsdevices

LaptopTV/PC

Hotel wirelessnetwork

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

Diensterbringung durch Server

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

Konfigurierungsproblematik

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

Spontane Vernetzung

Eintreten in eine Gruppe Dienste anbieten / anmelden für Gruppe Nachfrage nach Diensten einer Gruppe Mit einem Dienstinteressenten in Kontakt treten Konkreten Dienst für bestimmte Zeit zusagen Kein Fehler: sich einfach entfernen, wenn gerade

keiner auf eine konkrete Diensterbringung wartet

kein Fehler: sich einfach entfernen, wenn die Zeit für zugesagte Dienste abgelaufen ist

Fehler: zugesagten Dienst nicht erbringen

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

Jini: Registrierung

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

Jini: Lookup und Leasing

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

Was ist eine Gruppe / Föderation?

intranet

ISP

desktop computer:

backbone

satellite link

server:

network link:

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

Was ist eine Gruppe / Föderation?

the rest of

email server

Web server

Desktopcomputers

File server

router/firewall

print and other servers

other servers

print

Local areanetwork

email server

the Internet

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

Multicast Request: Service Announcement

Datagramm-Paket auf 224.0.1.85 und Port 4160

Client

LookupService

ServiceProvider

Service ObjektService Attributes

Nicht überRoutergeleitet

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

Multicast Request: Service Announcement

Datagramm-Paket auf 224.0.1.85 und Port 4160

Client

LookupService

ServiceProvider

Service ObjektService Attribute

Service ProxyService Attribute

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

Multicast Request: Service Discovery

Datagramm-Paket auf 224.0.1.85 und Port 4160

Client

LookupService

ServiceProvider

Service ObjektService AttributesService Attributes

Service ProxyService Attributes

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

Multicast Request: Service Discovery

Datagramm-Paket auf 224.0.1.85 und Port 4160

Client

LookupService

ServiceProvider

Service ObjektService AttributesService Attributes

Service ProxyService Attributes

Service Proxy

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

Multicast Request: Lookup Announcement

Datagramm-Paket auf 224.0.1.84 und Port 4160

LookupService

Nicht überRoutergeleitet

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

Softwarepakete in Java

import java.rmi.*;import java.rmi.server.*;import net.jini.core.lookup.*;import sun.com.jini.lookup.*;import sun.com.jini.lease.*;

siehe:Java in verteilten SystemenMarko Boger

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

Dienste: Beispiel Baseball

public class Ball extends UnicastRemoteObject implements RemoteBall ServiceIDListener { public Ball throws RemoteException { super(); } public void serviceIdNotify(ServiceID id) {

System.out.println("ServiceId is " + id); }

public hit() { System.out.println("Ball has been hit.")}

}

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

Das Interface RemoteBall

import java.rmi.*public interface RemoteBall extends Remote

{ public void hit() throws RemoteException;

}

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

Das Anmelden von Diensten (1)

Klasse JoinManager und entspr. KonstruktorÜbergabe des als Service angebotenen

Objekts, dessen Beschreibung, eines Callback-Objektes und eines Leasing Managers:

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

Das Anmelden von Diensten (2)public class BallStarter {

public static void main(String[] args) {try {

System.setSecurityManager(new RMISecurityManager ()); RemoteBall ball = (RemoteBall) new Ball();LeaseRenewalManager renewal = new LeaseRenewalManager();Entry[] attributes = new Entry[]{ new Name("Jini enabled ball") }; JoinManager join = new JoinManager(ball, attributes, (Ball) ball,

renewal); System.out.println("Ball started and registered at Lookup-Server");

} catch (Exception e) { e.printStackTrace(); } }

}

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

Lookup von Diensten: Suche durch Muster

Klasse ServiceTemplate und entspr. Konstruktor

Übergabe an Konstruktor entweder eines ServiceID-Objekts oder einer Service-Beschreibung:

einer Menge von Klassen oder einer Menge von Attribut-Wert-Paaren

Beispiel mit Service-Beschreibung als Klasse: Class[] classes = new Class[] { RemoteBall.class };ServiceTemplate template =

new ServiceTemplate(null, classes, null);

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

Zugriff auf den Dienstvermittler

Repräsentation des Dienstvermittlers als Objekt

Dienstvermittler enthält RegistraturSuchmuster wird an Registratur übergebenBeispiel:

LookupLocator l = new LookupLocator("jini://sun");

ServiceRegistrar r = l.getRegistrar(); RemoteBall = b = (RemoteBall)

r.lookup(template);

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

Aufruf eines Dienstes (1)

import java.rmi.*import net.jini.core.discovery.*;import net.jini.core.lookup.*;public class Bat {

public void play(RemoteBall ball) { try { ball.hit(); System.out.println("I hit the ball"); } catch (RemoteException e) { System.out.println(e) }}

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

Aufruf eines Dienstes (2)

public static void main(String[] args) { Bat bat = new Bat(); try { System.setSecurityManager(new RMI SecurityManager ()); LookupLocator locator = new LookupLocator("jini://sun"); ServiceRegistrar registrar = locator.getRegistrar(); Class[] classes = new Class { RemoteBall.class }; ServiceTemplate template = new ServiceTemplate(null,

classes, null); RemoteBall remoteBall = (RemoteBall) registrar.lookup(template); bat.play(remoteBall); } catch (Exception e) { e.printStackTrace(); }

}}

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

Starten und Aufrufen eines Dienstes

HTTP-Server, RMI-Daemon und Jini Lookup-Server starten java -cp /usr/remote/java/jini1_0/lib/jini-examples.jar

com.sun.jini.example.service.StartService Server:

sun> java -Djava.rmi.server.codebase=http://localhost:8000/batBall/ -Djava.security.policy=/jini1_0/batball/policy.all BallStarter

sun| Ball started an registered at Lookup-Server sun| ServiceId is f7a17bde-e40b-42cb-94d4-bb6d37a999b8

Client: lin> java -Djava.security.policy=/jini1_0/batball/policy.all Bat sun| Ball has been hit lin| I hit the ball

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

Leasing

public interface Lease { long getExpiration(); void renew (long duration) throws LeaseDeniedException,

UnknownLeaseException, RemoteException;

void cancel() throws UnknownLeaseException, RemoteException;

}Vorher verwendete Klasse LeaseRenewalManager

erneuert Leasing-Verträge automatisch

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

Auch beim nächsten Mal ...

... gibt's wieder Neues in der Diskussion über Middleware Datenbankanschluß (JDBC) Komponentenorientierte Softwarekonstruktion

(Beans) Multitier-Architekturen (J2EE)

Enterprise Java Beans Servlets, Java Server Pages XML