corba

Werbung
Common Object Request Broker
Architecture (CORBA)
Evgueni Kouris
WS 03/04
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
1
Evolution der SoftwareAnwendungssysteme (1)
 Von der Monolith-Architektur zur 2-Tier-Architektur...
SQL
Monolith
Fat-Clients
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
Datenbank-Server
2
Evolution der SoftwareAnwendungssysteme (2)
 ... zur 3- oder n-Tier-Architektur ...
SQL
SQL
Thin-Clients
Server-Logik
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
Datenbank-Server
3
Evolution der SoftwareAnwendungssysteme (3)
 ... zur heterogenen n-Tier-Architektur auf Middleware-Basis.
Middleware
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
4
Gliederung:
 Basics von CORBA
OMA, ORB, IDL, Stubs, Skeletons, etc.
 Entwicklung einer CORBA-Applikation in Java/C++
CORBA Services
 Einige nützliche Features von CORBA
DII, IIOP, IOR, etc.
Neurungen in CORBA 3.0
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
5
Object Management Architecture (1)
Application
Objects
Vertical
CORBA
Facilities
Horizontal
CORBA
Facilities
Object Request Broker (ORB)
CORBA Services
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
6
Object Management Architecture (2)
 CORBA – genauere Spezifikation von ORB
 Weitere vier Anwendungs-Komponenten:
 CORBA Services – generelle, systemnahe Erweiterung von
Grundfunktionalität eines ORBs (z.B. Transactions, Security)
 Horizontal CORBA Facilities – komplette höhere DomainUnabhängige Funktionen (z.B. Printing, Internalization)
 Vertical CORBA Facilities – Teillösungen für bestimmte
Anwendungsgebiete (z.B. Finanzen oder Medizin)
 Application Objects – angepasste,
konkrete Lösungen
Vertical
 enstprechen den Einzelprogrammen
 werden nicht standardisiert
Application
Objects
CORBA
Facilities
Horizontal
CORBA
Facilities
Object Request Broker (ORB)
CORBA Services
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
7
Applikationen in CORBA
 Applikationen als „Objekte“
 Diskrete Softwarebausteine oder Module
 Zustand + Methoden
 OO Abstraktion der einzelnen Anwendungen
 Instantiierung
 Overloading, Subtyping (auch mehrfach)
 Kapselung (Trennung der Implementierung und der Schnittstelle)
 Sprachen der Applikationen in CORBA
 Java, C, C++, Cobol, Ada, Smalltalk, List, Python
 Ist eine Schnittstellensprache erforderlich?
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
8
Interface Definition Language (IDL)
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
9
Interface Definition Language (IDL)
 Stellt eine Obermenge der Sprachkonzepte dar
 Unterstützte Sprachen:
Java, C, C++, Cobol, Ada, Smalltalk, List, Python
Objekt
 Verwendet C++/Java-ähnliche Syntax
 Vorteile einer selbständigen Schnittstellen-Sprache
 rein deskriptiv
 vollkommene Trennung von der Implementierung
 mehrere Implementierung pro IDL-Interfaces und umgekehrt möglich
 automatische Generierung der Interfaces für alle Sprachen
 Sicherstellung der Interface-Gleichheit bei allen Clients/Objekten
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
10
Beispiel für eine IDL-Schnittstelle
module MeineBank {
exception BankFehler {
string info;
};
interface BasisKonto {
readonly attribute long nummer;
double einzahlen ( in double betrag ) raises ( BankFehler );
};
// GiroKonto wird von BasisKonto abgeleitet
interface GiroKonto : BasisKonto {
double attribute dispoKredit;
};
interface SparKonto : BasisKonto {
double attribute zinssatz;
};
// GiroSparKonto wird von SparKonto und GiroKonto abgeleitet
interface GiroSparKonto : SparKonto, GiroKonto {};
};
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
11
IDL-Datentypen
Basis Datentyp
Beschreibung
Java-Mapping
C++-Mapping
short
16 bit Integer
short
CORBA::Short
long
32 bit Integer
int
CORBA::Long
long long
64 bit Integer
long
CORBA::LongLong
unsigned short
16 bit vorzeichenlos
short
CORBA::UShort
unsigned long
32 bit vorzeichenlos
int
CORBA::ULong
unsigned long long
64 bit vorzeichenlos
long
CORBA::ULongLong
float
16 bit IEEE Gleitkomma
float
CORBA::Float
double
32 bit IEEE Gleitkomma
double
CORBA::Double
long double
64 bit IEEE Gleitkomma
double
CORBA::LongDouble
char
8 bit Zeichen
char
CORBA::Char
wchar
16 bit Zeichen (Unicode)
char
CORBA::WChar
boolean
TRUE oder FALSE
boolean
CORBA::Boolean
octet
einzelnes Byte
byte
CORBA::Octet
string
Zeichenkette
java.lang.String
CORBA::String
wstring
Zeichenkette (Unicode)
java.lang.String
CORBA::WString
any
Container für einen
beliebigen Datentyp
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
?
CORBA::Any
12
Selbst-definierte IDL-Datentypen
 Unterstützung für
 typedef
 enum
 const
 struct
 union
 arrays
 exception
 Auch für Precompiler-Anweisungen
 #include
 #define
