Einführung in CORBA. Kay Römer Institut für Pervasive Computing ETH Zürich. ETH Zürich 1

Ähnliche Dokumente
Middleware. Einführung in CORBA. Middlewareplattform CORBA. CORBA: Eigenschaften

Corba. Systemprogrammierung WS 08 / Roginer - Fontana - Heinisch 1

Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

CORBA = Common Object Request Broker Architecture. plattformunabhängige Middleware-Architektur für verteilte Objekte

Kommunikation. Björn und Georg

Projektgruppe 453: Entwurf eines Managementwerkzeugs zur Verwaltung von Sicherheitsdiensten für komplexe eingebettete Dienstesysteme

Internetanwendungstechnik (Übung)

CORBA. Systemprogrammierung WS

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

Client/Server-Programmierung

Client/Server-Programmierung

7 Praktische Aspekte (Wie mache ich...)

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

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

Parallele und Verteilte Systeme

Hello World from CORBA

1. Sie können die zentrale Idee und Bedeutung einer Schnittstelle, wie sie schon im RPC verwendet wird, erklären.

Remote Method Invocation

Klassenhierarchie der Skeletons für eine Schnittstelle Foo. IDL und Java. Separierung von Klientenseite und Serverseite

CORBA Implementierung von Client und Server

Vorlesungsprüfung Programmiersprache 1

Modul Software Komponenten 10 Komponentenarchitektur

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

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

CORBA = Common Object Request Broker Architecture. plattformunabhängige Middleware-Architektur für verteilte Objekte

ADDISON-WESLEY PUBLISHING COMPANY

Verteilte objektorientierte Programmierung am Beispiel CORBA

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

Einstieg in die Informatik mit Java

Remote Method Invocation

CORBA (Überblick, IDL)

Einführung in C. EDV1-04C-Einführung 1

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

AVO Übung 4. AspectIX. 18. Januar 2005 (WS 2004) Andreas I. Schmied Universität Ulm Fakultät für Informatik

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Einstieg in die Informatik mit Java

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Überblick. Middleware - Übung. ORB-Core. Client-Seite. CORBA CORBA-Überblick Interface Definition Language (IDL)

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation Teil 3 RMI over IIOP

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

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

3.3 Das Orbix CORBA-System

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

E.6 The Naming Service

Programmieren 2 Java Überblick

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Themen. Web Service - Clients. Kommunikation zw. Web Services

Client/Server-Programmierung. CORBA: Schritt-für-Schritt Anleitung (Mini HOWTO)

Grundelemente objektorientierter Sprachen (1)

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Grundelemente objektorientierter Sprachen (1)

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

E.6 The Naming Service

Überblick. Verteilte Anwendungen, Interaktionsformen. implizite, nicht-orthogonale Interaktion. explizite, orthogonale Interaktion

Grundlagen der Objektorientierten Programmierung - Statische Arrays

Einführung: Verteilte Systeme - Remote Method Invocation -

Weitere aus Schnittstelle generierte Dateien (Java-Mapping)

Programmieren in Java

3.2 Der CORBA-Standard Common Object Request Broker Architecture

Grundlagen der Programmierung in C Klassen

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Grundelemente objektorientierter Sprachen (1)

Mobile und Verteilte Datenbanken

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Grundlagen und Implementation. Jan Kraft

CORBA Lebensdauer von Objekten, Transaktionen MD 5/02

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Methoden und Wrapperklassen

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Inhaltsverzeichnis. Zusammenfassung CORBA

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method

Datenbankanwendungsprogrammierung Crashkurs Java

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Abend 4 Übung : Erweitern von Klassen durch Vererbung

Einstieg in die Informatik mit Java

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

Verteilte Systeme Übung

Programmierung mit Komponenten

Praktische Informatik 1

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Wiederholung JAVA. 1. (Vorbereitung)

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Konzepte der Programmiersprachen

Transkript:

Einführung in CORBA Kay Römer Institut für Pervasive Computing ETH Zürich ETH Zürich 1 roemer@inf.ethz.ch

Middleware Infrastruktur für verteilte Systeme Unterstützt Enwickler bei Behandlung der Probleme verteilter Systeme Erleichtert damit Entwicklung verteilter Anwendungen Logisch zwischen Betriebssystem und Anwendung Komponente A Komponente B Middleware BS 1 BS 2 BS 3 Allgemeine Infrastrukturdienste (zb. Namensdienst) HW 1 HW 2 HW 3 Netz ETH Zürich 2 roemer@inf.ethz.ch

Middlewareplattform CORBA Common Object Request Broker Architecture Offene, frei verfügbare Spezifikation einer objektorientierten Middleware-Plattform Zentrale Komponente: Object Request Broker (ORB) Verteilte Objekte als Berechnungseinheiten Vermittlung von Methodenaufrufen auf Objekten Weitere Bestandteile: System-Dienste Horizontale und vertikale Anwender-Dienste ETH Zürich 3 roemer@inf.ethz.ch

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 Hardware-, Betriebssystemunabhängigkeit: CORBA kann prinzipiell auf jeder Hardware und unter jedem Betriebssystem verwendet werden Herstellerunabhängigkeit: Verschiedene CORBA-Implementationen sind interoperabel, wenn sie sich an die Spezifikation halten ETH Zürich 4 roemer@inf.ethz.ch

