RMI - Remote Method Invocation

Größe: px
Ab Seite anzeigen:

Download "RMI - Remote Method Invocation"

Transkript

1 RMI - Remote Method Invocation JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz

2 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 2

3 Motivation Methodenaufruf bei einer VM Objekte innerhalb einer JVM Methodenaufruf über VM Grenzen hinweg Objekte sind auf mehreren JVMs (Rechnern) verteilt Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 3

4 Probleme bei Remote-Objekten Objektreferenzen: Was ist eine Remote-Referenz? Wie finde ich ein Objekt? Wie spreche ich Objekte an? Methodenaufruf: Wie wird die Sprungadresse für die Methode ermittelt? Parameterübergabe und Rückgabewerte: Wie werden Parameterwerte und Rückgabewerte verschickt? Objekterzeugung: Wie kann der Client ein Remote-Objekt erzeugen? Garbage Collection: Wann kann ein Objekt am Server frei gegeben werden? Laden der Klassen: Von wo wird die Klasse für ein vom Client benötigtes Objekt geladen? Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 4

5 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 5

6 Proxy-Pattern request() Client Interface: definiert eine allgemeine Schnittstelle, die Client sieht und Server implementieren muss Implementierung für den Server hat Interface entsprechend zu implementieren Proxy für den Client wird vom Client angesprochen implementiert die Schnittstelle, d.h. stellt sich dar wie ein wirkliches Objekt delegiert alle Requests an die wirkliche Objektimplementierung Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 6

7 Proxy-Pattern bei Remote-Objekten Proxy Stub stellt das Proxy-Objekt auf der Seite des Client dar Proxy leitet die Anforderungen über die VM-Grenzen an Server weiter Skeleton empfängt die Requests und baut eigentlichen Request an den Server auf Server bedient den Request Ergebnis wird an Skeleton zurückgegeben Ergebnis wird über Netzwerk an Stub weitergeleitet Stub gibt das Ergebnis an Client zurück Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 7

8 Kommunikationsarchitektur Client und Server Stubs und Skeletons Remote Reference Layer Netzwerkverbindung Netzwerkverbindung zwischen JVMs immer über Network Layer des Host OS JVM JVM JVM JVM Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 8

9 Kommunikationsarchitektur: Aufgaben der Schichten Client und Server sind die eigentlichen Anwendungsobjekte kommunizieren über virtuelle Kommunikation Stubs und Skeletons Stub (Achtung: ab Java 1.5 nicht mehr nötig; mittels Dynamic-Proxies gelöst) ist das Proxy-Objekt auf der Client-Seite und stellt sich wie Server-Objekt dar leitet Requests des Client an die unteren RMI-Services weiter Skeleton (Achtung: ab Java 1.2 nicht mehr nötig!!!) empfängt die Requests von unteren RMI-Services und setzt diese für Requests an Server-Objekt um Remote Reference Layer verwaltet die Remote-Referenzen (Klasse RemoteRef) der Server-Objekte RemoteRef bietet Methode invoke für Methodenaufrufe abzusetzen (wird von Stubs verwendet) dient zur Registrierung von Remote-Objekts Netzwerkverbindung eigentliche Netzwerkverbindung über TCP/IP stream-basierte Verbindung standardmäßig auf Port 1099 Kommunikationsprotokoll oberhalb TCP/IP (nicht standardisiert) Java Remote Method Protocol (JRMP) IIOP und weitere Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 9

10 Objektregistrierung und Objektsuche RMI ermöglicht Registrierung von Remote-Objekten durch Server mit einer RMI-URL Aufsuchen von Remote-Objekten durch Client Dazu dienen RMI-Registrierungsprogramm rmiregistry RMI-Service Klassen Naming, Registry, LocateRegistry Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 10