Quelle:
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
„An intoducation to CORBA“ von Paul Jonusaitus
13
Client/Server Kommunikation
 CORBA - Clients
 kommunizieren über die IDL-Schnittstelle des Objekts
 senden „Requests“ oder „Invocations“
 ORB - Kommunikationsbus
 vollkommen Transparent, d.h.
 unabhängig von der Residenz des Objektes
 unabhängig von der Programmiersprache des Objektes
 Idealfall: Clients wissen gar nicht, dass CORBA verwendet wird!
 CORBA - Server
 stellen Applikation- bzw Objekt-Implementierungen dar
 müssen nicht „heavyweight“ sein (z.B. Java-Applet)
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
14
Was steckt hinter einem
Methodenaufruf?
 Proxy-Patterns: werden aus IDL-Schnittstelle automatisch generiert
 Stub: Server-Proxy
 Skeleton: Client-Proxy
Client
return value
operation() + args
Objekt
Language mapping
operations signature
Language mapping
entry points
Stub
Skeleton
ORB Operations
Laufzeitumgebung,
(re)aktiviert Objekte
Portable Object Adapter
Object Request Broker
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
Quelle:
„An intoducation to CORBA“ von Paul Jonusaitus
15
Entwicklung einer Client/Server
Anwendung mit CORBA
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
16
Entwicklungs-Schema
IDL-Definition
IDL-Compiler
Client
Programm
Source
Stub
Source
Skeleton
Source
Objekt
Implementierung
Source
Java/C++ Compiler
Java/C++ Compiler
Client-Programm
Objekt-Implementierung
Quelle:
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
„An intoducation to CORBA“ von Paul Jonusaitus
17
IDL-Schnittstelle
 Zuerst wird die Schnittstelle in OMG-IDL definiert:
//Hello.idl
interface Hello{
void say_hello();
};
l
Man bekommt die Übersetzung der Schnittstelle in C++ und
Java durch die Aufrufe von:
u IDL-to-C++ translator
· Hello.h, Hello.cpp, Hello_skel.h, Hello_skel.cpp
u IDL-to-Java translator
· Hello.java, HelloHelper.java, HelloHolder.java,
HelloOperations.java, HelloPOA.java, _HelloStub.java
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
18
Hello-Objekt in C++
 Die Header-Datei des Objektes in C++: (Hello_impl.h)
#include “Hello_skel.h”
class Hello_impl : public POA_Hello {
public: virtual void say_hello() throw(CORBA::SystemException);
};
 Die Implementierung der Header-Datei: (Hello_impl.cpp)
