Corba Systemprogrammierung WS 08 / 09 21.01.09 Roginer - Fontana - Heinisch 1
Gliederung Definition Historie RPC Eigenschaften Architektur IDL-Beispiel Anwendungen OMA Services Facilities Client-Server Vor und Nachteile Corba vs. RMI Fazit Quellen 21.01.09 Roginer - Fontana - Heinisch 2
Corba Common Object Request Broker Architecture Objekt Orientierte Middleware Ziel: Ort-, Plattform- und Implementations-unabhängige Kommunikation zwischen Applikationen. 21.01.09 Roginer - Fontana - Heinisch 3
Historie CORBA 1.0 (Oktober 1991) CORBA Object Model IDL (Interface Definition Language) API's für Dynamic Request Management and Invocation (DII) and Interface Repository C mapping 21.01.09 Roginer - Fontana - Heinisch 4
Historie CORBA 2.0 (August 1996) Erste große Revision IDL C++ / Smalltalk CORBA 3.0 (Juli 2002) Umsetzungen in Java vereinfacht CORBA 3.0.2 (Dezember 2002) Aktuelle Version 21.01.09 Roginer - Fontana - Heinisch 5
Historie Gründer: OMG ( Object Management Group ) 1989 gegründetes Konsortium herstellerunabhängige systemübergreifende Objektorientierte Programmierung 11 Firmen zur Gründung( IBM, Apple, ) 2008 beitritt von Microsoft über 800 Mitglieder 21.01.09 Roginer - Fontana - Heinisch 6
RPC (Remote Procedure Call) Technik zur Realisierung von Interprozesskommunikation Grundgedanke 1976 von James E. White Client Server Modell CORBA: Plattform unabhängiges RPC System 21.01.09 Roginer - Fontana - Heinisch 7
CORBA - Eigenschaften Objekte als Berechnungseinheiten: Methoden von Objekten können (entfernt) aufgerufen werden Ortstransparenz: Für den Aufrufer ist es egal, wo sich ein Objekt befindet Programmiersprachenunabhängigkeit: Komponenten einer verteilten Anwendung können in verschiedenen Programmiersprachen entwickelt werden 21.01.09 Roginer - Fontana - Heinisch 8
CORBA - Eigenschaften Hardware-, Betriebssystemunabhängigkeit: CORBA kann prinzipiell auf jeder Hardware und unter jedem Betriebssystem verwendet werden Herstellerunabhängigkeit: Verschiedene CORBA-Implementationen sind kompatibel, wenn sie sich an die Spezifikation halten 21.01.09 Roginer - Fontana - Heinisch 9
Corba Architektur ORB ( Object Request Broker ) Kern von Corba Vermittler, der die Kommunikation von Objekten sowohl betriebssystem- als auch programmiersprachenunabhängig innerhalb eines verteilten Systems, wie z. B. des Internets ermöglicht. 21.01.09 Roginer - Fontana - Heinisch 10
Corba Architektur ORB ( Object Request Broker ) 21.01.09 Roginer - Fontana - Heinisch 11
Corba Architektur IIOP ( Internet Inter ORB Protocol ) Corba Kommunikations-Protokoll, zum Aufruf von Methoden über Netzwerk. Legt fest wie GIOP-Nachrichten über TCP/IP-Netzwerke ausgetauscht werden Ermöglicht das Internet selbst als Backbone-ORB zu verwenden, durch das mehrere ORBs verbunden werden können 21.01.09 Roginer - Fontana - Heinisch 12
Corba Architektur IIOP ( Internet Inter ORB Protocol ) 21.01.09 Roginer - Fontana - Heinisch 13
Corba Architektur IDL ( Interface Definition Language ) Sprachsyntax zur Beschreibung von Schnittstellen einer Software-Komponente. Durch die IDL lassen sich Objekte und die auf sie anwendbaren Methoden beschreiben. Spezielle Compiler übersetzen direkt in andere Programmiersprachen(Language Binding) wie C/C++/Java... 21.01.09 Roginer - Fontana - Heinisch 14
IDL Beispiel: //IDL module BankSimple { // Definiere einen Typ für Geld typedef float Geld; // Prototyp für Interface Account. interface Account; interface Bank {... }; interface Account { // Account Besitzer und Guthaben. readonly attribute string name; readonly attribute Geld guthaben; // Verfügbare Funktionen des Accounts. void deposit (in Geld menge); void withdraw (in Geld menge); }; }; 21.01.09 Roginer - Fontana - Heinisch 15
Corba / Anwendungen Verteilte Anwendungen Anwendung deren Bestandteile, sich über mehrere Prozesse verteilen. Heterogene Anwendungen Unterscheidung Hardware, Software und Programmiersprachen. Objektorientierte Anwendungen Entwicklung hauptsächlich mit Objekten. 21.01.09 Roginer - Fontana - Heinisch 16
OMA (Object Management Architecture) Gesamtarchitektur, in der verschiedene Softwarekomponenten transparent in heterogenen Umgebungen miteinander kommunizieren können 21.01.09 Roginer - Fontana - Heinisch 17
Corba Services Naming Service ermöglicht serverobjekten mittels festgelegten namen angesprochen zu werden Trading Service auffinden von Objekten zur Laufzeit Event Service ermöglicht lose, gekoppelte oder ereignisbasierte n:n Kommunikation Life Cycle Service Operationen zum Kopieren (Migrieren), Verschieben und Löschen von Objekten zur Verfügung. 21.01.09 Roginer - Fontana - Heinisch 18
Corba Facilities CORBA Facilities bieten dem Entwickler standardisierte Lösungen für eine Aufgabe. Über CORBA hinaus definieren die Facilities einen Standard mit einer Schnittstelle zu jeder Programmiersprache. 21.01.09 Roginer - Fontana - Heinisch 19
Horizontale Facilities Horizontale Facilities sind Dienste mit einem breiten Anwendungsgebiet, die eine Basis für jede Applikation sind. Beispiele sind: Internationalization Service Print Facility Mobile Agents Facility 21.01.09 Roginer - Fontana - Heinisch 20
Vertikale (Domain) Facilities Speziellere Dienste werden nun von den vertikalen Facilities angeboten. Die Entwicklung erfolgt durch die Domain Task Forces Drei Beispiele für Domain Facilities sind: Air Traffic Control Macromolecular Structure Person Identification Service 21.01.09 Roginer - Fontana - Heinisch 21
Beispiel: Client-Server Modell Beispiel: IDL // Datei: hello.idl module H { }; interface Hello { }; void say_hello (in string msg); Eine IDL-Datei wird, im Fall von Java, mit dem Tool idltojava von Sun in Javacode übersetzt. Ein IDL-Modul wird in ein Java-Package überfürt. 21.01.09 Roginer - Fontana - Heinisch 22
Beispiel: Client-Server Modell Beispiel: Servant(Diener)-Objekt-Implementierung (Java) // Datei: HelloImpl.java import H.*; import java.io.*; public class HelloImpl extends HelloPOA { }; public void say_hello (String msg) { } System.out.println (msg); Am Server werden das Servant-Objekt selbst, sowie eine Serverimplementierung benötigt. HelloImpl ist das Serviceobjekt, auf das Clients zugreifen um den say_hello Service zu nutzen. Die Einbettung des Serviceobjekts in das CORBA System erfolgt über die Superklasse HelloPOA. HelloPOA: abstrakte Klasse. Erzwingt, dass der Servant die IDL Schnittstelle implementiert. 21.01.09 Roginer - Fontana - Heinisch 23
Beispiel: Client-Server Modell Beispiel: Server (Java) - TEIL 1 // Datei: Server.java import H.*; import java.io.*; import java.util.*; import org.omg.corba.*; import org.omg.portableserver.servant; public class Server{ public static void main (String args[]) throws Exception{ // ORB Initialisierung ORB orb = ORB.init (args, null); org.omg.portableserver.servant: Basisklasse für alle Serviceobjekte. Der ORB wird mit der Methode init() initialisiert. 21.01.09 Roginer - Fontana - Heinisch 24
Beispiel: Client-Server Modell Beispiel: Server (Java) - TEIL 2 //POA(Portable Object Adapter) //verbindet die Klasse (Servant) und den ORB // POA Initialisierung und Aktivierung POA poa = POAHelper.narrow( orb.resolve_initial_references resolve_initial_references("rootpoa")); poa.the_poamanager().activate activate(); // Objekt erzeugen, beim POA anmelden // und Objektreferenz erzeugen HelloImpl h = new HelloImpl(); Hello ref = HelloHelper.narrow ( poa.servant_to_reference (h)); Mit Hilfe der POA Stubklasse POAHelper wird das allgemeine CORBA- Objekt auf ein konkretes Objekt vom Typ POA gecastet. Narrow prüft gleichzeitig die Korrektheit des Castings. Die Methode resolve_initial_reference() bietet einen Mechanismus um Zugriff auf wichtige Dienste zu erhalten Der Manager verwaltet den POA, insbesondere den Fluss an Aufrufen. Nur wenn der Manager im Zustand aktiv ist, kann der POA Requests empfangen. Erzeugen und Aktivieren des Serviceobjekts: 21.01.09 Roginer - Fontana - Heinisch 25
Beispiel: Client-Server Modell Beispiel: Server (Java) - TEIL 3 // Objektreferenz in Datei schreiben BufferedWriter out = new BufferedWriter (new FileWriter ("hello.ref")); out.write (orb.object_to_string object_to_string (ref)); out.newline(); out.close(); // Event-loop des ORB orb.run run(); Generieren und Veröffentlichen der Objektreferenz: Die Veröffentlichung erfolgt hier in einem File mit Namen hello.ref Aktivieren des ORBs: Der ORB beginnt an seinem IP Port auf Requests zu horchen. // Objekt wieder abmelden poa.deactivate_object (poa.reference_to_id (ref)); } } 21.01.09 Roginer - Fontana - Heinisch 26
Beispiel: Client-Server Modell Beispiel: Client (C++) // Datei: Client.cc #include "hello.h" #include <iostream> #include <fstream> using namespace std; int main (int argc, char *argv[]) { } CORBA::ORB_var orb = CORBA::ORB_init ORB_init (argc, argv); ifstream istr ("hello.ref"); char ref[1000]; istr >> ref; CORBA::Object_var o = orb->string_to_object (ref); H::Hello_var h = H::Hello::_narrow (o); h->say_hello ("hello world!"); return 0; Initialisiere den ORB. Hole Objektreferenz Aus der stringifizierten Objektreferenz wird ein allgemeines CORBA- Objekt erstellt. narrow prüft ob die IDL Hierarchie korrekt ist. Zugriff auf die Service Methode say_hello() über die Objektreferenz. 21.01.09 Roginer - Fontana - Heinisch 27
Beispiel: Client-Server Modell Beispiel: Übersetzen Java-Code übersetzen: idlj -fall hello.idl javac Server.java C++-Code übersetzen: source /usr/pack/mico-2.3.12-mb/ix86-rhel4/lib/mico-setup.csh idl hello.idl mico-c++ -c hello.cc mico-c++ -c Client.cc mico-ld -o Client hello.o Client.o -lmico2.3.12 Ausführen: java Server./Client 21.01.09 Roginer - Fontana - Heinisch 28
CORBA: Vor- und Nachteile Vorteile: Sprach- und Plattformunabhängig Ortstransparenz Bietet viele Standardfunktionen zur Kommunikation an, dank CORBA-Services Flexibel und Erweiterbar 21.01.09 Roginer - Fontana - Heinisch 29
CORBA: Vor- und Nachteile Nachteile: Schwierig zu erlernen und einzusetzen Zusatzaufwand IDL Keine verteilte Garbage Collection Selbst einfache CORBA-Anwendungen sind relativ aufwändig in der Umsetzung 21.01.09 Roginer - Fontana - Heinisch 30
CORBA vs. RMI RMI Portabel dank Java Sprachspezifisch Distributed Garbage Collection leichte Implementierbarkeit keine zusätzliche Beschreibungssprache dynamisches Laden der Klassen CORBA /OMA Plattformunabhängigkeit Sprachunabhängigkeit dank IDL keine Garbage Collection Großer Serviceumfang decken großen Teil der Bedürfnisse kommerzieller Anwendungen ab Client benötigt ORB 21.01.09 Roginer - Fontana - Heinisch 31
Fazit CORBA bietet sich für den Einsatz in jedem Projekt an, indem ein verteiltes System realisiert wird. Ortstransparenz, Sprach- und Plattformunabhägigkeit sind große Vorteile von CORBA. Bei kleineren Anwendungen ist CORBA nachteilig, da es sehr aufwendig in der Umsetzung ist. 21.01.09 Roginer - Fontana - Heinisch 32
Quellen IDL Beispiel: http://www.iona.com/support/docs/orbix/gen3/33/html/orbix33cxx_pguide/ http://www.vs.inf.ethz.ch/edu/ws0607/vs/u2/corba.pdf http://de.wikipedia.org/wiki/common_object_request_broker_architectur http://www.omg.org/ 21.01.09 Roginer - Fontana - Heinisch 33