Komponententechnologien Winter2016/17 Komponenten 1 2. Die Anfänge 3 ©PeterSturm,UniversitätTrier 1 Komponententechnologien Winter2016/17 Selbstzufrieden Anwendung Betriebssystem Hardware 4 Oh? Da gibt es noch jemanden? Anwendung Betriebssystem Hardware Anwendung TCP/IP Betriebssystem Hardware 5 ©PeterSturm,UniversitätTrier 2 Komponententechnologien Winter2016/17 … und der ist anders als ich? Anwendung ? Anwendung Betriebssystem Betriebssystem Hardware Hardware 6 Jeder versteht Jeden! ©PeterSturm,UniversitätTrier 7 3 Komponententechnologien Winter2016/17 RPC 8 Betriebssystem • Dateisystem, E/A, Prozeßverwaltung, Paging, ... Server Betriebssystem Rechner1 • Lokale Server Server Client Client Server Server Client Client Client/Server-Architektur Rechner2 • Entfernte Server • Netzwerkdateisystem, z.B. NFS, Verteiltes Dateisystem, SSH, WWW-Server (httpd), Uhrensynchronisation (ntp), ... ©PeterSturm,UniversitätTrier 9 4 Komponententechnologien Winter2016/17 RPC-Architektur Anwendung Lokaler Prozeduraufruf: r := f(p); f Client Server r := rp(p); Client-Stub rp 6 rp 3 1 Server-Stub rp 4 send/receive Betriebssystem Betriebssystem Rechner Rechner 2 5 Netzwerk 10 Marshalling • Encoding of basic data types may differ • Little endian vs. big endian • … • Define a generic network standard • Sender converts from local to network • Receiver converts from network to local • Examples • • • • External data representation (xdr) ASN.1 XML (SOAP) JSON 11 ©PeterSturm,UniversitätTrier 5 Komponententechnologien Winter2016/17 RPC Compiler Interface Description • Server • Defines a set of remote procedures IDLCompiler • Define signatures • Name of procedure • Type and sequence of arguments • Return type ServerStub ClientStub .c .c .c .c .c • Interface Definition Language Compiler (e.g.C++) • IDL compiler generates • Client stubs • Server stubs • Additional server functionality Server Client 12 OO-RPC 13 ©PeterSturm,UniversitätTrier 6 Komponententechnologien Winter2016/17 Aus RPC wird RMI • Zusätzlicher Objektbezug wird deutlicher • Siegeszug virtueller Maschinen • Java-Ökosystem • .NET Framework 14 JAVA RMI 15 ©PeterSturm,UniversitätTrier 7 Komponententechnologien Winter2016/17 Java RMI • Remote Method Invocation • Java-basierte OO-Variante eines RPC • Objekte inkl. Code können ausgetauscht werden • Vorteil einer homogenen Sprachumgebung • Sicherheitsproblematik „Function Shipping“ • Reflection • U.a. Generierung der Proxies 16 Architektur RMI RMI Client rmiregistry RMI RMI RMI Server WebServer URLProtocol URLProtocol WebServer 17 http://java.sun.com/docs/books/tutorial/rmi/overview.html ©PeterSturm,UniversitätTrier 8 Komponententechnologien Winter2016/17 Am Anfang war das Interface package syssoft.rmi_example; import java.rmi.Remote; import java.rmi.RemoteException; public interface Compute extends Remote { int Add ( int x, int y ) throws RemoteException; int Sub ( int x, int y ) throws RemoteException; } • Ableitung von Marker-Interface Remote (leeres Interface) • Erkennen RMI-zugänglicher Interfaces über Reflection • Remote-Methoden „werfen“ RemoteException • Zugeständnis an mögliche Fehlerfälle in verteilten Systemen 18 package syssoft.rmi_example.server; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; Server import syssoft.rmi_example.*; public class Server implements Compute { public Server() { super(); } public int Add ( int x, int y ) { return x+y; } } public static void main(String[] args) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { String name = "SyssoftCompute"; Compute engine = new Server(); Compute stub = (Compute) UnicastRemoteObject.exportObject(engine,0); Registry registry = LocateRegistry.getRegistry(); registry.rebind(name, stub); System.out.println("ComputeEngine bound"); } catch (Exception e) { System.err.println("ComputeEngine exception:"); e.printStackTrace(); } } 19 ©PeterSturm,UniversitätTrier 9 Komponententechnologien Winter2016/17 package syssoft.rmi_example.client; Client import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import syssoft.rmi_example.*; public class Client { public static void main(String[] args) { if (System.getSecurityManager() == null) { System.setSecurityManager(new SecurityManager()); } try { String name = "SyssoftCompute"; Registry registry = LocateRegistry.getRegistry(args[0]); Compute comp = (Compute) registry.lookup(name); int result = comp.Add(21, 21); System.out.println(result); } catch (Exception e) { System.err.println("SyssoftCompute exception:"); e.printStackTrace(); } } } 20 # Compiling, packaging, and distributing the interface javac syssoft/rmi_example/Compute.java jar cvf run/Compute.jar syssoft/rmi_example/Compute.class cp run/Compute.jar ~peter/Sites 42 # Preparing the server javac -cp run/Compute.jar syssoft/rmi_example/server/Server.java # Preparing the client javac -cp run/Compute.jar syssoft/rmi_example/client/Client.java # Starting RMI registry # rmiregistry & # Running server java -cp .:run/Compute.jar Djava.rmi.server.codebase=http://localhost/~peter/Compute.jar -Djava.rmi.server.hostname=localhost Djava.security.policy=run/server.policy syssoft.rmi_example.server.Server & sleep 10 # Running client java -cp .:run/Compute.jar -Djava.rmi.server.codebase=http://localhost/~peter/ -Djava.security.policy=run/client.policy syssoft.rmi_example.client.Client localhost 21 ©PeterSturm,UniversitätTrier 10 Komponententechnologien Winter2016/17 .NET Remoting 22 Interface 23 ©PeterSturm,UniversitätTrier 11 Komponententechnologien Winter2016/17 Implementierung 24 Server 25 ©PeterSturm,UniversitätTrier 12 Komponententechnologien Winter2016/17 Client 26 ©PeterSturm,UniversitätTrier 13