#include <iostream.h>
#include <OB/CORBA.h>
#include “Hello_impl.h”
void Hello_impl::say_hello() throw(CORBA::SystemException){
cout << "Hello World!" << endl;
}
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
19
Server-Programm in C++
#include <OB/CORBA.h>
#include <Hello_impl.h>
#include <fstream.h>
POA öffnen
int main ( int argc, char* argv[] ){
try {
CORBA::ORB_var orb = CORBA::ORB_init ( argc, argv );
CORBA::Object_var poaObj = orb -> resolve_initial_references("RootPOA");
PortableServer::POA_var rootPoa = PortableServer::POA::_narrow(poaObj);
PortableServer::POAManager_var manager = rootPoa -> the_POAManager();
Hello_impl* helloImpl = new Hello_impl();
Hello_var hello = helloImpl -> _this();
CORBA::String_var s = orb -> object_to_string(hello);
const char* refFile = "Hello.ref";
ofstream out(refFile);
out << s << endl;
out.close();
POA aktivieren,
ORBReferenz
starten einer
(warten
auf Clients)
Instanz
erzeugen
manager -> activate();
orb -> run();
orb -> destroy();
} catch ( const CORBA::Exception& e ) { cerr << e << endl; }
IOR des Objektes
speichern
}
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
20
Client-Programm in Java
public class Client{
public static void main ( String args[] ) {
java.util.Properties props = System.getProperties();
try {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, props);
org.omg.CORBA.Object obj = null;
String refFile = "Hello.ref";
java.io.BufferedReader in = new java.io.BufferedReader(
new java.io.FileReader(refFile));
String ref = in.readLine();
obj = orb.string_to_object(ref);
Hello hello = HelloHelper.narrow(obj);
IOR der Instanz
auslesen
hello.say_hello();
orb.destroy();
} catch ( Exception e ) { e.printStackTrace(); }
Den Proxy anhand
der IOR ermitteln
}
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
21
Hello-Objekt in Java
 Man kann natürlich den Client auch in C++ und den Server auch
in Java implementieren
 Hier z.B. die Implementierung des Hello-Objektes in Java:
//Hello_impl.java
public class Hello_impl extends HelloPOA
{
public void say_hello() {
System.out.println("Hello World!");
}
}
 Nachteil dieser Implementierungen:
 Referenz des Objektes erforderlich
 Übergabe in der Datei sehr “unschön”
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
22
CORBA Services
 Verteilung von Objektreferenzen
 Name Service – Auffinden von Objekten anhand deren Namen
 Trader Service – Objekte registrieren sich als Dienste
 Benachrichtigung über Ereignisse
 Event Service – übernimmt Übermittlung von Ereignissen
 Notification Service – Filtern von E. nach Inhalt oder Priorität
 Transaktionen
 Object Transation Service – Zuverlässigkeit bei Fehlern, sicheres
