Komponentenmodelle II Remote Method Invocation (RMI) Detlef Streitferdt Technische Universität Ilmenau RMI Funktionsweise { RMI System Client Server Proxy Stub Remote Reference Layer Remote Reference Layer TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE Transport Layer Komponentenmodelle II 2 Pr ox y / Stellvertreter Muster TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE Komponentenmodelle II 3 Entwicklung RMI-basierter Systeme • Entwurf – welche Objekte sind lokal, welche verteilt? – Server: Schnittstellen verteilter Objekte definieren • Implementierung – Server: Klassen verteilter Objekte erben von spezieller Klasse – Client: Ausnahmen bei verteilten Methodenaufrufen behandeln – Serialisierbarkeit lokaler (Parameter-)Objekte sicherstellen • Auslieferung – Quellcode wie gewohnt mit javac übersetzen – Stubs für verteilte Objekte mit rmic generieren TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE Komponentenmodelle II 4 Schnittstellen verteilter Objekte definieren import java.rmi.*; «interface» java::rmi::Remote public interface Ibibliothek extends Remote { public String findeBuch( String signatur) throws RemoteException; «interface» IBibliothek ... und weitere Methoden ... } findeBuch(signatur) : String TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE Komponentenmodelle II 5 Klassen verteilter Objekte implementieren java::rmi::server:: UnicastRemoteObject Bibliothek buchbestand : *Buch findeBuch(signatur) : String import java.rmi.*; import java.rmi.server.*; public class Bibliothekextends extends UnicastRemoteObject implements Ibibliothek { public Bibliothek() throws RemoteException {} public String findeBuch( String signatur) { ...; return "Buch..."; } «implements» «interface» IBibliothek TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE } Komponentenmodelle II 6 Verteilte Objekte registrieren import java.rmi.*; if (System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager()); try { Bibliothek bib = new Bibliothek(); Naming.rebind("//www.hochschule.de/Bibliothek", bib); } catch (Exception ex) { // Ausnahme behandeln } rmiregistry : java::rmi::Naming "//.../Bibliothek" TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE Komponentenmodelle II 7 Methoden verteilter Objekte aufrufen import java.rmi.*; if (System.getSecurityManager() == null) System.setSecurityManager(new RMISecurityManager()); try { IBibliothek bib = (IBibliothek) Naming.lookup( "//www.hochschule.de/Bibliothek"); bib.findeBuch("24353 GH 78"); } catch (Exception ex) { // Ausnahme behandeln } TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE Komponentenmodelle II 8 Bewertung von RMI • Vorteile – einfache Implementierung (keine IDL, keine UUIDs) – Objekte als Werte übergeben (nicht nur per Referenz) – Garbage Collection wie gehabt – „unabhängig“ vom Betriebssystem • Nachteile – Verteilung durchzieht gesamte Implementierung – festgelegt auf Java als Programmiersprache – proprietäres Kommunikationsprotokoll TU-Ilmenau, Softwaresysteme/Prozessinformatik, KBSE Komponentenmodelle II 9