26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
1
Architektur Moderner
Internet Applikationen
22.-24.4.2004 TU Wien/Ausseninstitut
CORBA als Bindeglied zweier WeltenJAVA und .NET
DI Christian Donnercd (at) donners.com
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
2
CORBA AgendaCORBA Agenda
Einordnung und Bedeutung von CORBA
IDL – Interface Definition Language
Funktionsweise
ORB – Object Request Broker
Ein praktisches Beispiel
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
3
Einordnung von CORBAEinordnung von CORBA
Der CORBA Standard ist unabhängig von Java und .NET und stammt aus der Mitte der 90er Jahre
Trotzdem hat es heute noch Bedeutung als Mechanismus zur Objektkommunikation zwischen verschiedenen Plattformen mit breiter Unterstützung der Hersteller (vgl. IIOP/RMI)
Im Prinzip handelt es sich bei CORBA um eine Weiterentwicklung des Remote Procedure Calls (RPC) für OO Sprachen
OMG – Object Management Group - ist ein Industriekonsortium, das die Standardisierung betreibt. Siehe www.omg.org.
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
4
IDLIDL
Wie kann man sicherstellen, daß ein Methodenaufruf über Sprach- und Maschinengrenzen hinweg verstanden wird?
Man definiert den kleinsten gemeinsamen Nenner und beginnt in der Mitte: IDL (Interface Definition Language)Legt die Methodennamen, Parameter und Typen festSprachunabhängig
Jede Plattform benötigt einen IDL Compiler, der aus der IDL Definition den Stub- und Skeleton Code generiert und die Datentypen konvertiert.
Ein ORB (Object Request Broker) kümmert sich transparent um die Lokalisierung von Objekten und den Transport der Daten.
Stub und Skeleton Code sind mit dem ORB verdrahtet, ohne daß der Programmierer sich um die Implementierung kümmern muß.
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
5
FunktionsweiseFunktionsweise
Der Client erhält letzlich vom ORB einen Objektzeiger, der wie ein lokaler Zeiger behandelt werden kann. CORBA stellt im Hintergrund sicher, daß ein Methodenaufruf an die tatsächliche Instanz weitergeleitet wird.
Wie findet der Client ORB ein angefordertes Objekt?IOR Datei (“stringisierte” Objektreferenz enthält Namen und Aufenthaltsort)JNS Directory
Java 1.4 brachte POA – Portable Object Adapter aus CORBA 2.2 Spezifikation
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
6
ORB FunktionsweiseORB Funktionsweise
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
7
Ein Verteiltes SystemEin Verteiltes System
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
8
BeispielBeispiel:: Hello Vienna Hello Vienna
Ein Java Programm ruft ein C# Objekt und übergibt einen String
Das C# Objekt gibt den String auf der Konsole aus
Verwendete SoftwareMiddTec’s MiddCor C# ORB ImplementierungSun Java 2 SDK 1.4 (enthält einen ORB)Visual Studio .Net
Hello.idl:module MiddCorSample{
interface Greetings{
string hello( in string a_strName);
};};
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
9
ServerServer
IdlToCSharp.cmd ruft MiddCorIdl –> hello.cs
HelloSrv.cs:
public class GreetingsImpl: GreetingsPOA {
public override string hello( string a_strName ) {
System.Console.WriteLine("\nFunction 'Hello', Parameter '{0}'\n", a_strName);}
}
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
10
ClientClient
idlj compiler erzeugt Stub code
GreetingsClient.java
public class GreetingsClient{ public static void main(String args[]) throws IOException {
//initialize ORBORB orb = ORB.init(args, null);
// helper method reads IOR String from a fileString ior = ReadIORFile("c:\\hello.ior");
// resolve string object referenceorg.omg.CORBA.Object obj = orb.string_to_object(ior);
// narrow down object typeGreetings proxy = GreetingsHelper.narrow(obj);
//invoke methodsproxy.hello("Vienna");
}}
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
11
AusführenAusführen
start orbd -ORBInitialPort 1050 -ORBInitialHost localhost
HelloSrv.exeDer Server erzeugt die Datei c:\hello.ior und wartet auf Anfragen
java GreetingsClient -ORBInitialPort 1050 -ORBInitialHost localhostDer Client liest die Datei c:\hello.ior Die Objektreferenz wird korrekt aufgelöst, der Sun ORB findet den MiddTec ORB und der Server gibt den String aus
26.03.2004 Internet Applikationen – CORBACopyright ©2003, 2004 Christian Donner. Alle Rechte vorbehalten.
12
Vielen Dank für Ihre Aufmerksamkeit!