• Keine Ergebnisse gefunden

Remote Method Invocation

N/A
N/A
Protected

Academic year: 2022

Aktie "Remote Method Invocation"

Copied!
19
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Remote Method Invocation

(2)

Bisher

Objekt-Orientierung in Java:

Objekt A ruft Methode m bei Objekt B auf

A und B leben beide in derselben JVM

nicht ausreichend f¨ur verteilte Anwendungen entweder

weniger Objekt-Orientierung, oder

Erweiterung auf mehrere JVMs

(3)

Jetzt

Objekt A ruft Methode m bei Objekt B auf

A und B evtl. auf verschiedenen JVMs

Kommunikation (auf nicht-Java-Ebene) ¨uber TCP/IP auf Java-Ebene: RMI

(4)

Das Interface Remote

Objekte, auf die remote zugegriffen werden kann, m¨ussen Remote sein typische Nutzung:

public interface MeinService extends java.rmi.Remote { methode(...) throws java.rmi.RemoteException;

}

public class MeinServiceImplementation implements MeinService {

methode(...) throws java.rmi.RemoteException { ... } }

Deklaration dieser Exception ist Pflicht!

remote Teil der Anwendung muss (zuerst) nur MeinService kennen

(5)

Woher weiß. . .

. . .B, was A ihm ¨ubergibt?

. . .A, was B berechnet hat?

Antwort: stubs

lokale Sicht eines remote Objektes

Funktionsweise:

nimmt Argumente

verschickt sie zur JVM, in der B lebt wartet auf Ergebnis

stellt dies zur Verf¨ugung

(6)

Stubs erzeugen

mit dem RMI-Compiler

Aufruf rmic MeinServiceImplementation, nimmt .class-File Achtung, remote Teil (Sourcecode) benutzt nur MeinService und stubs f¨uhren selbst keinen Code aus

Warum nicht rmic MeinService? ; stub wichtig zur Laufzeit, nicht Compilezeit

(7)

Die Klasse UnicastRemoteObject

ben¨otigt zum Erhalten eines Stubs und Exportieren eines remote Objektes 2 M¨oglichkeiten

public class MeinServiceImplementation extends UnicastRemoteObject implements MeinService ...

UnicastRemoteObject.exportObject(...)

(8)

Was kann ¨uberhaupt verschickt werden?

Welche Argumente k¨onnen Methoden von Remote haben?

primitive Datentypen

Objekte vom Typ java.io.Serializable

(9)

Die rmiregistry

N¨ahrboden f¨ur RMI

lauscht auf TCP/IP-Port, default 1099 nur 1mal pro Host und Port

name server, Tabelle (String s, Object o) Idee: Objekt o bietet Service unter Namen s an

Stub wird zu eingetragenen Objekten ben¨otigt, nicht zu deren Interfaces

(10)

rmiregistry starten

2 M¨oglichkeiten

per Hand: .../jdk1.5.0/bin/rmiregistry &

+ ist f¨ur mehrere Klassen, User, etc. verf¨ugbar - leicht zu vergessen

per Methode:

java.rmi.registry.LocateRegistry.createRegistry() + Erzeugung flexibler

- Mehrfacherzeugung mit getRegistry(...) vermeiden

(11)

Service eintragen

public class MeinServiceImplementation implements MeinService {

public MeinServiceImplementation() { ... } public static void main(String[] args) {

...

service = new MeinServiceImplementation();

java.rmi.Naming.rebind("Servicename", service);

...

} }

(12)

Service erhalten

public class BenutzerImplementation implements Benutzer {

...

service = (MeinService) java.rmi.Naming.lookup("Servicename");

...

service.methode(...);

...

}

Service auf remote Host abfragen: “//host:port/Servicename” Rest wie ¨ublich

(13)

Ein Wort zu Ports

rmiregistry braucht offenen Port

Netzwerksicherheit braucht geschlossene Ports im CIP-Pool z.B.:

Ports nach aussen hin geschlossen

innerhalb des Netzwerks offen

Tip: verteilte Anwendung erst auf einem Host, dann auf verschiedenen innerhalb eines Netzes laufen lassen

am Ende: killall rmiregistry !!!

(14)

Ein Wort zu Prozessen

main-Methode in Service braucht keine Endlosschleife in rmiregistry eingetragenes Objekt

ruht, wartet auf Methodenaufrufe von aussen,

wird nicht gegarbagecollectet keine unn¨otige CPU-Zeit verbraten

Remote-Anwendungen starten mehrere java-Prozesse am Ende: killall java !!!

(15)

Literatur

Sun’s Infos zu RMI

http://java.sun.com/j2se/1.5.0/docs/guide/rmi/

Sun’s RMI Tutorial

http://java.sun.com/docs/books/tutorial/rmi/

Another RMI Tutorial

http://www.ccs.neu.edu/home/kenb/com3337/rmi tut.html

. . .

(16)

Beispiele

(17)

Hausaufgabe

(18)

Hausaufgabe

Erstellung eines Chat-Services: Server + Client Anforderungen:

Server implementiert Interface Server

Client implementiert Interface Client

Teilnehmer = Client + Name + aktiv? (abstrakte Klasse vorgegeben)

Teilnehmer k¨onnen sich beim Server an-/abmelden

Server benachrichtigt alle Teilnehmer ¨uber An-/Abmeldungen

Teilnehmer k¨onnen einzeilige Nachrichten (Strings) verschicken, entweder an alle oder nur an einen

Nachrichten d¨urfen verloren gehen bei Serverausfall

bei Abmelden eines Teilnehmers

(19)

Hausaufgabe

Nachrichten gehen nicht verloren bei tempor¨arem Ausfall eines Clients

Server dirigiert, d.h. kein Zugriff zwischen Clients

Client hat GUI mit

Textfeld f¨ur Eingabe, Textfeld f¨ur Ausgabe

Buttons zum Verschicken an alle, einzelne Teilnehmer

Exception-Handling (s. API)

Java-Doc-Dokumentation

Jar-Archiv mit Interfaces und abstrakter Klasse Teilnehmer auf WWW-Seite

Referenzen

ÄHNLICHE DOKUMENTE

•  Offer a similar level of transparency, means local and remote calls employ the same syntax but remote interfaces expose the distributed nature for example by supporting

The communication module in the server selects the dispatcher for the class of the object to be invoked, passing on the remote object’s local reference. Claudia

•  Reads the parameters for the method call → makes the call to the remote service implementation object → accepts the return value → writes the return value back to the

•  When a method call is made to the proxy for an activatable object, RMI determines if the remote service implementation object is dormant. •  If yes, RMI will instantiate

All of these needed capabilities interact with the question of how to manage Network versus Application Timescale. If the data generation time is longer than the PIT expiry timer,

Although much of China’s drone research and development remains classified, Open Briefing has identified at least 46 different UAVs (plus variants) in use or in development by

Annex, Remote Annex, Annex Manager, Remote Annex 2000, Remote Annex 4000, Remote Annex 6100, Remote Annex 6300, Remote Annex 5390/Async, Remote Annex 5391/CT1, Remote Annex

Since the 2076 has been designed as a standalone unit, the attached display stations can be serviced separately from the controller, without affecting the rest of the cluster..