11 Objektregistrierung und Objektsuche: Vorgehen LocateRegistry: Zugriff auf Registry Service Registry: bind oder rebind ein Server-Objekt registriert. Es muss dabei ein eindeutiger Name für das Server-Objekt vergeben werden. try { Bank bank = new BankImpl(); Registry reg = LocateRegistry.createRegistry(1099); reg.bind("bank", bank);... default port 1099; andere möglich Das Server-Objekt wird dabei unter der RMI-URL mit eingetragen. rmi://<hostcomputer>:1099/bank Damit hat ein Client eine eindeutige URL, um auf ein Server-Objekt zuzugreifen; // Client try { Registry reg = LocateRegistry.getRegistry("<Hostcomputer>", 1099); Bank bank = (Bank) reg.lookup("bank"); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 11

12 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 13

13 Realisierung eines Remote-Objekts Interfaces und Klassen Interface Spezifikation für Remote-Objekt muss java.rmi.remote erweitern definiert die sichtbaren Methoden des Remote-Objekts jede Methode muss eine RemoteException werfen Server-Objekt muss Interface implementieren muss an das RMI System exportiert werden Stub-Objekt (kann ab Java 1.5 durch Dynamic- Proxy ersetzt werden) wird mit rmic erzeugt implementiert Interface Skeleton-Objekt (nur bei Java 1.1 verwendet) wird mit rmic erzeugt erweitert Basisklasse java.rmi.server.skeleton ab Java 1.5 auch mittels Dynamic-Proxy Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 14

14 Beispiel Bank-Server Im folgenden Beispiel wird anhand eines einfachen Bank-Servers die Realisierung eines Client-Server-Programms veranschaulicht Folgende Schritte sind dabei durchzuführen: Erstellen Starten Definition eines Interfaces für das Remote-Objekt Implementierung des Interfaces für den Server Generierung von Stub- und Skeleton-Klassen mit rmic (ab 1.5 nicht mehr nötig) Implementierung des Server-Programms, welches das Server-Objekt anlegt und beim RMI registriert Realisierung eines Client-Programms, welches auf das Server-Objekt zugreift und dieses verwendet Starten des rmiregistry (ab 1.5 nicht mehr nötig) Starten des Server-Programms Starten des Client-Programms Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 15

15 Beispiel Bank-Server: Interface Bank Interface Bank definiert Methoden für Zugriffe auf Konten package bank.common; import java.rmi.remote; import java.rmi.remoteexception; public interface Bank extends Remote { public static final int PORT = 1099; public long getbalance(int account) throws RemoteException; RemoteExceptions für alle Remote-Methods notwendig! public void deposit(int account, long amount) throws RemoteException; public void transfer(int from, int to, long amount) throws RemoteException; Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 16

16 Beispiel Bank-Server: BankImpl Klasse BankImpl stellt eine entsprechende Implementierung von Bank bereit package bank.server; import java.rmi.remoteexception; import java.rmi.server.unicastremoteobject; import bank.common.bank; Constructor mit RemoteException! public class BankImpl extends UnicastRemoteObject implements Bank { private long[] accounts = new long[100]; protected BankImpl() throws RemoteException { super(); public synchronized long getbalance(int account) throws RemoteException { return accounts[account]; public synchronized void deposit(int account, long amount) throws RemoteException { accounts[account] += amount; public synchronized void transfer(int from, int to, long amount) throws RemoteException { accounts[from] -= amount; accounts[to] += amount; Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 17

17 Beispiel Bank-Server: Stub und Skeleton Stub- und Skeleton-Klassen müssen nicht geschrieben werden Sie können durch das Programm rmic automatisch generiert werden rmic wird mit Server- Implementierungsklasse aufgerufen Microsoft Windows XP rmic <options> <class names> where <options> includes: -keep Do not delete intermediate generated source files -g Generate debugging info -depend Recompile out-of-date files recursively -nowarn Generate no warnings -verbose Output messages about what the compiler is doing -classpath <path> Specify where to find input source and class files -d <directory> Specify where to place generated class files -J<runtime flag> Pass argument to the java interpreter -v1.1 Create stubs/skeletons for JDK 1.1 stub protocol version -vcompat (default) Create stubs/skeletons compatible with both JDK 1.1 and Java 2 stub protocol versions -v1.2 Create stubs for Java 2 stub protocol version only > rmic keep BankImpl public final class BankImpl_Stub extends java.rmi.server.remotestub implements Bank, java.rmi.remote {... public final class BankImpl_Skel implements java.rmi.server.skeleton {... Achtung: kann ab Java 1.5 gänzlich entfallen! Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 18

18 Beispiel Bank-Server: Server-Programm Server-Programm hat folgende Aufgaben: erzeugen des Server-Objekts exportieren des Server-Objekts an das RMI Registrieren des Server-Objekts unter einem RMI-URL mit Registry package bank.server; import java.rmi.registry.locateregistry; import java.rmi.registry.registry; import bank.common.bank; public class BankServer { public BankServer() { try { Bank bank = new BankImpl(); Registry reg = LocateRegistry.createRegistry(Bank.PORT); reg.bind("bank", bank); catch (Exception e) { System.out.println("Trouble: " + e); public static void main(string args[]) { new BankServer(); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 19

19 Beispiel Bank-Server: Client-Programm Client-Programm wird: sich über den Registry mit dem URL das Remote-Objekt holen das Remote-Objekt verwenden (dabei direkt den Stub aufrufen) eine Reihe von Exceptions abfangen package bank.client; import java.rmi.*; import bank.common.bank; public class BankClient { Name des Servers, z.b. "localhost" public static void main(string[] args) { try { Registry reg = LocateRegistry.getRegistry(" Server Adr ", Bank.PORT); Bank bank = (Bank) reg.lookup("bank"); bank.deposit(1, 10000); bank.deposit(2, 20000); bank.transfer(1, 2, 3000); System.out.println(bank.getBalance(1)); System.out.println(bank.getBalance(2)); catch (Exception re) { Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 20

20 Exportieren von Server-Objekten Server-Objekte müssen bei ihrer Erzeugung an das RMI exportiert (bekannt gemacht) werden Dies kann auf zwei Arten passieren Ableiten von Klasse UnicastRemoteObject (wie im letzten Beispiel) mit static-methode exportobject von Klasse UnicastRemoteObject static RemoteStub exportobject(remote obj) throws RemoteException static Remote exportobject(remote obj, int port) throws RemoteException Port 0 bedeutet, dass Port vom System gewählt wird. public class BankImpl implements Bank {... public class BankServer { public BankServer() { try { Bank bank = new BankImpl(); Registry reg = LocateRegistry.createRegistry(PORT); RemoteStub bstub = UnicastRemoteObject.export(bank); reg.bind("bank", bstub); catch (Exception e) { System.out.println("Trouble: " + e);... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 21

21 rmiregistry und Naming (alte Version) Starten des RMIRegistry-Programms Server: import java.rmi.registry.locateregistry; import java.rmi.registry.registry; public class BankServer { public BankServer() { try { Bank bank = new BankImpl(); Naming.rebind("rmi://localhost:1099/ Bank", bank);... Client: Microsoft Windows XP > rmiregistry public class BankClient { public static void main(string[] args) { try { Bank bank = (Bank) Naming.lookup( "rmi://localhost:1099/"bank");... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 22

22 RMI Exkurs: Dynamic Proxy Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 24

23 Exkurs: Dynamic Proxy package java.lang.reflect dynamisch erzeugter Proxy implementiert Liste von Interfaces wird durch statischer Methode Proxy.newProxyInstance erzeugt public class Proxy { public static Object newproxyinstance(classloader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException; Implementierte Interfaces InvocationHandler Anwendung: Foo f = (Foo)Proxy.newProxyInstance(null, new Class[] {Foo.class, handler); Erzeugtes Proxy-Objekt implementiert Interfaces, ruft aber InvocationHandler auf public interface InvocationHandler { Object invoke(object proxy, Method method, Object[] args) throws Throwable InvocationHandler soll Indirektion realisieren Reflection API Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 25

24 Beispiel Dynamic Proxy: TraceHandler (1/2) TraceHandler realisiert InvocationHandler zuerst Trace-Ausgabe dann Aufruf der eigentlichen Methode class TraceHandler implements InvocationHandler { private Object target; private PrintStream tracelog; public TraceHandler(Object target, PrintStream tracelog) { this.target = target; this.tracelog = tracelog; public Object invoke(object proxy, Method m, Object[] args) throws Throwable { tracelog.print(target + "." + m.getname() + "("); if (args!= null) { for (int i = 0; i < args.length; i++) { tracelog.print(args[i]); if (i < args.length 1) tracelog.print(", "); tracelog.println(")"); return m.invoke(target, args); Ausgabe der Traceinfo Aufruf der eigentlichen Methode Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 26

25 Beispiel Dynamic Proxy: TraceHandler (2/2) Test mit Proxy für Integer-Werte mit Trace der compareto-methode des Comparable-Interfaces public class ProxyTest { public static void main(string[] args) { Object[] elements = new Object[1000]; // fill elements with proxies for the integers for (int i = 0; i < elements.length; i++) { Integer value = i + 1; Class[] interfaces = value.getclass().getinterfaces(); InvocationHandler handler = new TraceHandler(value, System.out); Object proxy = Proxy.newProxyInstance(null, interfaces, handler); elements[i] = proxy; Integer key = 547; // search for the key int result = Arrays.binarySearch(elements, key); // print match if found if (result >= 0) System.out.println(elements[result]); { Comparable.class 500.compareTo(547) 750.compareTo(547) 625.compareTo(547) 562.compareTo(547) 531.compareTo(547) 546.compareTo(547) 554.compareTo(547) 550.compareTo(547) 548.compareTo(547) 547.compareTo(547) Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 27

26 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 28

27 Parameterübergabe und Rückgabewerte Bei RMI sind folgende Arten der Parameterübergabe und Rückgabewerte zu unterscheiden: Basisdatentypen (int, double, boolean, etc.) Werte werden über das Netzwerk übertragen Serialisierbare Objekte (implementieren Interface Serializable) Objekte werden serialisiert über das Netzwerk übertragen und auf der anderen Seite eine Kopie aufgebaut Remote-Objekte (implementieren Interface Remote) Es wird auf der empfangenden Seite ein Stub für das Objekt aufgebaut alle anderen (nicht serialisierbar, nicht Remote) diese können nicht als Parameter übergeben werden Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 29

28 Basisdatentypen Auf Senderseite werden Werte gemarshaled und über das Netzwerk gesendet Auf der Empfängerseite werden die Werte wieder entpackt und an Client geliefert client server_stub server_skeleton server getvalue() getvalue() JVM 1 JVM 2 Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 30

29 Serialisierbare Objekte Inhalt des Objekts wird über den Java-Serialisierungsmechanismus serialisiert und über das Netzwerk übertragen auf der Empfängerseite wird ein neues Objekt mit gleichem Inhalt aufgebaut Problem, wenn Klasse des serialisierten Objekts auf Empfängerseite nicht bekannt ist! siehe Nachladen von Code client server_stub server_skeleton server getlist() getlist() ArrayList (id = 37) ArrayList (id = 14) ArrrayList <1, 2, 3, > JVM 1 JVM 2 Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 31

30 Remote-Objekte Es wird kein Wert übergeben sondern über das RMI-System wird eine Remote-Referenz auf das Server- Objekt übermittelt auf der Clientseite wird dafür ein Stub erzeugt und eine Referenz auf den Stub dem Empfänger übergeben client server_stub server_skeleton server getremotemember() getremotemember() create() remote_stub remote_stub remote remote Remote-Reference to remote JVM 1 JVM 2 Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 32

31 Beispiel: Car und CarStore Remote-Interfaces Car und CarStore public interface Car extends Remote { public int getnr() throws RemoteException; public interface CarStore extends Remote { public Car getcar(int nr) throws RemoteException; public void returncar(car car) throws RemoteException; Implementierungen CarImpl und CarStoreImpl public class CarImpl extends UnicastRemoteObject implements Car { private final int nr; protected CarImpl(int nr) throws RemoteException { this.nr = nr; public int getnr() throws RemoteException { return nr; public class CarStoreImpl extends UnicastRemoteObject implements CarStore { private final Car[] cars = new Car[3]; public CarStoreImpl() throws RemoteException {... public synchronized Car getcar(int nr) throws RemoteException { return cars[nr]; public synchronized void returncar(car car) throws RemoteException {... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 33

32 Beispiel: Car und CarStore CarStoreServer Applikation public class CarStoreServer { private static CarStore store; public static void main(string[] args) throws Exception { store = new CarStoreImpl(); store.cars[0] = new CarImpl(0); store.cars[1] = new CarImpl(1); store.cars[2] = new CarImpl(2); Registry reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); reg.bind("carstore", store); CarStoreClient public class CarStoreClient { public static void main(string[] args) { try { Registry reg = LocateRegistry.getRegistry(Registry.REGISTRY_PORT); CarStore cs = (CarStore) reg.lookup("carstore"); Car c1a = cs.getcar(1);... Remote-Objekt catch (Exception e) {... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 34

33 == und equals bei Remote-Referenzen (1/2) == bei Remote-Referenzen bei jedem Remote-Zugriff werden neue Stub-Objekte angelegt Objekte sind nicht == public class CarStoreClient { public static void main(string[] args) { try {... Car c1a = cs.getcar(1); Car c1b = cs.getcar(1); false!!! equals if (c1a == c1b)... Stub implementiert equals entsprechend Objekte sind equals, wenn selbes Server-Objekt public class CarStoreClient { public static void main(string[] args) { try {... Car c1a = cs.getcar(1); Car c1b = cs.getcar(1); true!!! if (c1a.equals(c1b))... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 35

34 == und equals bei Remote-Referenzen (2/2) Car implementiert equals public class CarImpl extends UnicastRemoteObject implements Car {... public synchronized boolean equals(object obj) { if (obj instanceof CarImpl) { return nr == ((CarImpl) obj).nr; return false; Server CarStore erzeugt immer neue CarImpl-Objekte public class CarStoreImpl extends UnicastRemoteObject implements CarStore{... public synchronized Car getcar(int nr) throws RemoteException { return new CarImpl(nr); Diese Objekte werden am Client nicht als equals erkannt public class Client { neue Car-Objekt mit new erzeugt public static void main(string[] args) throws RemoteException { Registry reg = LocateRegistry.getRegistry(2222); CarStore cs = (CarStore) reg.lookup("carstore"); Car c1a = cs.getcar(1); Car c1b = cs.getcar(1); if (c1a.equals(c1b)) false!!! Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 36

35 Remote-Referenz als Parameter Remote-Referenz als Parameter von Remote-Methode Client ruft Remote-Methode mit Remote-Referenz auf am Server wird ein Stub für das Remote-Stub am Client erzeugt Verbindung zum ursprünglichen Remote-Objekt am Server nicht vorhanden!! Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 37

36 Beispiel: Car und CarStore Client ruft returncar mit Remote-Referenz auf public class Client { public static void main(string[] args) throws RemoteException { Registry reg = LocateRegistry.getRegistry(2222); CarStore cs = (CarStore) reg.lookup("carstore"); Car c1a = cs.getcar(1); cs.returncar(c1a); Remote-Stub!! Am Server wird Stub aufgebaut public class CarStoreImpl extends UnicastRemoteObject implements CarStore { public synchronized Car getcar(int nr) throws RemoteException { return cars[nr]; public v synchronized oid returncar(car car) throws RemoteException { if (car.equals(cars[car.getnr()]))... Keine Remote-Stubs als Parameter übergeben! Besser mit IDs, etc. arbeiten! false!! Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 38

37 Erweitertes Beispiel BankManager BankManager ist ein Remote-Objekt, das Zugriff auf Kunden (Customer) und Konten (Accounts) bietet Sowohl Account als auch Customer sind Remote-Objekte BankManager bietet den Einstiegspunkte und wird als einziges Objekt registiert Vom BankManager holt sich das Client-Programm die weiteren Remote- Objekte Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 39

38 Beispiel BankManager: Remote Interfaces public interface Account extends Remote { public int getid() throws RemoteException; public Customer getcustomer() throws RemoteException; public long getbalance() throws RemoteException; public long withdraw(long amount) throws RemoteException; public void deposit(long diff) throws RemoteException; public interface Customer extends Remote { public String getname() throws RemoteException; public Account[] getaccounts() throws RemoteException; public interface BankManager extends Remote { public Customer getcustomer(string name) throws RemoteException; public Customer createcustomer(string name) throws RemoteException; public Account getaccount(int accountnumber) throws RemoteException; public Account createaccount(string customer) throws RemoteException; public void transfer(int from, int to, long amount) throws RemoteException; Remote-Objekte Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 40

39 Beispiel BankManager: BankManagerImpl BankManager verwaltet Mengen von Kunden und Konten BankManager erlaubt Zugriff auf Konto und Kunde public class BankManagerImpl extends UnicastRemoteObject implements BankManager { private static BankManagerImpl instance; public synchronized static BankManager getinstance() { if (instance == null) { try { instance = new BankManagerImpl(); catch (RemoteException e) { return instance; private static int id = 0; private final Map<Integer, Account> accounts; private final Map<String, Customer> customers; private BankManagerImpl() throws RemoteException { accounts = new HashMap<Integer, Account>(); customers = new HashMap<String, public synchronized Customer getcustomer(string name) throws RemoteException { return customers.get(name);... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 41

40 Beispiel BankManager: public synchronized Customer createcustomer(string name) throws RemoteException { CustomerImpl c = new CustomerImpl(name, this); customers.put(name, c); return public synchronized Account getaccount(int id) throws RemoteException { return public synchronized Account createaccount(string customer) throws RemoteException { id++; Customer customer = customers.get(customer); Account a = new AccountImpl(id, this, customer); accounts.put(id, a); customer.accounts.add(a); return public synchronized void transfer(int from, int to, long amount) throws RemoteException { Account afrom = getaccount(from); Account ato = getaccount(to); afrom.withdraw(amount); ato.deposit(amount); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 42

41 Beispiel BankManager: CustomerImpl public class CustomerImpl extends UnicastRemoteObject implements Customer { private final String name; final List<Account> accounts; protected CustomerImpl(String name) throws RemoteException { super(); this.name = name; this.accounts = new public String getname() throws RemoteException { return public synchronized Account[] getaccounts() throws RemoteException { return accounts.toarray(new Account[0]); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 43

42 Beispiel BankManager: AccountImpl public class AccountImpl extends UnicastRemoteObject implements Account { private final int id; private final String customer; private long balance; public AccountImpl(int id, String customer) throws RemoteException { super(); this.id = id; this.customer = customer; balance = 0L; listeners = new public int getid() throws RemoteException { return public Customer getcustomer() throws RemoteException { return BankManager.getInstance().getCustomer(customer);... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 44

43 Beispiel BankManager: public synchronized long getbalance() throws RemoteException { return public long withdraw(long diff) throws RemoteException { synchronized (this) { balance = balance - diff; fireaccountchangedevent(); return public void deposit(long diff) throws RemoteException { synchronized (this) { balance = balance + diff; fireaccountchangedevent(); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 45

44 Beispiel BankManager: Server-Programm Server-Programm registriert BankManager als einziges Objekt public class BankServer { private static BankManager bank; private static void start() throws Exception { bank = BankManagerImpl.getInstance(); Registry reg = LocateRegistry.createRegistry(Registry.REGISTRY_PORT); reg.bind("bank", bank); System.out.println("Server started on port " + Registry.REGISTRY_PORT); public static void main(string[] args) throws Exception { start(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); do { System.out.println("Press x for exit."); while (!"x".equals(in.readline())); System.exit(0); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 46

45 Beipiel BankManager: Client-Programm Client-Programm holt sich BankManager greift damit auf Account-Objekte und Customer-Objekte zu public class BankClient { static final String serverip = "localhost"; static final int serverport = Registry.REGISTRY_PORT; static private BankManager bank; public static void main(string[] args) { try { Registry reg = LocateRegistry.getRegistry(serverIP, serverport); bank = (BankManager)reg.lookup("Bank"); Customer c1 = bank.createcustomer("hans"); Customer c2 = bank.createcustomer("franz"); Account a1 = bank.createaccount(c1); Account a2 = bank.createaccount(c2); Account a1 = c1.getaccounts()[0]; Account a2 = c2.getaccounts()[1]; a1.deposit(1000); a2.deposit(2000); bank.transfer(a1.getid(), a2.getid(), 100); catch (Exception exc) { exc.printstacktrace(); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 47

46 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 48

47 Callbacks In machen Fällen ist es notwendig, dass der Server dem Client eine Meldung schickt. z.b. Benachrichtung über Änderungen In diesem Fall sind die Rolle von Client und Server zu vertauschen am Client muss ein Remote-Objekt existieren eine Remote-Referenz wird dem Server übergeben am Server wird ein Stub für das Remote-Client-Objekt angelegt Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 49

48 Beispiel BankManager: Remote Change Notification Remote-Listener-Interface für Client public interface RemoteAccountListener extends Remote { public void accountchanged(remoteaccountevent e) throws RemoteException; Account wird um Remote-Methode addaccountlistener erweitert public interface Account extends Remote { public void addremoteaccountlistener(remoteaccountlistener l) throws RemoteException; public void removeremoteaccountlistener(remoteaccountlistener l) throws RemoteException; public class AccountImpl extends UnicastRemoteObject implements Account public void addaccountlistener(accountlistener l) throws RemoteException { synchronized (listeners) { public void removeaccountlistener(accountlistener l) throws RemoteException private void fireaccountchanged() { Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 50

49 Beispiel BankManager: Remote Change Notification Der Client muss RemoteAccountListener implementieren und anmelden public class BankClient { public BankClient(BankManager bm) { super(); this.bm = bm; // add client as account listener at the bank manager Account a = bm.getaccount(1); a.addremoteaccountlistener(accountwatcher); a.removeremoteaccountlistener(accoutwatcher); private AccountWatcher accountwatcher = new AccountWatcher(); private static class AccountWatcher extends UnicastRemoteObject implements AccountListener { public AccountWatcher() throws RemoteException { super(); public void accountchanged(accountchangedevent evt) throws RemoteException { ; Nicht vergessen: Abmelden am Ende! (siehe Distributed Garbage Collection) Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 51

50 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 52

51 RMI und Threads Jeder Request wird in eigenem Thread ausgeführt client 1 client 2 request1() Server Thread request2() request3() Synchronisation notwendig Synchronisation der Zugriffe von mehreren Clients Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 53

52 Synchronisation Z.B. durch Synchronisation der Remote Methods public class BankManagerImpl extends UnicastRemoteObject implements BankManager public synchronized Customer getcustomer(string name) throws RemoteException { return public synchronized Customer createcustomer(string name) throws RemoteException public synchronized Account getaccount(int id) throws RemoteException public synchronized Account createaccount(string c) throws RemoteException {... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 54

53 Probleme: Lang laufenden Methoden Lang laufender synchronisierter Code blockiert alle Client- Requests public class BankManagerImpl extends UnicastRemoteObject implements BankManager {... public synchronized void makeannualbalance() { // long lasting activity... Lang laufender Prozess blockiert alle Client-Requests Lösung: lang-laufende Request durch den Client im eigenem Thread asynchron ausführen! Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 55

54 Probleme: Reentrancy Java Locks sind reentrant d.h. ein Thread, der den Lock auf ein Objekt hat, kann Code der auf gleiches Objekt gelockt ist trotzdem ausführen public class BankManagerImpl extends UnicastRemoteObject implements BankManager public synchronized void transfer(int from, int to, long amount) throws RemoteException { Account afrom = getaccount(from); Account ato = getaccount(to); Mit Lock auf BankManagerImpl Mit Lock auf BankManagerImpl public synchronized Account getaccount(int id) throws RemoteException { Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 56

55 Probleme: Reentrancy Werden Methoden aber Remote mit Zyklus über Client (Callback) ausgeführt, gilt das nicht mehr, weil unterschiedliche Threads client 1 Server callback() request1() request2() synchronized(this) synchronized(this) Blockiert synchron bis Callback zurückkehrt Deadlock, weil unterschiedliche Threads Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 57

56 Probleme: Reentrancy Beispiel public class BankClient extends UnicastRemoteObject { private static class AccountWatcher extends UnicastRemoteObject implements AccountListener { public void accountchanged(accountchangedevent evt) throws RemoteException { bankmanager.getaccount()... ; public class BankManagerImpl extends UnicastRemoteObject... Thread public synchronized void transfer(int from, int to, long am Account afrom = getaccount(from); Account ato = getaccount(to); ato.fireaccountchanged(); Thread public synchronized Account getaccount(int id) throws Remot Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 58

57 Probleme: Reentrancy Lösung: Asynchrone Callbacks Callbacks asynchron ausgeführt erlaubt, dass Server-Methode zu Ende läuft public class AccountImpl extends UnicastRemoteObject implements Account { private final ExecutorService executor = public void deposit(long diff) throws RemoteException { synchronized (this) { balance = balance + diff; fireaccountchangedevent(); Methode wartet damit nicht mehr, dass Callbacks zurückkehren private void fireaccountchanged() { final AccountChangedEvent evt = new AccoutChangedEvent( ); for (final AccountListener l : listeners) { executor.submit(() -> { l.accountchanged(evt); ); Erzeugen und absetzen von asynchronen Callbacks Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 59

58 Probleme: Reentrancy Lösung: Asynchrone Callbacks client Server request1() callback() request2() synchronized(this) synchronized(this) Asynchron, nicht blockierend nicht synchronized(this) Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 60

59 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 61

60 Distributed Garbage Collection Garbage Collector gibt Objekte frei, wenn sie nicht mehr referenziert werden Bei Remote-Objekten ist es dem Garbage Collector aber nicht möglich zu entscheiden, ob Remote-Clients das Objekt noch referenzieren Distributed Garbage Collector arbeitet mit: Reference Counting: Es werden die Zugriffe von Remote-Clients auf die Remote-Objekte gezählt Lease Time: Greift ein Client eine bestimmte Zeit der Lease Time nicht auf das Remote-Objekt zu, wird angenommen, dass der Client das Objekt nicht mehr benötigt. Konsequenz: Beim Client ist es möglich, dass Remote-Objekte verschwinden und er mit ungültigen Remote-Referenzen umgehen können muss. Lease Time: System Property java.rmi.dgc.leasevalue Standardwert 10 min Einstellung als Option bei java: java Djava.rmi.dgc.leaseValue=20000 Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 62

61 RMI Motivation Grundarchitektur Implementierung von Remote-Objekten Parameterübergabe Callbacks RMI und Threads Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 63

62 Verteilung und Nachladen von Klassen Bei Zugriff auf Remote-Objekte ist es nötig, dass Code vom Server nachgeladen wird für Stubs für Parameter und Rückgabewerte Beispiel: Stub Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 64

63 Motivation Nachladen von Klassen public interface BankManager extends Remote { public Customer getcustomer(string customername) throws RemoteException; PrivateCustomer Customer BusinessCustomer Es existieren Spezialisierungen von Customer! Diese sind Client eventuell nicht bekannt! public class BankManagerImpl extends UnicastRemoteObject implements BankManager { public synchronized Customer getcustomer(string customername) throws RemoteException { if ( ) return privateclients.get(customername); else return businessclients.get(customername); Client: Müsste alle Spezialisierungen von Customer kennen Konretes Objekt vom Typ PrivateCustomer_Stub oder BusinessCustomer_Stub try { Customer customer = account.getcustomer(name); catch (RemoteException remoteexception) { System.err.println(remoteException); Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 65

64 Nachladen von Code Um Code von einer externen Site nachladen zu können, ist folgendes zu tun es muss beim Client ein RMISecurityManager installiert sein (sonst kann kein externer Code geladen werden) Es müssen Permissions für den Client gesetzt werden: Socketverbindung zum Server für RMI über Port 1099 Socketverbindung zum Nachladen von Code hier über Webserver, d.h. Port 80 (oder 8080) Beispiel: Clientprogramm: public class MyClient { public static void main(string[] args) { System.setSecurityManager(new RMISecurityManager()); System.setProperty("java.security.policy", "client.policy");... Policy-Datei für Client: grant { permission java.net.socketpermission server-url: , connect ; permission java.net.socketpermission server-url:80, connect ; permission java.net.socketpermission server-url:8080, connect ; Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 66

65 Verteilung des Klassencodes Die Klassen sollen zur Verteilung auf 3 Teile aufgeteilt werden: server: alle Klassendateien, die für die Ausführung des Servers erforderlich sind alle Stub-Klassen download: alle Klassendateien, die dynamisch vom Client nachgeladen werden sollen inklusive alle abhängigen (z.b. Basisklassen und Interfaces) client: alle Klassendateien, die unmittelbar vom Client verwendet werden die Policy-Datei (z.b. client.policy) Die 3 Teile werden dann folgend verteilt: server: auf dem Rechner des Servers download: bei Verwendung eines Webservers ins download-verzeichnis des Webserver client: auf den Rechern des Client Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 67

66 Starten der verteilten Programme Am Server Starten des RMIRegistry-Programms (oder Verwendung von Registry-Klasse) Microsoft Windows XP > rmiregistry Starten des Server-Programms mit Angabe des Download-Verzeichnisses als Codebase > java Djava.rmi.server.codebase= MyServerApp Am Client Starten des Client-Programms, hier zusätzlich unter Angabe einer Policy-Datei > java Djava.security.policy=client.policy MyClientApp Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 68

67 Literatur Horstmann, Cornell, Core Java 2, Band 2 Expertenwissen, Markt und Technik, 2002: Kapitel 5 Krüger, Handbuch der Java-Programmierung, 3. Auflage, Addison-Wesley, 2003, Kapitel 46 Fundamentals of RMI, Short Course, Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 69

RMI - Remote Method Invocation

RMI - Remote Method Invocation RMI - Remote Method Invocation JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz RMI Motivation Grundarchitektur

Mehr

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1 Remote-Objekte Motivation Architektur Client und Server-Implementierung Parameterübergabe Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H.

Mehr

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Remote-Objekte Motivation Architektur Client und Server-Implementierung Parameterübergabe Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H.

Mehr

Motivation Architektur Client und Server-Implementierung Parameterübergabe Distributed Garbage Collection Verteilung und Nachladen von Code

Motivation Architektur Client und Server-Implementierung Parameterübergabe Distributed Garbage Collection Verteilung und Nachladen von Code Remote-Objekte Motivation Architektur Client und Server-Implementierung Parameterübergabe Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H.

Mehr

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network

Remote-Objekte. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Remote-Objekte Motivation Architektur Client und Server-Implementierung Parameterübergabe Distributed Garbage Collection Verteilung und Nachladen von Code Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H.

Mehr

Praktikum aus Softwareentwicklung 2, Stunde 8

Praktikum aus Softwareentwicklung 2, Stunde 8 Praktikum aus Softwareentwicklung 2, Stunde 8 Lehrziele/Inhalt 1. Remoting Remoting Über Remoting können Objekte über JavaVMs hinweg miteinander kommunizieren. Das ist auch mit Socket-Programmierung möglich.

Mehr

Java Remote Method Invocation (RMI)

Java Remote Method Invocation (RMI) Java Remote Method Invocation (RMI) Alexander Petry 13. Mai 2003 engl.: Entfernter Methodenaufruf 1 Übersicht 1. Einleitung 2. RMI Interfaces und Klassen 3. Parameterübergabe 4. Dynamisches Nachladen von

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation spezielle Technik aus dem Java-Umfeld Ausführung der Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VM s Aufruf

Mehr

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

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz.  Institut für Angewandte Informatik Programmieren II Remote Method Invocation (RMI) Heusch -- Ratz KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Remote Method

Mehr

Java RMI Remote Method Invocation

Java RMI Remote Method Invocation Java RMI Remote Method Invocation Ziel: Aufruf von Instanzmethoden entfernter Objekte basierend auf Java. Paket: java.rmi und Unterpakete Topologie: RMI Registry RMI Server RMI Client Der Server registriert

Mehr

Einführung: Verteilte Systeme - Remote Method Invocation -

Einführung: Verteilte Systeme - Remote Method Invocation - Einführung: Verteilte Systeme - - Prof. Dr. Michael Cebulla 11. Dezember 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 43 M. Cebulla Verteilte Systeme Gliederung 1 2 Architektur RMI Kommunikation

Mehr

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

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 1 Java 1.1 e B Java RMI orientierte Sprache e beschrieben in Klassendefinitionen und andere Datentypen: int, float, boolean, etc. referenzen Verweise auf e keine Zeiger, Adressen o.ä. B.1 B.2 1.1 e (2)

Mehr

Konzepte von Betriebssystem-Komponenten Middleware RMI

Konzepte von Betriebssystem-Komponenten Middleware RMI Konzepte von Betriebssystem-Komponenten Middleware RMI Mario Kiefer 21. Januar 2005 1 Einführung RMI (Remote Method Invocation) ermöglicht es mit relativ einfachen Mitteln verteilte Anwendungen zu erstellen.

Mehr

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

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1 Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7 Inhaltsverzeichnis RMI Projekt gettime 1 Schritt 1: Interface Klasse definieren 1 Schritt 2: Implementation Class definieren 2 Schritt 3: RMI Compiler erstellen

Mehr

C Java RMI C.2 C.4. 1 Java. 1 Java (2) 1 Java (3) Objektorientierte Sprache. Objektorientierte Sprache (fortges.) Objektorientierte Sprache (fortges.

C Java RMI C.2 C.4. 1 Java. 1 Java (2) 1 Java (3) Objektorientierte Sprache. Objektorientierte Sprache (fortges.) Objektorientierte Sprache (fortges. 1 Java C Java RMI orientierte Sprache e und andere Datentypen: int, float, boolean, etc. referenzen Verweise auf e keine Zeiger, Adressen o.ä. Methodenaufruf bei vorhandener referenz Übergabe von Parametern

Mehr

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007 Systemprogrammierung Projekt: Java RMI Wintersemester 2006 / 2007 Systemprogrammierung 1. Einleitung 2. Einführung in RPC 3. RMI 4. Code Beispiele 5. Live Vorstellung 6. Ausblick 7. Fazit 2 1. Einleitung

Mehr

Java-Programmierung. Remote Method Invocation - RMI

Java-Programmierung. Remote Method Invocation - RMI Java-Programmierung Remote Method Invocation - RMI Entwicklungsmethoden Sockets Entwurf verteilter Anwendungen ist relativ aufwändig, da zunächst ein Kommunikationsprotokoll entwickelt werden muss aufwändig

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation Aufruf von Methoden über die Grenzen der VM hinweg. Javaprozesse der rufenden und gerufenen Methode können auf verschiedenen Hosts laufen. Eine RMI-Applikation besteht aus dem

Mehr

B Java RMI B.1 B.2. 1 Java. 1.1 Objekte. Objektorientierte Sprache

B Java RMI B.1 B.2. 1 Java. 1.1 Objekte. Objektorientierte Sprache B Java RMI B.1 1 Java 1.1 Objekte Objektorientierte Sprache Objekte beschrieben in Klassendefinitionen und andere Datentypen: int, float, boolean, etc. Objektreferenzen Verweise auf Objekte keine Zeiger,

Mehr

Remote Method Invocation

Remote Method Invocation Remote Method Invocation Spezielle Technik aus dem Java-Umfeld Ausführung von Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VMs Aufruf

Mehr

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.

7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc. 7.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi) (http://java.sun.com/j2se/1.3/docs/guide/rmi/spec/rmitoc.html) bietet leider nur begrenzte Verteilungsabstraktion Unterstützung

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2013/2014 groppe@ifis.uni-luebeck.de Institut für Informationssysteme Universität zu Lübeck Kommunikations-Middleware Bietet höhere Kommunikations-Dienste

Mehr

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken Mobile und Verteilte Datenbanken Java RMI Vorlesung Wintersemester 2010/2011 groppe@ifis.uni-luebeck.de Institut für Informationssysteme Universität zu Lübeck Java Remote Method Invocation (RMI) Realisierung

Mehr

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

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

7 Remote Method Invocation (RMI)

7 Remote Method Invocation (RMI) 7 Remote Method Invocation (RMI) Verteilte Java Anwendungen; Client/Server Architektur Vorläufige Version 188 c 2005 Peter Thiemann Server: Aufgaben erstellt remote objects Objekte, deren Methoden von

Mehr

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

9. Remote Method Invocation Grundlagen der Programmierung II (Java) 9. Remote Method Invocation Grundlagen der Programmierung II (Java) Prof. Dr. Bernhard Humm Hochschule Darmstadt University of Applied Sciences Sommersemester 2006 Übersicht Grundlagen der Programmierung

Mehr

C Java RMI. 1 Java. Objektorientierte Sprache

C Java RMI. 1 Java. Objektorientierte Sprache 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

Mehr

Überblick. Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2. VS-Übung (SS17) Stubs & Skeletons 2 1

Überblick. Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2. VS-Übung (SS17) Stubs & Skeletons 2 1 Überblick Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2 VS-Übung (SS17) Stubs & Skeletons 2 1 Java Reflection API Übersicht Bietet die Möglichkeit, das

Mehr

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

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1 Komponenten 1 2. Die Anfänge 3 Peter Sturm, Universität Trier 1 Selbstzufrieden Anwendung Hardware 4 Oh? Da gibt es noch jemanden? Anwendung Anwendung TCP/IP Hardware Hardware 5 Peter Sturm, Universität

Mehr

8.1.5 Java RMI Remote Method Invocation

8.1.5 Java RMI Remote Method Invocation 8.1.5 Java RMI Remote Method Invocation (http://java.sun.com/products/jdk/rmi ) (http://java.sun.com/j2se/1.5/docs/guide/rmi ) (http://java.sun.com/docs/books/tutorial/rmi ) (http://java.sun.com/developer/onlinetraining/rmi/rmi.html

Mehr

Überblick. Java Reflection API. Class-Objekte

Überblick. Java Reflection API. Class-Objekte Bietet die Möglichkeit, das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Tutorial: http://docs.oracle.com/javase/tutorial/reflect/index.html [...] This

Mehr

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Überblick Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Stubs & Skeletons Aufgabe 2 Tutorial: http://download.oracle.com/javase/tutorial/reflect/index.html

Mehr

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method Überblick Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen Stubs & Skeletons Aufgabe 2 Tutorial: http://docs.oracle.com/javase/tutorial/reflect/index.html

Mehr

Remote Methode Invocation (RMI) ETIS SS05

Remote Methode Invocation (RMI) ETIS SS05 Remote Methode Invocation (RMI) ETIS SS05 Motivation Ablauf der Kommunikation Erstellung Remote-Service Zusammenfassung Gliederung 2 Motivation I RMI: Remote Method Invokation Möglichkeit verteilte Java-Anwendungen

Mehr

Verteilte Systeme Übung

Verteilte Systeme Übung Verteilte Systeme Übung Tobias Distler, Klaus Stengel, Timo Hönig, Christopher Eibel, Tobias Klaus Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

J Fernmethodenaufrufe Remote Method Invocation (RMI)

J Fernmethodenaufrufe Remote Method Invocation (RMI) J Fernmethodenaufrufe Remote Method Invocation (RMI) ermöglicht Abstraktion in einem verteilten System Socket-Kommunikation Fernaufrufe (RPC) J Fernmethodenaufrufe Remote Method Invocation (RMI) keine

Mehr

Grundlagen verteilter Systeme

Grundlagen verteilter Systeme Universität Augsburg Institut für Informatik Prof. Dr. Bernhard Bauer Stephan Roser Viviane Schöbel Aufgabe 1: Wintersemester 07/08 Übungsblatt 2 20.11.07 Grundlagen verteilter Systeme Lösungsvorschlag

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 15. Oktober 2015 Betriebssysteme / verteilte

Mehr

Client/Server-Programmierung

Client/Server-Programmierung Client/Server-Programmierung WS 2014/2015 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 15. Oktober 2015 Betriebssysteme / verteilte

Mehr

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI 1 Motivation Motivation ierte Objektmodel Standard Middleware für objektorientierte Anwendungen CORBA,.NET-Remoting Java Remote Method Invocation (RMI) Java RMI ierte Objekte undjava RMI Zusammenfassung

Mehr

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

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel UNIVERSITÄT LEIPZIG Mainframe Internet Integration Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013 Java Remote Method Invocation RMI Beispiel el0100 copyright Abt. Technische Informatik,

Mehr

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

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter Remote- und Server-Programmierung Dr. Wolfgang Süß Thorsten Schlachter Remote Method Invocation (RMI) Servlets WebServices 2 Remote Method Invocation (RMI) Das Remote Method Invocation (RMI)-Framework

Mehr

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

Themen. Web Service - Clients. Kommunikation zw. Web Services Themen Web Service - Clients Kommunikation zw. Web Services Bisher: Implementierung einer Java Anwendung und Bereitstellung durch Apache Axis unter Apache Tomcat Java2WSDL Erzeugen einer WSDL-Datei zur

Mehr

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

Verteilte Systeme. Verteilte Objektorientierte Systeme I. Prof. Dr. Oliver Haase Verteilte Systeme Verteilte Objektorientierte Systeme I Prof. Dr. Oliver Haase 1 Überblick Verteilte Objektorientierte Systeme 1 RPC verteilte objektorientierte Architekturen Java RMI Verteilte Objektorientierte

Mehr

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

Übung zur Vorlesung Einführung in Verteilte Systeme Übung zur Vorlesung "Einführung in Verteilte Systeme" Wintersemester 2004/05 Thema: Java RMI Ulf Rerrer Institut für Informatik Universität Paderborn Inhalt Java Remote Method Invocation RMI-Architektur!

Mehr

36.2 Example ClassLoader. 36.3 Example Appletviewer

36.2 Example ClassLoader. 36.3 Example Appletviewer 36 ClassLoader How are classes loaded into the Java Virtual Machine (JVM)? from the local file system (CLASSPATH). by an instance of ClassLoader... and when? - When they are needed the first time. class

Mehr

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) Remote Method Invocation (RMI) Hier soll ein Überblick 1 über die RMI-Technologie der Java 2 Plattform gegeben werden. Inhaltsverzeichnis 1.Überblick...3 2.RMI Architektur...6 2.1.Überblick...6 2.2.RMI

Mehr

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

Inhalt. Übung zur Vorlesung Einführung in Verteilte Systeme Das RMI-Schichtenmodell. Java Remote Method Invocation. Wintersemester 2004/05 Übung zur Vorlesung "Einführung in Verteilte Systeme" Wintersemester 2004/05 Ulf Rerrer Thema: Java RMI Institut für Informatik Universität Paderborn Inhalt Java Remote Method Invocation RMI-Architektur!

Mehr

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

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1) Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1) Robert Tolksdorf und Peter Löhr Überblick 1. Fernaufrufbare Objekte 2. Das Objektverzeichnis rmiregistry 3. Parametersemantik Dokumentation

Mehr

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth Überblick Verteilte Systeme - 4. Übung Tobias Distler, Michael Gernoth Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

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

Programmieren II. Remote-Programmierung. www.kit.edu. Institut für Angewandte Informatik Programmieren II Remote-Programmierung KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Remote-Programmierung Remote Method Invocation

Mehr

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker RMI, Zusammenfassung und Lehrevaluation PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker Steffen Helke Technische Universität Berlin Fachgebiet Softwaretechnik 8. Juli 2013 Übersicht

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Überblick. Verteilte Systeme Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

Überblick. Verteilte Systeme Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth Überblick Verteilte Systeme Übung Tobias Distler, Michael Gernoth Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte

Mehr

Verteilte Systeme: Entfernte Methodenaufrufe

Verteilte Systeme: Entfernte Methodenaufrufe Verteilte Systeme: Entfernte Methodenaufrufe Funktionsweise entfernter Methodenaufrufe Entfernte Schnittstellen und verteilte Objektsysteme Entfernte Methodenaufrufe mit Java RMI Parameterübergabe Call-By-Value

Mehr

14. RMI - Remote Method Invocation

14. RMI - Remote Method Invocation 14. RMI - Remote Method Invocation 14.1 Beteiligte Instanzen Klientenklasse als Aufrufer: - Naming.Lookup(), - MyCall.Invoke(). Interface Spezifikation für: - Server Stub im Klienten, - Server-Skeleton*,

Mehr

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

Überblick. Middleware - Übung. Model-View-Controller. Entwurfsmuster (Design Patterns) Überblick Middleware - Übung Tobias Distler, Michael Gernoth, Rüdiger Kapitza Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de

Mehr

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06 Aufgabe 1 Bitte schreiben Sie ein RMI Objekt, das eine Person repräsentiert. Es soll die folgende Schnittstelle implementieren: public interface Person

Mehr

Softwareentwicklung in verteilten Umgebungen Middleware Case Studies (Coulouris et al., Kapitel 5 und 19) Dieter Schmalstieg Jens Grubert

Softwareentwicklung in verteilten Umgebungen Middleware Case Studies (Coulouris et al., Kapitel 5 und 19) Dieter Schmalstieg Jens Grubert Softwareentwicklung in verteilten Umgebungen Middleware Case Studies (Coulouris et al., Kapitel 5 und 19) Dieter Schmalstieg Jens Grubert Partly based on material by Victor García Barrios and Paul Krzyzanowski

Mehr

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

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 3) Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 3) Robert Tolksdorf und Peter Löhr Überblick 1. Aktivierung und Deaktivierung von Objekten http://java.sun.com/javase/6/docs/technotes/guides/rmi/activation/overview.html

Mehr

D.1 Organisatorisches

D.1 Organisatorisches D Überblick über die 3. Übung D Überblick über die 3. Übung D.1 Organisatorisches D.1 Organisatorisches RPC und ORB Präsentation der Übungsaufgaben 1 und 2 Aufrufsemantiken Hinweise Aufgabe 2 Live in der

Mehr

Info B VL 14: Java Collections/Reflections

Info B VL 14: Java Collections/Reflections Info B VL 14: Java Collections/Reflections Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 14: Java Collections/Reflections

Mehr

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS14) Java RMI 1 1

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS14) Java RMI 1 1 Überblick Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 VS-Übung (SS14) Java RMI 1 1 Fernmethodenaufrufe Remote Method Invocation (RMI) Aufrufe von Methoden an Objekten

Mehr

Praktikum Verteilte Anwendungen

Praktikum Verteilte Anwendungen Technische Informatik (Info II) -Sommersemester 2006 - Folie 1 / 27 0 Gliederung 1.) Kurze Wiederholung/ Einleitung 2.) RPC/ RMI 3.) Praktisches Beispiel 4.) Aufgabenblatt Folie 2 / 27 Wiederholung/ Einleitung

Mehr

Kapitel 6: Verteilte Objekte durch RMI. Middleware in Java vieweg 2005 Steffen Heinzl, Markus Mathes

Kapitel 6: Verteilte Objekte durch RMI. Middleware in Java vieweg 2005 Steffen Heinzl, Markus Mathes Kapitel 6: Verteilte Objekte durch RMI Prinzip von RMI RMI (Remote Method Invocation) erlaubt den Aufruf von Methoden von Objekten, die sich auf einem anderen einem entfernten Rechnersystem befinden. Man

Mehr

Ausnahmebehandlung in Java

Ausnahmebehandlung in Java Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception

Mehr

Verteilte Systeme SS Universität Siegen Tel.: 0271/ , Büro: H-B Stand: 29.

Verteilte Systeme SS Universität Siegen Tel.: 0271/ , Büro: H-B Stand: 29. Verteilte Systeme SS 2017 Universität Siegen rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 29. Mai 2017 Betriebssysteme / verteilte Systeme Verteilte Systeme (1/12) i

Mehr

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff Java Idioms Basic und Advanced Java Coding Style Prof. Dr. Nikolaus Wulff Java Idiome Operator == versus equals Methode equals und hashcode Vermeide NullPointer Java Konstruktoren Function Pointers, Interfaces

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG FORTGESCHRITTENE KONZEPTE Tobias Witt!! 26.03.2014 FEHLERBEHANDLUNG KLASSISCHER ANSATZ Fehlercode als Rückgabewert von Methoden! String Fehlercode als String! int Fehlercode

Mehr

Meta Programming and Reflection in Java

Meta Programming and Reflection in Java Meta Programming and Reflection in Java Overview instanceof operator Java Annotations Java Reflection instanceof operator vergleicht ein Objekt mit einem bestimmten Typ testet ob ein Objekt ist eine Instanz

Mehr

H.2 Distributed Events

H.2 Distributed Events H Überblick über die 7. Übung H Überblick über die 7. Übung 1 RemoteEvent Remote Events ServiceEvents Basisklasse aller Jini Events package net.jini.core.event; import java.rmi.marshalledobject; Security-Policies

Mehr

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

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält

Mehr

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

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen 5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden

Mehr

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

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe: Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -

Mehr

Die abstrakte Klasse Expression:

Die abstrakte Klasse Expression: Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const 501 Die abstrakte Klasse Expression: Expression abstract evaluate() Add Neg Const Leider (zum Glück?) lässt sich nicht die

Mehr

Properties und Proxies

Properties und Proxies g n årà Dr. Winfried Grünewald service@grnwld.de Properties und Proxies Dr. Winfried Grünewald, Stutensee 2011 Version 0.9 2/10 1 Einleitung Die Java Entwicklungsumgebung bietet mit den Properties-Dateien

Mehr

Verteilte Systeme. SoSe Universität Siegen Tel.: 0271/ , Büro: H-B Stand: 14.

Verteilte Systeme. SoSe Universität Siegen Tel.: 0271/ , Büro: H-B Stand: 14. Verteilte Systeme SoSe 2018 Universität Siegen rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 14. Mai 2018 Betriebssysteme / verteilte Systeme Verteilte Systeme (1/14)

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Ausnahmebehandlung und Nebenläufigkeit 9. Vorlesung am 15. Dezember 2010 Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A

Mehr

Überblick. Verteilte Systeme - 4. Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs

Überblick. Verteilte Systeme - 4. Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs Überblick Verteilte Systeme - 4. Übung Tobias Distler, Michael Gernoth, Reinhard Tartler Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme)

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen

14 Abstrakte Klassen, finale Klassen, Interfaces. Auswertung von Ausdrücken. Beispiel. Abstrakte Methoden und Klassen Auswertung von Ausdrücken Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt.

Mehr

Instrumentierung und Dekodierung

Instrumentierung und Dekodierung 116 Copyright 1996-1998 by Axel T. Schreiner. All Rights Reserved. Instrumentierung und Dekodierung Erweiterung der Grafikklassen Das awt-paket erweitert alle Klassen für Grafikobjekte in java.awt, so

Mehr

14 Abstrakte Klassen, finale Klassen, Interfaces

14 Abstrakte Klassen, finale Klassen, Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält, heißt ebenfalls abstrakt. Für eine abstrakte Klasse

Mehr

RMI. Wir haben. Komponenten auf einem Rechner. Remote Method Invocation

RMI. Wir haben. Komponenten auf einem Rechner. Remote Method Invocation RMI Remote Method Invocation Wir haben Komponenten auf einem Rechner Komp1 Komp2 zwei Rechner Wir wollen Komp1 Komp2 TCP/IP aber wie? Fallstudie Chat Einfluss der Architektur auf den Entwurf oder Man kann

Mehr

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS12) Java RMI 1 1

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS12) Java RMI 1 1 Überblick Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 VS-Übung (SS12) Java RMI 1 1 Fernmethodenaufrufe Remote Method Invocation (RMI) Aufrufe von Methoden an Objekten

Mehr

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Generic Programming without Generics from JAVA5 Motivation Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen? Ein Bespiel: sie haben bereits eine Klasse zur Multiplikation von Matrizen

Mehr

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

Verteiltes Rechnen. Verteilte Dienste mit Java Remote Method Invocation (RMI). Prof. Dr. Nikolaus Wulff Verteiltes Rechnen Verteilte Dienste mit Java Remote Method Invocation (RMI). Prof. Dr. Nikolaus Wulff Verteiltes Rechnen Anwendungen im WWW sind meist als Client-Server Architekturen realisiert. Ein Client

Mehr

AvO-Übung 2 Remote Method Invocation

AvO-Übung 2 Remote Method Invocation AvO-Übung 2 Remote Method Invocation Jörg Domaschka und Andreas I. Schmied Institut für Verteilte Systeme 30. Oktober 2007 Übersicht 1 Besprechung der letzten Aufgaben 2 Aufruf-Semantiken 3 Netzwerkkommunikation

Mehr

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am Aufgabe 1 Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am 16.3.2002 Folgende Implementierung löst die gestellte Aufgabe : public interface Figur { public void anzeigen (); public

Mehr

E.1 Object Request Brokers

E.1 Object Request Brokers E Überblick über die 4. Übung E Überblick über die 4. Übung 1 Komponenten eines ORBs Lösungsskizze Aufgabe 2 RPC und ORB Aufrufsemantiken Hinweise Aufgabe 3 Kommunikationsschicht: tauscht Daten zwischen

Mehr

Internetanwendungstechnik (Übung)

Internetanwendungstechnik (Übung) Internetanwendungstechnik (Übung) JacORB S. Bissell, G. Mühl Technische Universität Berlin Fakultät IV Elektrotechnik und Informatik Kommunikations- und Betriebssysteme (KBS) Einsteinufer 17, Sekr. EN6,

Mehr

EINFÜHRUNG IN DIE PROGRAMMIERUNG

EINFÜHRUNG IN DIE PROGRAMMIERUNG EINFÜHRUNG IN DIE PROGRAMMIERUNG FORTGESCHRITTENE KONZEPTE Tobias Witt 26.03.2014 tobias.witt@hhu.de 25.12.01.30 Bürozeiten: 09 Uhr - 12 Uhr FEHLERBEHANDLUNG KLASSISCHER ANSATZ Fehlercode als Rückgabewert

Mehr

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1 IT I: Heute abstrakte Methoden und Klassen Interfaces Interfaces List, Set und Collection 22.11.2018 IT I - VO 7 1 Wissensüberprüfung Überschreiben von Methoden: Aufruf der Methode der Oberklasse ist oft

Mehr

Interface. So werden Interfaces gemacht

Interface. So werden Interfaces gemacht Design Ein Interface (=Schnittstelle / Definition) beschreibt, welche Funktionalität eine Implementation nach Aussen anzubieten hat. Die dahinter liegende Algorithmik wird aber der Implementation überlassen.

Mehr