CORBA: Architektur 1 Object Request Broker (ORB): Weiterleitung von Methodenaufrufen zwischen Client und Server Object Adapter (OA): Anbindung von Objekt-Implementationen an den ORB (wir verwenden POA) ETH Zürich 5 roemer@inf.ethz.ch

CORBA: Architektur 2 Internet Inter ORB Protocol (IIOP) Kommunikationsprotokoll zwischen ORBs IDL-Compiler: Erzeugt Stubs aus einer IDL-Spezifikation Invocation Interface (II): Schnittstelle des ORB zum Absetzen von Methodenaufrufen Skeleton Interface (SI): Schnittstelle der Object Adapter zu den Server-Stubs Interface Repository (IR): Datenbank mit Typinformationen (für Typüberprüfung und Reflection) Implementation Repository (IMR): Datenbank mit Serverinformationen (für automatische Server-Aktivierung) ETH Zürich 6 roemer@inf.ethz.ch

Interface Definition Language (IDL) Programmiersprachenunabhängigkeit erfodert Spezifikation der Schnittstellen der CORBA-Objekte in einer speziellen Sprache (IDL) Ähnlich C++, jedoch nur Typedeklarationen, keine Programmkonstrukte IDL-Konstrukte: Basistypen (e.g., long), konstruierte Typen (e.g., struct), Template-Typen (e.g., sequence), Interfaces, Exceptions, Module Language-Mapping definiert Abbildung von IDL in eine bestimmte Programmiersprache IDL-Compiler übersetzt IDL-Spezifikation in Stubs in der gewünschten Programmiersprache ETH Zürich 7 roemer@inf.ethz.ch

IDL: Basistypen Ganzzahltypen: short, long, long long Vorzeichenlose Ganzzahltypen: unsigned short, unsigned long, unsigned long long Fliesskommatypen: float, double, long double Festkommatypen: fixed<digits, scale> Boolesche Variable: boolean Zeichen: char, wchar Byte: octet Werte beliebigen Typs: any ETH Zürich 8 roemer@inf.ethz.ch

IDL: Template-Typen String: string, wstring Bounded String: string<maxlen>, wstring<maxlen> Sequence: sequence<type> Bounded Sequence: sequence<type,maxlen> Array: type[size] ETH Zürich 9 roemer@inf.ethz.ch

IDL: Konstruierte Typen Exception: exception Error { short code; }; Aufzählungen: enum Color { Red, Blue }; Strukturen: struct Point { float X; float Y; }; Union: union PackedInt switch (short) { case 2: short int2; case 4: long int4; default: long long int8; }; ETH Zürich 10 roemer@inf.ethz.ch

IDL: Interfaces 1 Deklaration der Schnittstelle eines CORBA-Objektes: interface Konto { }; string konto_nummer(); void einzahlen(in unsigned long betrag); Parameter werden mit einer Richtung versehen (in, out oder inout) Methoden können Exceptions werfen: interface Konto { }; void abheben (in unsigned long betrag) raises (BankException); ETH Zürich 11 roemer@inf.ethz.ch

IDL: Interfaces 2 Vererbung (auch von mehreren Interfaces): interface GiroKonto : Konto { }; attribute unsigned long kredit_limit; Attribute können abgefragt und gesetzt werden Überladen von Methoden (gleicher Methodenname mit verschiedenen Parametern) ist nicht möglich ETH Zürich 12 roemer@inf.ethz.ch

IDL: Module Zusammengehörige Deklarationen können durch ein Modul zusammengefasst werden: module Banking { }; exception BankException {... }; interface Konto {... };... Auf Elemente eines Moduls kann mittels des Scope- Operators zugegriffen werden: Banking::Konto ETH Zürich 13 roemer@inf.ethz.ch

Abbildung von IDL nach Java/C++ Abbildung von IDL-Konstrukten auf Konstrukte in der entsprechenden Programmiersprache Teil der CORBA-Spezifikation (für C, C++, Java, Smalltalk, Ada,...) Wird vom IDL-Compiler implementiert ETH Zürich 14 roemer@inf.ethz.ch

Java/C++-Mapping: Basistypen IDL Java C++ short short CORBA::Short long int CORBA::Long long long long CORBA::LongLong unsigned short short CORBA::UShort unsigned long int CORBA::ULong unsigned long long long CORBA::ULongLong float float CORBA::Float double double CORBA::Double long double - CORBA::LongDouble char char CORBA::Char wchar char CORBA::WChar boolean boolean CORBA::Boolean octet byte CORBA::Octet any CORBA.any CORBA::Any fixed math.bigdecimal CORBA::Fixed ETH Zürich 15 roemer@inf.ethz.ch