Beenden von Prozessen, Wiederherstellung des Zustands
 Kontrolle/Sicherheit
 Security Service – Identität, Privilegien, Rechte, Verschlüsselung
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
23
Server in C++ mit „Name Service“
#include <OB/CORBA.h>
#include <Hello_impl.h>
#include <fstream.h>
int main ( int argc, char* argv[] ){
try {
CORBA::ORB_var orb = CORBA::ORB_init ( argc, argv );
CORBA::Object_var poaObj = orb -> resolve_initial_references("RootPOA");
PortableServer::POA_var rootPoa = PortableServer::POA::_narrow(poaObj);
PortableServer::POAManager_var manager = rootPoa -> the_POAManager();
Hello_impl* helloImpl = new Hello_impl();
Hello_var hello = helloImpl -> _this();
CORBA::Object_var ns = orb -> resolve_initial_references( "NameService“ );
CosNaming::NamingContext_var nc = CosNaming::NamingContext::_narrow ( ns.in() );
CORBA::String_var s = orb -> object_to_string(hello);
const
char* refFile
= "Hello.ref";
CosNaming::Name
aName;
ofstream
out(refFile);
aName.length(1);
out
<< s << endl;
aName[0].id
= CORBA::string_dup("hello");
out.close();
aName[0].kind = CORBA::string_dup("");
nc -> bind( aName, hello.in() );
manager -> activate();
orb -> run();
orb -> destroy();
} catch ( const CORBA::Exception& e ) { cerr << e << endl; }
}
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
24
Client in Java mit Name Service
public class Client{
public static void main ( String args[] ) {
java.util.Properties props = System.getProperties();
try {
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, props);
org.omg.CORBA.Object ns = orb.resolve_initial_references ( "NameService" );
NamingContext nc = NamingContextHelper.narrow
( ns );
org.omg.CORBA.Object
obj = null;
String refFile = "Hello.ref";
NameComponent[] aName =innew
NameComponent[1];
java.io.BufferedReader
= new
java.io.BufferedReader(
aName[0] = new NameComponent();
new java.io.FileReader(refFile));
aName[0].id
"hello";
String
ref = =in.readLine();
aName[0].kind = "";
org.omg.CORBA.Object
obj = nc.resolve ( aName );
obj
= orb.string_to_object(ref);
Hello hello
hello == HelloHelper.narrow(obj);
HelloHelper.narrow ( obj );
Hello
hello.say_hello();
orb.destroy();
} catch ( Exception e ) { e.printStackTrace(); }
}
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
25
CORBA „Schnick-Schnack“
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
26
Ein „Dynamischer Methodenaufruf“
 DII – Dynamic Invocation Interface
 Interface Repository: Laufzeit-Datenbank
 beinhaltet maschinenlesbare IDL-Interfaces
Dynamic Interface
Query
Client
Objekt
Interface
Repository
Skeleton
DII
ORB Operations
Portable Object Adapter
Object Request Broker
Quelle:
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
„An intoducation to CORBA“ von Paul Jonusaitus
27
Inter-ORB Kommunikation
 Erst mit CORBA 2.0 standardisiert
 „General Inter-ORB Protocol” (GIOP) spezifiziert
 ein einheitliches Kommunikationsprotokoll
 eine Transfersyntax (Common Data Representation, CDR)
 für die Übertragung von Daten über das Netz
 Objektreferenzenformat (Interoperable Object Reference, IOR)
 „Internet Inter-ORB Protocol” (IIOP)
 Spezifikation von GIOP für die TCP/IP-Protokoll-Familie
O1
C1
ORB 1
O2
C2
GIOP
Protocol
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
ORB 2
28
Interoperable Object Reference (IOR)
 Jedes Objekt besitzt eine weltweit eindeutige Referenz
 Eine IOR besteht aus:
 einem Objekt-Schlüssel (fixed object key)
 Typidentifizierung
 Referenz der Schnittstelle (Repository ID)
 einigen Profilen ( Interoperability Profiles, IOPs )
 Name des Hosts
 TCP/IP-Port-Nummer
 Eine IOR kann
 in einen String (und zurück) umgewandelt werden
 persistent gemacht werden (sogar für mehrer Instanzen eines O.)
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
29
Und zuletzt die Vorgeschichte...
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
30
Object Management Group(OMG)
 OMG – ein internationales Konsortium
 1989 gegründet von acht Firmen (mittlerweile mehr als 800)
 3COM, American Airlines, Canon, Data General, Hewlett Packard, Philips
Telecommunications, Sun Microsystems und Unisys
 Ziel: Verbreitung von verteilten, modularen OO-Software
 Weg: Erarbeitung von offenen Standards
 die Realisierung und Umsetzung übernehmen die Mitglieder
 Entwickelte Spezifikationen
 „Unified Model Language“ (UML)
 „Model Driven Architecture“ (MDA)
 „Object Management Architecture“ (OMA)
 „Common Object Request Brocker Architecture“ (CORBA)
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
31
Geschichte von CORBA





1989 – Gründung der OMG
1990 – Die Vorstellung des OMA-Referenzmodells
1991 – CORBA 1.0 (nur für C),
1992 – OMA 2.0 (und weitere Releases von CORBA)
1996 – CORBA 2.0
 Erweiterungen für C++, Smalltalk
 Interoperabilität zwischen ORBs verschiedener Hersteller
 Es folgen in CORBA 2.1/2.2 Erweiterungen für Java/Cobol/Ada
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
32
CORBA 3.0
 Interoperabilität mit Enterprise JavaBeans, RMI-Objekten
 „call by value“ möglich
 Spezifikationen der Anforderungen für
 minimumCORBA: z.B Verzicht auf„Dynamic Invocation“ etc.
 realtimeCORBA: Erweiterung mit Threads, Verbindungsmanagment
 fault-tolerant-CORBA: kontrolliertes Verhalten im Fehlerfall
 „Asynchronous Messaging“ und „Quality of Service Control“
 Ausführung nach Priorität, Lebensdauer
 Festlegung von Start- und End-Zeitpunkten der Ausführung
 Polling- bzw. Callback-Funktionen
 Firewall-Spezifikation, Kommunikation über Firewall-Systeme
 Interoperable Name Service im URL-Format
 z.B: iioploc://www.myserver.de/nameService
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
33
¿Fragen?
Universität Bonn, Seminar „Component and Aspect Engineering“ im WS 2003, Evgueni Kouris
34
Herunterladen