„Verteilte Objekte“ Java RMI CORBA Mario Kaiser [email protected] Warum RMI? Client erwünscht Zugriff auf JavaObjekte Server Java-Wrapper („schöne“ Objekte) Anwendung (Homologiesuche) Datenbank („E.coli-Genom“) TCP/IP Inhalt Inhaltsübersicht 1. Architekturmerkmale 2. Parameterübergabe und Serialisierung 3. Aspekte der Implementierung 4. Sicherheit 5. Beispiel 6. Java IDL (CORBA) - Übersicht 7. RMI vs. CORBA Architekturmerkmale Verhalten vs. Implementierung Client Server Objektimplementierung (class BlastImpl) Objektverhalten (interface Blast) „RMI“ Architekturmerkmale RMI-Schichten (jdk 1.1) Clientanwendung Stub Remote Reference Layer Serveranwendung JRMP Skeleton Remote Reference Layer Netzwerkschicht (TCP/IP, Unicast) Architekturmerkmale Funktionsweise von RMI Namensdienst (RMI-Registrierung) Naming.rebind(„rmi://host:port/Name“, obj); Server Naming.lookup(„rmi://host:port/Name“); Client Remote Object 1 Remote Object 2 Parameterübergabe und Serialisierung Parameterübergabe Als Rückgabewerte und Methodenparameter: • Primitive Datentypen (char, float, int, etc.): by value • Objekte lokal: by reference entfernt: by value (!) Als entfernte Objekte (durch Namensdienst): by reference BlastInterface theBlast = (BlastInterface)Naming.lookup("BlastServer"); Parameterübergabe und Serialisierung „Serialisierung (I)“ K, A, F, F, E, E, /, Z, U, C, K, E, R Serialisierung wird benötigt für: • das Speichern und Kopieren von Objekten • Netzwerkoperationen mit Objekten (RMI, Sockets) viele Objekte sind bereits serialisiert (Vector, String, File, etc.) eigene Objekte implementieren Schnittstelle Serializable Parameterübergabe und Serialisierung „Serialisierung (II)“ ObjectOutputStream ObjectInputStream in byte[ ], char[ ] .writeObject(obj) (MeinObjekt) in.readObject() class MeinObjekt implements Serializable { ... transient Typ Bezeichner static Typ Bezeichner } Implementierungsaspekte Entwurf der Klassen Interface (BlastInterface) • leitet sich von java.rmi.Remote ab • deklariert RemoteExceptions • ist public Server (BlastServer) • Sicherheit! • Export des entfernten Objekts • Bindung an Namensdienst Implementierung des entfernten Objektes (BlastImpl) • implementiert das Interface • falls nötig: Methoden zur Serialisierung •leitet sich von UnicastRemoteObject ab Vorsicht: Client fehlt! Implementierungsaspekte Kompilieren und Starten Kompilieren • alle Klassen kompilieren • das entfernte Objekt mittels rmic in Stub und Skeleton auftrennen. Starten • Namensdienst serverseitig starten: rmiregistry • Server starten • Client starten Sicherheit Sicherheitslücken Parameter, Rückgabewerte •BlastClient Client •BlastServer Server •BlastInterface •BlastImpl_Skel •Genedata •BlastImpl_Stub •BlastInterface •Genedata Stub-Klassen Sicherheit Erlaubnis und Genehmigung Client braucht Sicherheit: •Permissions in *.policy-Datei festgehalten grant (codebase) { permission.java.security.AllPermission; }; Server braucht Sicherheit bei Client-Callbacks CORBA CORBA - Übersicht • (Common Object Request Broker Adapter) • Standard für verteilte Objekte (Hrsg.: Object Managment Group) • Unabhängigkeit von Plattform und Sprache • Bestandteile • ORB (Objektmanager) • IDL (Schnittstellensprache) • IIOP (Internet Inter-ORB-Protocol) CORBA CORBA - Architektur Clientanwendung (C++) Serveranwendung (Java) interface.idl Stub (C++) ORB IIOP Skeleton (Java) ORB Netzwerkschicht CORBA CORBA vs. RMI • RMI ist pures Java - CORBA ist sprachunabhängig • RMI erlaubt Migration von entfernten Objekten • CORBA ist ein „erwachsener“ Standard • RMI ist wesentlich leichter zu erlernen • Geschwindigkeit? Quellen Quellennachweis • RMI: Tutorials und WhitePaper • http://developer.java.sun.com/developer/onlineTraining/rmi/ • http://java.sun.com/docs/books/tutorial/rmi/index.html • http://developer.java.sun.com/developer/JDCTechTips/2001/tt0227.html • http://java.sun.com/marketing/collateral/javarmi.html • CORBA: Tutorials und Spezifikation • http://developer.java.sun.com/developer/onlineTraining/corba/ • http://www.corba.org/ • Buch • Jim Farley, Java Distributed Computing, O‘Reilly 1998