Java/C++-Mapping: Template-Typen IDL Java C++ string, string<x> lang.string char* wstring, wstring<x> lang.string CORBA::WChar* Array Klasse mit Array Array In C++ werden Helferfunktionen für die Behandlung von Strings bereitgestellt: char *CORBA::string_dup (const char *s); char *CORBA::string_alloc (CORBA::Long len); void CORBA::string_free (char *s); Ausserdem Helferklassen CORBA::String_var und CORBA::WString_var zur "automatischen" Speicherverwaltung ETH Zürich 16 roemer@inf.ethz.ch

Java/C++-Mapping: Konstruierte Typen IDL Java C++ enum Klasse mit Konstanten enum struct Klasse mit Members struct exception Klasse mit Members von Exception abgeleitet Klasse von CORBA::UserException abgeleitet union Klasse mit Zugriffsmethoden Klasse mit Zugriffsmethoden ETH Zürich 17 roemer@inf.ethz.ch

Java-Mapping: Interfaces interface Hello { void hello(); }; // IDL Java-Interface mit gleichem Namen: public interface Hello { void hello(); }; Basisklasse für die Implementierung: public class HelloPOA {... }; Hilfsklasse mit einigen nützlichen Operationen: public class HelloHelper { public static Hello narrow (Object o);... }; Attribute werden auf zwei Methoden abgebildet, attribute short x in IDL wird zu: void x (short wert); short x (); ETH Zürich 18 roemer@inf.ethz.ch

C++-Mapping: Interfaces Klasse mit gleichem Namen: class Hello { void hello (); static Hello_ptr _narrow(corba::object_ptr o); static Hello_ptr _duplicate(hello_ptr o); }; Basisklasse für die Implementierung: class Hello_skel {... }; Klasse zur "automatischen" Speicherverwaltung: class Hello_var {... }; Attribute werden auf zwei Methoden abgebildet, attribute short x in IDL wird zu: void x (short wert); short x () const; ETH Zürich 19 roemer@inf.ethz.ch

Java/C++-Mapping: Module In Java: Abbildung auf package In C++: Abbildung auf namespace ETH Zürich 20 roemer@inf.ethz.ch

ORB-API (Java) Umwandlung von Objekt-Adressen in Strings: String ORB.object_to_string (CORBA.Object o); CORBA.Object ORB.string_to_object (String s); Initialisierung: CORBA.ORB ORB.init (String args[], Properties props); Event-Loop (nur im Server): ORB.run (); ORB.shutdown (boolean wait); ETH Zürich 21 roemer@inf.ethz.ch

Initialisierung: POA-API (Java) CORBA.Object obj = orb.resolve_initial_references("root- POA"); POA poa = POAHelper.narrow (obj); Aktivierung: poa.the_poamanager().activate(); Anmelden eines Objektes (vom Typ X): CORBA.Object obj = poa.servant_to_reference (x_impl); X x = XHelper.narrow (obj); Abmelden eines Objektes (vom Typ X): poa.deactivate_object (poa.reference_to_id (x)); ETH Zürich 22 roemer@inf.ethz.ch

ORB-API (C++) Umwandlung von Objekt-Adressen in Strings: char *ORB::object_to_string (CORBA::Object_ptr o); CORBA::Object_ptr CORBA::string_to_object (char *s); Initialisierung: CORBA::ORB_ptr CORBA::ORB_init (int &argc, char *argv[]); ETH Zürich 23 roemer@inf.ethz.ch

// Datei: hello.idl Beispiel: IDL module H { interface Hello { void say_hello (in string msg); }; }; ETH Zürich 24 roemer@inf.ethz.ch

Beispiel: 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); } }; ETH Zürich 25 roemer@inf.ethz.ch

// Datei: Server.java import H.*; import java.io.*; import java.util.*; Beispiel: Server (Java) import org.omg.corba.*; import org.omg.portableserver.*; public class Server { public static void main (String args[]) throws Exception { // ORB Initialisierung ORB orb = ORB.init (args, null); // POA Initialisierung und Aktivierung POA poa = POAHelper.narrow( orb.resolve_initial_references("rootpoa")); poa.the_poamanager().activate(); ETH Zürich 26 roemer@inf.ethz.ch

// Objekt erzeugen, beim POA anmelden // und Objektreferenz erzeugen HelloImpl h = new HelloImpl(); Hello ref = HelloHelper.narrow ( poa.servant_to_reference (h)); // Objektreferenz in Datei schreiben BufferedWriter out = new BufferedWriter (new FileWriter ("hello.ref")); out.write (orb.object_to_string (ref)); out.newline(); out.close(); // Event-loop des ORB orb.run(); } } // Objekt wieder abmelden poa.deactivate_object (poa.reference_to_id (ref)); ETH Zürich 27 roemer@inf.ethz.ch

// Datei: Client.cc #include "hello.h" #include <iostream> #include <fstream> using namespace std; Beispiel: Client (C++) int main (int argc, char *argv[]) { CORBA::ORB_var orb = CORBA::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; ETH Zürich 28 roemer@inf.ethz.ch

Beispiel: Übersetzen Java-Code übersetzen: idlj -fall hello.idl javac Server.java C++-Code übersetzen: Entfällt im IFW 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 ETH Zürich 29 roemer@inf.ethz.ch