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 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 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 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 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; 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 BankManager getbankmanager() 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 BankManager getbankmanager() throws RemoteException; 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(customer 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 int id = 0; private final Map<Integer, Account> accounts; private final Map<String, CustomerImpl> customers; public BankManagerImpl() throws RemoteException { accounts = new HashMap<Integer, Account>(); customers = new HashMap<String, public synchronized Customer getcustomer(string name) throws RemoteException { return public synchronized Customer createcustomer(string name) throws RemoteException { CustomerImpl c = new CustomerImpl(name, this); customers.put(name, c); return customers.get(name);... Pratikum SWE 2 Institut für Systemsoftware, Johannes Kepler Universität Linz 41

40 Beispiel BankManager: BankManagerImpl BankManager verwaltet Mengen von Kunden und Konten BankManager erlaubt Zugriff auf Konto und public synchronized Account getaccount(int id) throws RemoteException { return public synchronized Account createaccount(customer c) throws RemoteException { id++; CustomerImpl customer = customers.get(c.getname()); 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; private final BankManager bank; final List<Account> accounts; protected CustomerImpl(String name, BankManager bank) throws RemoteException { super(); this.name = name; this.bank = bank; this.accounts = new public BankManager getbankmanager() throws RemoteException { return 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 BankManager bank; private final Customer customer; private long balance; public AccountImpl(int id, BankManager bank, Customer customer) throws RemoteException { super(); this.id = id; this.bank = bank; this.customer = customer; balance = 0L; listeners = new public int getid() throws RemoteException { return public synchronized BankManager getbankmanager() throws RemoteException { return public synchronized Customer getcustomer() throws RemoteException { return 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 synchronized long withdraw(long diff) throws RemoteException { synchronized (this) { balance = balance - diff; fireaccountchangedevent(); return public synchronized 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 legt BankManager an und registriert diesen als einziges Objekt public class BankServer { private static BankManager bank; private static void start() throws Exception { bank = new BankManagerImpl(); 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()[0]; 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 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 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 extends UnicastRemoteObject { public BankClient(BankManager bm) throws RemoteException { 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

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

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

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

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

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

Ü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

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

-Testen verteilter Anwendungen

-Testen verteilter Anwendungen -Testen verteilter Anwendungen Seminar Simulation und Bildanalyse mit Java im SS04 Konstantin Tjo, Urs Pricking Testen verteilter Anwendungen 1 Übersicht Einführung in verteilte Anwendungen RMI (Remote

Mehr

Implementierung III. Implementierung IV

Implementierung III. Implementierung IV Übersicht Implementierung III GUI und Verhalten (Teil 2) Implementierung IV Schnittstelle zur Umgebung Integration und Test Alexander Geraldy Softwarepraktikum - Teil: Eingebettete Systeme SoSe 20031 Implementierung

Mehr

Grundlagen verteilter Systeme

Grundlagen verteilter Systeme Universität Augsburg Insitut für Informatik Prof. Dr. Bernhard Bauer Wolf Fischer Christian Saad Wintersemester 08/09 Übungsblatt 2 05.11.08 Grundlagen verteilter Systeme Lösungsvorschlag Aufgabe 1: Das

Mehr

Java in Verteilte Systeme - RMI

Java in Verteilte Systeme - RMI In diesem Kursteil Modul 2 : Remote Method Invocation RMI Modul Einleitung Was ist Java RMI? RMI Architektur Übersicht Der Transport Layer Garbage Collection Remote Reference Layer RMI Stubs und Skeletons

Mehr

JAVA Remote Method Invocation JRMP Tutorial

JAVA Remote Method Invocation JRMP Tutorial JAVA Remote Method Invocation JRMP Tutorial Abteilung Technische Informatik, Institut für Informatik, Universität Leipzig Abteilung Technische Informatik, Wilhelm Schickard Institut für Informatik 11.6.2013

Mehr

Java in Verteilte Systeme

Java in Verteilte Systeme In diesem Kursteil Modul 2 : Remote Method Invocation RMI Modul Einleitung Was ist Java RMI? RMI Architektur Übersicht Der Transport Layer Garbage Collection Remote Reference Layer RMI Stubs und Skeletons

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Warum EJB Technologie (1)?

Warum EJB Technologie (1)? Datenbanken und Informationssysteme 2 SS 2004 Prof. Dr. Stefan Böttcher Universität Paderborn Datenbanken und Informationssysteme 2 - Prof. Dr. Stefan Böttcher - SS 2004 Folie EJB - 1 Warum EJB Technologie

Mehr

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck Javadoc Programmiermethodik Eva Zangerle Universität Innsbruck Überblick Einführung Java Ein erster Überblick Objektorientierung Vererbung und Polymorphismus Ausnahmebehandlung Pakete und Javadoc Spezielle

Mehr

Übungen zu Verteilte Systeme : Aufgabe zu Java-RMI (1)

Übungen zu Verteilte Systeme : Aufgabe zu Java-RMI (1) BEREICH DATENTECHNIK U VS 031 01 TH 02 Übungen zu Verteilte Systeme : Aufgabe zu Java-RMI (1) Aufgabenstellung : Es ist ein über RMI aktivierbarer generischer Problemlösungs-Server in Java zu entwickeln.

Mehr

Web-Services Implementierung mit Java

Web-Services Implementierung mit Java Web-Services Implementierung mit Java J. Heinzelreiter WS 2004/05 Java-APIs für Web-Services (1) Anwendungs-Code JAXR JAXM JAX-RPC SAAJ SOAP/SwA JWSDL WSDL XML/XML-Schema Web-Services/Java - 2 Java-APIs

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Kapitel 6. Vererbung

Kapitel 6. Vererbung 1 Kapitel 6 2 Ziele Das sprinzip der objektorientierten Programmierung verstehen Und in Java umsetzen können Insbesondere folgende Begriffe verstehen und anwenden können: Ober/Unterklassen Subtyping Überschreiben

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

Client/Server-Systeme

Client/Server-Systeme Client/Server-Systeme Prof. Dr.-Ing. Wilhelm G. Spruth SS 2005 Teil 16 RMI, DCOM, Webservices cs 1100 ww6 sch 05-97 Remote Method Invocation (RMI) JVM JVM Client Server Stub Java Remote Skeleton Method

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

Schritt 4: Hallo Enterprise Bean

Schritt 4: Hallo Enterprise Bean Prof. Dr. Th. Letschert FB MNI JEE Schritt 4: Hallo Enterprise Bean Einstieg: EJBs erzeugen und nutzen Meine erstes EJB Projekt Enterprise Beans sind eine Backend Technologie, die mit unterschiedlichen

Mehr

Modul Software Komponenten 10 Komponentenarchitektur

Modul Software Komponenten 10 Komponentenarchitektur Modul Software Komponenten 10 Komponentenarchitektur Teil 3 Peter Sollberger Eine erste CORBA Anwendung Inhalt Dienstag, 4. November Object Request Broker CORBA Architektur und Komponenten (Teil 1) Übung:

Mehr

Hello World from CORBA

Hello World from CORBA Hello World from CORBA ein erster Überblick Aufruf einer Objekt-Methode Client gettemperature() Thermometer Objekt- Implementation Thermometer th = new Thermometer(); double t = th.gettemperature(); th

Mehr

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu CORBA Common Object Request Broker Architecture Eine kurze Einführung Ying Lu Verlauf der Präsentation Was ist CORBA CORBA-Architektur Ein Beispiel CORBA im Einsatz CORBA im Vergleich Was ist CORBA Begriffe

Mehr

Java: Vererbung. Teil 3: super() www.informatikzentrale.de

Java: Vererbung. Teil 3: super() www.informatikzentrale.de Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und

Mehr

7.1.1 Grundzüge der Fernaufruf-Implementierung

7.1.1 Grundzüge der Fernaufruf-Implementierung 7.1.1 Grundzüge der Fernaufruf-Implementierung = Aufrufbeziehung Aufrufer Vertreter (proxy, client stub) Fernaufrufdienst A d a p t e r Treiber (skeleton, server stub) Fernaufrufdienst Aufgerufener (Modul,

Mehr

Java - Programmierung - Objektorientierte Programmierung 1

Java - Programmierung - Objektorientierte Programmierung 1 Java - Programmierung - Objektorientierte Programmierung 1 // Klassen und Objekte public class KlaObj public static void main(string args []) Klasse1 a; a = new Klasse1("heute", 47); Klasse1 b = new Klasse1

Mehr

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java Schulung (Java 2 Java Development Kit 5 / 6) 2. Grundlagen der Objektorientierung 2.1 Klassen, Attribute, Methoden Klassen Eine Klasse beschreibt als Bauplan Gemeinsamkeiten einer Menge von Objekten ist also ein Modell, auf dessen Basis Objekte erstellt

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Netzprogrammierung Verteilte Objekte in Java RMI II

Netzprogrammierung Verteilte Objekte in Java RMI II Netzprogrammierung Verteilte Objekte in Java RMI II Prof. Dr.-Ing. Robert Tolksdorf Freie Universität Berlin Institut für Informatik Netzbasierte Informationssysteme mailto: tolk@inf.fu-berlin.de http://www.robert-tolksdorf.de

Mehr

CORBA Implementierung von Client und Server

CORBA Implementierung von Client und Server CORBA Implementierung von Client und Server J. Heinzelreiter WS 2003/04 Implementierung des Clients Initialisierung und Freigabe des ORBs. Mapping von Interfaces. Behandlung von Objektreferenzen. Verwaltung

Mehr

Datum, Uhrzeit: 18. 07. 2014, 10.30 Uhr Matrikelnummer:... Semester: INbac2 Prüfer: Prof. Meixner Note:...

Datum, Uhrzeit: 18. 07. 2014, 10.30 Uhr Matrikelnummer:... Semester: INbac2 Prüfer: Prof. Meixner Note:... Prüfung "Programmieren 2", INbac2, SS 2014 Seite 1 von 7 Datum, Uhrzeit: 18. 07. 2014, 10.30 Uhr Matrikelnummer:... Semester: INbac2 Prüfer: Prof. Meixner Note:... Dauer: 60 Min. Hilfsmittel: keine Punkte:...

Mehr

Verteilte Systeme CS5001

Verteilte Systeme CS5001 Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Verteilte Programme und Anwendungen I - Verteilte Programme Verteilte Algorithmen und verteilte Programme Programm

Mehr

// Zeigt den insgesamt einbezahlten Betrag auf der Bank. // Muss 1600 GE sein. System.out.println("Current Bank balance: " + b.

// Zeigt den insgesamt einbezahlten Betrag auf der Bank. // Muss 1600 GE sein. System.out.println(Current Bank balance:  + b. / Testtreiberklasse, welche das Bankensystem testet. Es werden neue Bankkonten angelegt und Geld deponiert, abgehoben und transferiert. public class Main { / Main Methode fuehrt bestimmte Testfaelle aus.

Mehr

Android Processes & Services

Android Processes & Services Android Processes & Services Jürg Luthiger University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Ziele heute Arbeitsblatt 4 besprechen (inkl. Repetition)

Mehr

Ein einfacher Server. .NET Remoting. Klassentypen

Ein einfacher Server. .NET Remoting. Klassentypen Einführung - eine Klienten-Applikation kann mit einer Komponente interagieren die hinter einer Grenze liegt - Remoting ermöglicht eine Kommunikation von Komponenten Kontext-, Applikationsdomänen- (leichtgewichtiger

Mehr

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

TCP/IP Programmierung. C# TimeServer Java6 TimeClient TCP/IP Programmierung C# TimeServer Java6 TimeClient Stand 19.10.11 21:24:32 Seite 1 von 16 Inhaltsverzeichnis Erläuterung...3 Software...3 C#TimeServer...4 Klasse ServerThread...6 Starten und Beenden...7

Mehr

5. Threads, Serverprozesse und Benachrichtigungen

5. Threads, Serverprozesse und Benachrichtigungen 5. Threads, Serverprozesse und Benachrichtigungen Threads allgemein Threads in Android: Handler und Messages Services: Local, Remote, Binding Benachrichtigungen Entwicklung mobiler Anwendungen Europäische

Mehr

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

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

Mehr

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg COMMON OBJECT REQUEST BROKER ARCHITECTURE Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg Gliederung Motivation Was ist CORBA? Object Management Architecture (OMA ) Interface Definition Language

Mehr

Programmentwicklung ohne BlueJ

Programmentwicklung ohne BlueJ Objektorientierte Programmierung in - Eine praxisnahe Einführung mit Bluej Programmentwicklung BlueJ 1.0 Ein BlueJ-Projekt Ein BlueJ-Projekt ist der Inhalt eines Verzeichnisses. das Projektname heißt wie

Mehr

J2EEKurs. Enterprise JavaBeans Einführung. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany, 10.-14.10.2005. Universität Freiburg, Germany

J2EEKurs. Enterprise JavaBeans Einführung. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany, 10.-14.10.2005. Universität Freiburg, Germany Enterprise JavaBeans Einführung Universität Freiburg, Germany Sommercampus, Freiburg, Germany, 10.-14.10.2005 Inhalt Allgemeines Motivation Rollen Aufbau einer EJB Arten von Beans Enterprise JavaBeans

Mehr

Web-Services Implementierung

Web-Services Implementierung Web-Services Implementierung Praktikum Informationsintegration 8.11.2005 Agenda Aktueller Stand / Abgabe Implementierung Wie geht das mit Java und Tomcat? Service Client 2 Abgabe Teil 1 Ein paar Zahlen

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können

Mehr

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Programmiermethodik. Übung 13

Programmiermethodik. Übung 13 Programmiermethodik Übung 13 Sommersemester 2010 Fachgebiet Software Engineering andreas.scharf@cs.uni-kassel.de Agenda Vorstellung Musterlösung HA9 Mancala Showroom Client/Server Kommunikation in Java

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Praktikum Internetprotokolle - POP3

Praktikum Internetprotokolle - POP3 Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Praktische Informatik und Medieninformatik Fachgebiet Telematik/Rechnernetze 19. Mai 2008 1 Aufgabenstellung Praktikum

Mehr

Javakurs 2013 Objektorientierung

Javakurs 2013 Objektorientierung Javakurs 2013 Objektorientierung Objektorientierte Programmierung I Armelle Vérité 7 März 2013 Technische Universität Berlin This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten CORBA-Konzept Ziele Common Object Request Broker Architecture CORBA Plattformunabhängige Kommunikation Transparente Verteilung von Objekten CORBA-Konzept Object Management Group Spezifiziert den CORBA-Standard

Mehr

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien CORBA Beispiel einer Middleware-Plattform Christian Fass WS 2013/14 Software Engineering: Basistechnologien Allgemeines Common Object Request Broker Architecture Middleware: Vermittelt zwischen Obekten/Prozessen

Mehr

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2010 Gerald.Ehmayer@borland.com

Praktikum aus Softwareentwicklung 2. Web Services. Java Praktikum SS 2010 Gerald.Ehmayer@borland.com Web Services Java Praktikum SS 2010 Gerald.Ehmayer@borland.com 1 Web Services Einführung Definition, Eigenschaften, Anwendungen... JAX-RPC Überblick, Architektur... JAX Übersicht, Architektur Java Praktikum

Mehr

Assoziation und Aggregation

Assoziation und Aggregation Assoziation und Aggregation Martin Wirsing in Zusammenarbeit mit Matthias Hölzl, Nora Koch 05/03 2 Ziele Verstehen der Begriffe Assoziation und Aggregation Implementierung von Assoziationen in Java schreiben

Mehr

Typische Probleme. 7. Performance und Speicherauslastung. Parameter von java mit Performance-Einfluss. Parameter von javac mit Performance-Einfluss

Typische Probleme. 7. Performance und Speicherauslastung. Parameter von java mit Performance-Einfluss. Parameter von javac mit Performance-Einfluss 7. Performance und Speicherauslastung Java-Parameter mit Performance-Einfluss Versteckte Speicherlecks Direkte Zeitmessung in Java Konzept von Performance-Messwerkzeugen Netbeans-Profiler Software-Qualität

Mehr

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden VIII: Vererbung Unterklassen einer Klasse Vererbung von Methoden und Instanzvariablen Überschreiben von Methoden Vererbung als Realisierung einer is-a Beziehung. Informatik I VIII: Vererbung 259 Beispiel:

Mehr

Object Relational Mapping Layer

Object Relational Mapping Layer Object Relational Mapping Layer Views Controlers Business logic GUI OO-application logic Object-relational-Mapping Relational DBMS PHP (propel) 1/18 Propel - Persistance Layer OR-Mapper für PHP Portierung

Mehr

Softwareentwicklung in verteilten Umgebungen, Teil 5 Middleware (Coulouris et al., Kapitel 5) Dieter Schmalstieg

Softwareentwicklung in verteilten Umgebungen, Teil 5 Middleware (Coulouris et al., Kapitel 5) Dieter Schmalstieg Softwareentwicklung in verteilten Umgebungen, Teil 5 Middleware (Coulouris et al., Kapitel 5) Dieter Schmalstieg Partly based on material by Victor García Barrios Warum Middleware? TCP/IP hat niedrige

Mehr

Java Einführung Methoden in Klassen

Java Einführung Methoden in Klassen Java Einführung Methoden in Klassen Lehrziel der Einheit Methoden Signatur (=Deklaration) einer Methode Zugriff/Sichtbarkeit Rückgabewerte Parameter Aufruf von Methoden (Nachrichten) Information Hiding

Mehr

CORBA. Systemprogrammierung WS 2006-2007

CORBA. Systemprogrammierung WS 2006-2007 CORBA Systemprogrammierung WS 2006-2007 Teilnehmer: Bahareh Akherattalab Babak Akherattalab Inhaltsverzeichnis: Verteilte Systeme Vergleich zwischen lokale und verteilte Systeme Verteilte Anwendungen CORBA

Mehr

Smalltalk vs. Java c Chris Burkert 2002. Smalltalk versus Java

Smalltalk vs. Java c Chris Burkert 2002. Smalltalk versus Java Smalltalk versus Java Gliederung Einführung Geschichte sprachliche Aspekte technische Aspekte theoretische Aspekte praktische Aspekte Fazit Einführung - Merkmale Objektorientierung Einführung - Merkmale

Mehr

Netzwerkprogrammierung

Netzwerkprogrammierung Netzwerkprogrammierung 1 Netzwerkverbindungen Das Entwurfsziel von Java war: Einfache Verbindung zwischen Rechnern und SetBox-Systemen. Das Standardpaket java.net hilft bei allen Netzwerkverbindungen.

Mehr

2.4.3 Polymorphie (Wiederholung von Alp2)

2.4.3 Polymorphie (Wiederholung von Alp2) 2.4.3 Polymorphie (Wiederholung von Alp2) Sparbuch einsparbuch = new Sparbuch(3.0); Konto einkonto; KontoDrucker = new KontoDrucker(); KontoDrucker.setzeKonto(einSparbuch); einkonto = einsparbuch; Wie

Mehr

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel FB Physikalische Technik Musterlösungen Teil 4 Aufgabe 1 package teil4; import javax.swing.*; public class Ei { int haltung, ident; String

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

Exceptions: Parameterprüfung import java.io.ioexception;

Exceptions: Parameterprüfung import java.io.ioexception; PPK2 Java Exceptions, Dateien Seite 1 von 31 Exceptions: Parameterprüfung import java.io.ioexception; public class Parameters public static String Methode(String str,exception obj,int index, String[] array)

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 A. Beschreibung der Projektarbeit. Welche Aufgabe haben Sie im Rahmen der Projektarbeit gelöst? 2. Mit welchen Tools bzw. Programmen (Anwendung,

Mehr

C# im Vergleich zu Java

C# im Vergleich zu Java C# im Vergleich zu Java Serhad Ilgün Seminar Universität Dortmund SS 03 Gliederung Entstehung von C# und Java Überblick von C# und Java Unterschiede und Gemeinsamkeiten Zusammenfassung und Ausblick Entstehung

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

5.6 Vererbung. Vererbung

5.6 Vererbung. Vererbung 5.6 Vererbung Klassen können zueinander in einer "ist ein"- Beziehung stehen Beispiel: Jeder PKW ist ein Kraftfahrzeug, jedes Kraftfahrzeug ist ein Transportmittel aber: auch jeder LKW ist ein Kraftfahrzeug

Mehr

Klausur zur Vorlesung Verteilte Systeme im SS 2007 Prof. Dr. Odej Kao 24. Juli 2007

Klausur zur Vorlesung Verteilte Systeme im SS 2007 Prof. Dr. Odej Kao 24. Juli 2007 Klausur zur Vorlesung Verteilte Systeme im SS 2007 Prof. Dr. Odej Kao 24. Juli 2007 Name: Vorname: Matrikelnummer: Studiengang: E-Mail: Schreiben Sie zunächst sofort Ihren Namen und Matrikelnummer auf

Mehr

Dynamische Plug-ins mit Eclipse 3. Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org)

Dynamische Plug-ins mit Eclipse 3. Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org) Dynamische Plug-ins mit Eclipse 3 Martin Lippert (martin.lippert@it-agile.de, www.it-agile.de) Tammo Freese (freese@acm.org) Überblick Die Ausgangslage Dynamische Plug-ins Warum? Eclipse 3 Die OSGi-basierte

Mehr

Synchronisation in Java. Invisible Web

Synchronisation in Java. Invisible Web Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections

Mehr

Anwendung eines Enterprise Java Beans

Anwendung eines Enterprise Java Beans Anwendung eines Enterprise Java Beans EJB Server EJB Container Remote Interface Home Interface EJB Object Der EJB Container kümmert sich um die Kommunikation des Beans mit anderen Komponenten, wobei er

Mehr

16. Remote Method Invocation

16. Remote Method Invocation 16. Remote Method Invocation 16.1 Object Request Broker 16.1.1 Remote Procedure Call Siehe hierzu auch Band 1, Abschnitt 10.1.1. Abb. 16.1.1 Server und Client Stubs Client und Server laufen als zwei getrennte

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 JavaParty: Javas Begleiter für Verteiltes Rechnen Prof. Dr. Walter F. Tichy Thomas Moschny Ali Jannesari Inhalt JavaParty: Javas Begleiter

Mehr

CORBA (Überblick, IDL)

CORBA (Überblick, IDL) Friedrich-Alexander-Universität Erlangen-Nürnberg Konzepte von Betriebssystemkomponenten CORBA (Überblick, IDL) Radu Vatav 1. Geschichte Die Object Management Group (OMG), 1989 gegründet, hatte das Ziel

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Rechnerbündel (Cluster Computing) Wintersemester 2005/06 Prof. Dr. Walter F. Tichy Thomas Moschny Inhalt JavaParty: Javas Begleiter für verteiltes Rechnen Java-Konzepte für parallele und verteilte parallele

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

unterschiedlichen Sprachen

unterschiedlichen Sprachen 8.1.6.NET Remoting.Net ( dotnet ) : von Microsoft eingeführte Plattform für verteilte Anwendungen, virtuelle Maschine für die verteilte Ausführung von Programmen in unterschiedlichen Sprachen C# ( Csharp

Mehr

Kapitel 14. Systemarchitektur

Kapitel 14. Systemarchitektur 1 Kapitel 14 Ziele 2 Grundprinzipien der verstehen Schichtenarchitekturen kennenlernen Modelle und Programme mit Paketen strukturieren Eine Architektur für eine einfache Bankanwendung konstruieren Grundprinzipien

Mehr

Netzprogrammierung: Microsoft.NET Remoting

Netzprogrammierung: Microsoft.NET Remoting Netzprogrammierung: Microsoft.NET Remoting Robert Tolksdorf und Peter Löhr Überblick 1. Fernaufrufbare Objekte 2. Parameterübergabe 3. Konfigurationsdateien http://msdn.microsoft.com/en-us/library/72x4h507(vs.85).aspx

Mehr

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Eclipse Equinox als Basis für Smart Client Anwendungen Christian Campo, compeople AG, 5.7.2007 Java Forum Stuttgart 2007 Übersicht Definition / Architektur Smart Client Smart Client mit RCP / Equinox Gesamtfazit

Mehr

Client/Server-Systeme

Client/Server-Systeme Client/Server-Systeme Prof. Dr.-Ing. Wilhelm G. Spruth SS 2004 Teil 15 Intersystem-Kommunikation RMI, DCOM, Webservices, SNA cs 1100 ww6 sch 05-97 Remote Method Invocation (RMI) Aufruf von Java Programmen

Mehr

Java Security. Sicherheit durch Classloader, Security Manager und Co. Prof. Dr. Nikolaus Wulff

Java Security. Sicherheit durch Classloader, Security Manager und Co. Prof. Dr. Nikolaus Wulff Java Security Sicherheit durch Classloader, Security Manager und Co. Prof. Dr. Nikolaus Wulff Das Java Sicherheitskonzept Java wurde von Anfang an auf Sicherheit im Internet ausgelegt. Unsicherer Code

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen Grundlagen der Programmierung Prof. H. Mössenböck 10. Klassen Motivation Wie würde man ein Datum speichern (z.b. 13. November 2004)? 3 Variablen int da; String month; int ear; Unbequem, wenn man mehrere

Mehr

Einführung in COM. 04.04.2006 Seite 1

Einführung in COM. 04.04.2006 Seite 1 Einführung in COM 04.04.2006 Seite 1 Ziele Sie kennen die Funktion der Registry für COM Sie können die Struktur eines COM-Objekts erklären Sie können erklären, wie ein remote-server gestartet wird 04.04.2006

Mehr

Klausur Verteilte Systeme

Klausur Verteilte Systeme Klausur Verteilte Systeme SS 2005 by Prof. Walter Kriha Klausur Verteilte Systeme: SS 2005 by Prof. Walter Kriha Note Bitte ausfüllen (Fill in please): Vorname: Nachname: Matrikelnummer: Studiengang: Table

Mehr

Java Tipps für Lehrer. Table des matières. Einleitung

Java Tipps für Lehrer. Table des matières. Einleitung Java Tipps für Lehrer Table des matières Einleitung..1 Tipp 1: Gültige Objekte erzeugen.2 Tipp 2: Objekte nicht wiederverwenden.3 Tipp 3: Direkt auf die eigenen Attribute zugreifen4 Tipp 4: Ausgabe-Strings

Mehr

Grundlagen zur nebenläufigen Programmierung in Java

Grundlagen zur nebenläufigen Programmierung in Java Grundlagen zur nebenläufigen Programmierung in Java Karlsruher Entwicklertag 2013 5. Juni 2013 Referent: Christian Kumpe Inhalt des Vortrags Was zeigt dieser Vortrag? Ein einfaches Beispiel mit allerlei

Mehr

Client Server -Anwendungen mit UML und Java

Client Server -Anwendungen mit UML und Java 3. Informatiktag NRW Client-Server mit UML und Java - 1/40 29.3.2004 Client Server -Anwendungen mit UML und Java 3. Informatiktag NRW 29.3.04 Barbara Leipholz-Schumacher Euregio-Kolleg, Würselen 3. Informatiktag

Mehr

Connecting Android. Externe Hardware mit dem grünen Roboter verbinden. Alexander Dahmen Dominik Helleberg

Connecting Android. Externe Hardware mit dem grünen Roboter verbinden. Alexander Dahmen Dominik Helleberg Connecting Android Externe Hardware mit dem grünen Roboter verbinden Alexander Dahmen Dominik Helleberg Speaker Dominik Helleberg Mobile Development Android / Embedded Tools http://dominik-helleberg.de/+

Mehr

1. Der Einstieg in Java

1. Der Einstieg in Java 1. Der Einstieg in Java Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen

Mehr

Exceptions. Prof. Dr. Margarita Esponda SS 2012. M. Esponda-Argüero

Exceptions. Prof. Dr. Margarita Esponda SS 2012. M. Esponda-Argüero Exceptions Prof. Dr. Margarita Esponda SS 2012 1 Ausnahmen Eine Ausnahme (Exception) ist ein Fehler oder ein nicht geplantes Ereignis, das während der Ausführung eines Programms vorkommt und dessen normalen

Mehr

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs 4. s Ein kleiner Einstieg Erinnerung: HTTP und HTML Idee von Web n und Containern Erstellung einfacher s (zunächst software technisch übelst unstrukturiert) Literatur: B. Basham, K. Sierra, B. Bates, Head

Mehr

Scripting und Compilation

Scripting und Compilation Scripting und Compilation JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer Scripting und Compilation Scripting in der Java VM Compilation

Mehr