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

Ähnliche Dokumente
Seminar Ausgewählte Komponenten von Betriebssystemen. IDL4 Compiler

Tag 8 Repetitorium Informatik (Java)

Internetanwendungstechnik (Übung)

Parallele und Verteilte Systeme

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

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

E.6 The Naming Service

E.6 The Naming Service

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

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

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

7 Praktische Aspekte (Wie mache ich...)

Einstieg in die Informatik mit Java

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

E Überblick über die 3. Übung. Organisation 1 CORBA. Inhalt: Programmierung von CORBA-Anwendungen. Einführung in CORBA

Ü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

I Überblick über die 8. Übung. Organisation 1 CORBA. I.1 Einführung in CORBA. 2 CORBA-Versionen

Einstieg in die Informatik mit Java

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

Client/Server-Programmierung

Client/Server-Programmierung

Kommunikation. Björn und Georg

AVO Übung 3. Lösung 2, CORBA. 30. November 2004 (WS 2004) Andreas I. Schmied Universität Ulm Fakultät für Informatik

42 Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

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

Algorithmen und Datenstrukturen

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

Hello World from CORBA

Middleware. Einführung in CORBA. Middlewareplattform CORBA. CORBA: Eigenschaften

Verteilte Systeme Übung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Tag 4 Repetitorium Informatik (Java)

Überblick. Verteilte Systeme Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

Repetitorium Informatik (Java)

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

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

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

Provide information on how to write CORBA applications. C++ as an additional language after all CORBA is cross-language

2 CORBA Versions. E.1 Introduction 1 CORBA. 2 CORBA Versions (2) CORBA 1.x. Provide information on how to write CORBA applications

Einführung in die Programmierung


Grundelemente objektorientierter Sprachen (1)

Grundelemente objektorientierter Sprachen (1)

Methoden und Wrapperklassen

Programmiervorkurs Einführung in Java Tag 1

Weitere aus Schnittstelle generierte Dateien (Java-Mapping)

Grundelemente objektorientierter Sprachen (1)

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

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 3. Markus Reschke

Vorkurs Informatik WiSe 15/16

CORBA. Systemprogrammierung WS

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS12) Java RMI 1 1

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

Remote Method Invocation

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Modellierung CORBA-basierter Anwendungssysteme mit der UML

G Übersicht G Übersicht. Übungen zu Middleware Universität Erlangen-Nürnberg Informatik 4, 2008 G-Mobile Objekte.fm

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

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Tag 7 Repetitorium Informatik (Java)

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Java-Grundkurs für Wirtschaftsinformatiker

Software Entwicklung 1

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

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

Grundlagen der Modellierung und Programmierung, Übung

Vorkurs Informatik WiSe 16/17

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

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

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

Programmiermethodik 1. Klausur

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Informatik II Übung 5

Polymorphie. 15. Java Objektorientierung II

Einstieg in die Informatik mit Java

Programmieren in Java -Eingangstest-

Tag 4 Repetitorium Informatik (Java)

Polymorphie. 15. Java Objektorientierung II

12 Abstrakte Klassen, finale Klassen und Interfaces

Fragenkatalog ESOP WS 16/17

Theorie zu Übung 8 Implementierung in Java

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

AuD-Tafelübung T-B5b

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Modul Software Komponenten 10 Komponentenarchitektur

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

Das Interface-Konzept am Beispiel der Sprache Java

Schematische Schnittstelle eines Naming-Context-Objekts und des Binding-Iterators. BindingIterator. next_one next_n destroy

7.1.5 Java RMI Remote Method Invocation ( (

Repositories. AVO-Übung 4. Activation Wiederholung. Activation Änderungen an IOR. CORBA Activation, INS, PI. Welche Repositories kennen Sie?

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Programmieren 2 Java Überblick

Transkript:

Überblick Middleware - Übung Tobias Distler, Michael Gernoth, Rüdiger Kapitza Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de CORBA CORBA-Überblick Interface Definition Language (IDL) Überblick Abbildung nach Java CORBA und Java Aufgabe 3 Wintersemester 2009/2010 MW-Übung (WS09/10) CORBA 1 39 Client-Seite Client Aufrufer der Operation am CORBA-Objekt Muss selbst kein CORBA-Objekt sein Statischer Stub Automatisch erzeugt aus IDL-Schnittstelle Marshalling der Aufrufparameter Unmarshalling der Rückgabewerte/Exceptions ORB-Schnittstelle Export von initialen Objektreferenzen (z.b. Namensdienst) Verarbeitung von Objektreferenzen (z.b. Konvertierung zwischen String und IOR) ORB-Core Hauptaufgabe Übertragung von Aufrufen mit Hilfe von Informationen in den Objektreferenzen General Inter-ORB Protocol (GIOP) Standard-Transportprotokoll zwischen ORBs Grundlage für die Interoperabilität GIOP über TCP-Verbindungen: Internet Inter-ORB Protocol (IIOP) MW-Übung (WS09/10) CORBA CORBA-Überblick 2 39 MW-Übung (WS09/10) CORBA CORBA-Überblick 3 39

Server-Seite Server und Servants Server: Prozess zur Verwaltung von CORBA-Objekt-Implementierungen Servant Implementierung von genau einem CORBA-Objekt Existenz unabhängig von CORBA-Objekt verschiedene Servants zu verschiedenen Zeiten für das selbe CORBA-Objekt möglich Statische Skeletons Automatisch erzeugt aus der IDL-Schnittstelle Unmarshalling der Aufrufparameter Weiterleitung an den Servant Marshalling der Rückgabewerte/ Exceptions ORB-Schnittstelle [siehe Client-Seite] Server-Seite (Fortsetzung) Object Adaptor Aufrufweiterleitung vom ORB-Core an die Skeletons Erzeugung und Verwaltung von Objektreferenzen Dynamische Aktivierung von Servants Basis-Funktionalität: Portable Object Adaptor Implementation Repository Datenbank für Implementierungen von CORBA-Objekten (z.b. Informationen darüber, welches Objekt von welchem Servant implementiert wird) Oft mit Location-Forwarding Service kombiniert MW-Übung (WS09/10) CORBA CORBA-Überblick 4 39 MW-Übung (WS09/10) CORBA CORBA-Überblick 5 39 Grundlegendes CORBA CORBA-Überblick Interface Definition Language (IDL) Überblick Abbildung nach Java CORBA und Java Aufgabe 3 Beschreibung von Datentypen und Schnittstellen Unabhängig von der/den Implementierungs-Programmiersprache(n) Syntax ist stark an C++ angelehnt Beschreibung von Daten und Schnittstellen (Typen, Attribute, Methoden,... ) Keine steuernden Anweisungen (if, while, for,... ) Präprozessor wie in C++ #include um andere IDL-Dateien einzubinden #define für Makros Kommentare wie in C++ und Java // Das ist ein einzeiliger Kommentar /* * Das ist ein mehrzeiliger * Kommentar */ MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 6 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 7 39

Bezeichner (Identifiers) Module Bestimmte reservierte Wörter module, interface, struct, void, long,... Alle anderen Kombinationen von kleinen und großen Buchstaben, Zahlen und Unterstrichen sind erlaubt (einzige Einschränkung: 1. Zeichen muss ein Buchstabe sein) als Escape-Zeichen für reservierte Wörter Sobald ein Bezeichner benutzt ist, sind alle anderen Varianten mit anderer Gross-/Kleinschreibung verboten! module 1 {... module BEISPIEL1 {... // illegal in IDL Erlaubt Abbildung von IDL zu Sprachen, die nicht case-sensitive sind Erhalte Schreibweise von Bezeichner für case-sensitive Sprachen Namensraum (scope) für IDL-Deklarationen Syntax module Name { // Deklarationen Zugriff auf andere Namensräume,,:: -Operator module 1 { typedef long IDNumber ; module 2 { typedef 1 :: IDNumber MyID ; // typedef long MyID ; MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 8 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 9 39 Primitive Datentypen Ganzzahlen short 2 15 to 2 15 1 unsigned short 0 to 2 16 1 long 2 31 to 2 31 1 unsigned long 0 to 2 32 1 long long 2 63 to 2 63 1 unsigned long long 0 to 2 64 1 Fließkommazahlen float double long double Zeichen: char Wahrheitswert: boolean Byte: octet void einfache Genauigkeit doppelte Genauigkeit erweiterte Genauigkeit Any (Kapselung für beliebigen CORBA-Datentyp): any MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 10 39 Strukturen Gruppierung von mehreren Typen in einer Struktur struct AmountType { float value ; char currency ; Geschachtelt Strukturen können innerhalb anderer Strukturen definiert werden struct AmountType { struct ValueType { long integerpart ; short fractionpart ; amount ; char currency ; Strukturen erzeugen einen eigenen Namensraum (scope) Zugriff auf innere Strukturen mit dem,,:: -Operator, z.b. AmountType::ValueType MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 11 39

Arrays, Sequences & Strings Schnittstellen Übersicht Ein- und Mehrdimensionale Arrays (feste Größe) Deklaration mit typedef typedef long Matrix [3][3]; Eindimensionales Array (variable Größe) Deklaration mit typedef typedef sequence < long > Longs ; Zeichenkette Ähnlich zu sequence<char> Spezieller Datentyp keine eigene Deklaration mit typedef nötig Optional: maximale Größe n festlegbar mit string<n> ( typedef nötig) typedef string <80 > Name ; Allgemein Schlüsselwort: interface Definition eines eigenen Namensraums Eindeutige Definition von Attributen und Operationen: kein Überladen Attribute Deklaration öffentlicher Objektvariablen mit attribute Schreibzugriff kann verhindert werden (Rein-lesendes Attribut: readonly) interface Account { readonly attribute float balance ; Operationen Spezifikation von Methoden-Name, Rückgabe-Datentyp, Aufruf-Parameter, Exceptions Nur Methodenname signifikant: kein Überladen durch Parametertypen Syntax return_ type name ( parameter_ list ) raises ( exception_ list ); MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 12 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 13 39 Schnittstellen Parameterübergabe Schnittstellen Vererbung Angabe der Übertragungsrichtung für jeden Parameter notwendig in: nur vom Client zum Server out: nur vom Server zum Client inout: in beiden Richtungen interface Account { void makedeposit ( in float sum ); void makewithdrawal ( in float sum, out float newbalance ); Ableitung neuer Schnittstellen von existierenden Mehrfache Vererbung möglich Namen von geerbten Attributen und Operationen müssen eindeutig sein (Ausnahme: Bezeichner, die auf verschiedenen Pfaden geerbt werden, aber von der selben Basisklasse stammen.) : Weder Overloading noch Overriding ist erlaubt module Foo { interface A { void draw ( in float num ); interface B { void print ( in float num ); void print ( in string str ); // Fehler : Overloading interface C: A, B { void draw ( in float num ); // Fehler : Overriding MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 14 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 15 39

Exceptions Benutzer-Exceptions werden im Benutzer-Code auf Server-Seite erzeugt und zum Client weitergereicht Exception ist eine spezielle Form einer Struktur Nur Datenelemente, keine Operationen Keine Vererbung von Exceptions interface Account { // Deklaration der Exception exception Overdraft { float howmuch ; CORBA CORBA-Überblick Interface Definition Language (IDL) Überblick Abbildung nach Java CORBA und Java Aufgabe 3 // Deklaration einer Methode, die diese Exception wirft void makewithdrawal ( in float sum ) raises ( Overdraft ); Zusätzlich: Bei internen Fehlern wirft der ORB System-Exceptions MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 16 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 17 39 Allgemeine Bemerkungen Abbildungsspezifikation für Java Abbildung von IDL-Datentypen auf Java-Schnittstellen und Klassen Enthält Abbildung für die POA-Schnittstellen Ziele Portable Stubs Stubs können über das Netzwerk geladen werden Stubs müssen mit jedem lokal installierten ORB funktionieren, unabhängig vom ORB-Kern Schnittstelle zwischen Stubs und ORB festgelegt, um Austauschbarkeit zu garantieren Umgekehrte Abbildung von Java nach IDL sollte möglich sein Hinweise Bezeichner von IDL werden unverändert in Java verwendet Bei Namenskollisionen wird (underscore) vorangestellt Helper-Klassen Allgemeines Automatisch erzeugt aus IDL-Schnittstelle Bereitstellung von statischen Hilfsmethoden Wichtigste Methoden (-Typ Example ExampleHelper) Einfügen und Entnehmen des Typs in ein/aus einem any-objekt void insert ( org. omg. CORBA. Any a, Example t); Example extract ( org. omg. CORBA. Any a); Erfragen von Typ-Code und Typ-Information (Repository-ID) org. omg. CORBA. TypeCode type (); String id (); Marshalling und Unmarshalling in portablen Stubs void write ( org. omg. CORBA. portable. OutputStream ostream, Example value ); Example read ( org. omg. CORBA. portable. InputStream istream ); Casten (nur in Helper-Klassen von Schnittstellen) Example narrow ( org. omg. CORBA. Object obj ); MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 18 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 19 39

Holder-Klassen Problem out und inout-parameter benötigen call-by-reference Java besitzt für Objektreferenzen nur call-by-value-semantik Objektreferenzen können nicht verändert werden Lösung: Holder-Objekte Statt eigentlicher Objektreferenz wird eine Referenz auf das Holder-Objekt übergeben ( zusätzliche Indirektionsstufe) Holder-Objekt besitzt Referenz auf das eigentliche Objekt Referenz auf die,,nutzdaten kann umgebogen werden, da die Referenz auf das Holder-Objekt stabil bleibt interface Account { // IDL void makewithdrawal ( in float sum, out float newbalance ); IDLEntity Leeres Marker-Interface Hinweis darauf, dass eine Klasse/Schnittstelle im Rahmen von CORBA-IDL verwendet wird eine zugehörige Helper-Klasse existiert. Verwendung bei Serialisierung und Deserialisierung Code package org. omg. CORBA. portable ; public interface IDLEntity extends java. io. Serializable { public interface AccountOperations { // Java public void makewithdrawal ( float sum, FloatHolder newbalance ); MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 20 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 21 39 Abbildung von Datentypen Ganzzahlen: Große unsigned-werte werden in Java negativ! IDL short unsigned short long unsigned long long long unsigned long long Fließkommazahlen Sonstige float double long double Java short short int int long long float double [nicht spezifziert] char char boolean boolean octet byte Any Klasse org.omg.corba.any insert- und extract-methoden für primitive Datentypen MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 22 39 Abbildung von Modulen und Strukturen Module module package Strukturen (structs) Abbildung auf public final -Klasse mit Helper und Holder struct { // IDL float value ; char currency ; final public class // Java implements org. omg. CORBA. portable. IDLEntity { public float value ; public char currency ; public () { public ( float value, char currency ) { this. value = value ; this. currency = currency ; MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 23 39

Abbildung von Arrays, Sequences & Strings Arrays und Sequences Abbildung auf Java-Arrays sowie Helper und Holder Längenüberprüfung beim Marshalling typedef long Matrix [3][3]; // IDL public class MatrixHelper {... // Java final public class MatrixHolder implements org. omg. CORBA. portable. Streamable { public int [][] value ; [...] Strings Abbildung auf java.lang.string Exceptions beim Marshalling, wenn die Länge überschritten wird Holderklasse: org.omg.corba.stringholder Generierte Schnittstellen und Klassen Schnittstellen und Hilfsklassen IDL: interface Example {... Java public interface ExampleOperations {... public interface Example extends org. omg. CORBA. Object, ExampleOperations, org. omg. CORBA. portable. IDLEntity {... final public class ExampleHolder implements org. omg. CORBA. portable. Streamable {... abstract public class ExampleHelper {... Stubs und Skeletons public class _ ExampleStub // Stub extends org. omg. CORBA. portable. ObjectImpl implements Example {... public abstract class ExamplePOA // Skeleton extends org. omg. PortableServer. Servant implements ExampleOperations, org. omg. CORBA. portable. InvokeHandler {... MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 24 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 25 39 Stubs & Skeletons Klassenhierarchien Schnittstellen Attribute & Operationen Servant-Klassen für das IDL-Interface module::name Client-Klassen für das IDL-Interface module::name Attribute Schreibbar: Abbildung auf ein Paar Zugriffsmethoden (Getter und Setter) Nur lesbar: nur Abbildung auf Getter-Methode Operationen: direkte Abbildung IDL interface Example { attribute float a; readonly attribute float b; void foo ( in string s ) raises ( ExampleException ); Java public interface ExampleOperations { public float a (); public void seta ( float a); public float b (); public void foo ( String s) throws ExampleException ; MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 26 39 MW-Übung (WS09/10) CORBA Interface Definition Language (IDL) 27 39

CORBA-Objekt-Schnittstelle org.omg.corba.object CORBA CORBA-Überblick Interface Definition Language (IDL) Überblick Abbildung nach Java CORBA und Java Aufgabe 3 Basisklasse für CORBA-Objekte: org.omg.corba.object Vergleiche: java.lang.object für Java-Objekte Unterscheidung im Code notwendig: Object vs. org.omg.corba.object Wichtigste Methoden InterfaceDef get interface() Liefert eine Interface-Beschreibung (vom Interface Repository) für dieses Objekt zurück Verwendung in Verbindung mit dem Dynamic Invocation Interface (DII) boolean is a(string identifier) Überprüft, ob das Objekt eine bestimmte Schnittstelle implementiert boolean is equivalent(object that) Überprüft, ob zwei Referenzen auf das selbe CORBA-Objekt zeigen Achtung: nur best effort -Semantik (wahr? selbes Objekt : wahrscheinlich verschieden) int hash(int maximum) Hash, um Objektreferenzen zu unterscheiden MW-Übung (WS09/10) CORBA CORBA und Java 28 39 MW-Übung (WS09/10) CORBA CORBA und Java 29 39 ORB-Schnittstelle Abbildung auf abstrakte Klasse org.omg.corba.orb Wichtigste Methoden String object to string(org.omg.corba.object obj) Umwandlung von Objektreferenzen in eindeutige Strings org.omg.corba.object string to object(string str) Umwandlung von Strings in Objektreferenzen String[] list initial services() Liste von Diensten, die der ORB kennt, z.b. Namensdienst org.omg.corba.orb org.omg.corba.object resolve initial references(string object name) Liefert Objektreferenz auf den angeforderten ORB-Dienst zurück object name spezifiziert den Dienst, z.b. NameService ORB init(strings[] args, Properties props) Statische Methode zur Initialisierung eines ORBs MW-Übung (WS09/10) CORBA CORBA und Java 30 39 CORBA-Skeletons Abstrakte Basisklasse: org.omg.portableserver.servant Alle vom IDL-Compiler generierten Skeletons (*POA) sind direkte (ebenfalls abstrakte) Unterklassen Servant-Implementierungen sind wiederum (nicht-abstrakte) Unterklassen der generierten Skeletons Skeleton-Methoden OutputStream _invoke ( String op, org. omg. CORBA. portable. InputStream i, org. omg. CORBA. portable. ResponseHandler Unmarshalling der Paramter von InputStream Weiterleitung an die Operation namens op ResponseHandler stellt OutputStream bereit Marshalling der Rückgabewerte nach OutputStream Example this(org.omg.corba.orb orb) Aktiviert ein neues CORBA-Objekt Ordnet den Servant dem neuen CORBA-Objekt zu Liefert eine Objektreferenz zurück (einen lokalen Stub) Mechanismus wird auch,,implizite Aktivierung genannt MW-Übung (WS09/10) CORBA CORBA und Java 31 39 rh)

Initialisierung Hello World -Servant POA-Aktivierung Referenz auf RootPOA via resolve initial references org.omg.corba.object o = orb.resolve initial references( RootPOA ); Narrow auf das POA-Interface (org.omg.portableserver.poa) org. omg. PortableServer. POA poa = org. omg. PortableServer. POAHelper. narrow (o); POA aktivieren via org.omg.portableserver.poamanager poa.the POAManager().activate(); ORB Hauptschleife Verarbeitung von Anforderungen starten Methode: run() in org.omg.corba.orb orb.run(); IDL-Interface: Hello.idl module { interface Hello { string say ( in string msg ); Servant-Implementierung mittels Vererbung public class HelloServant extends HelloPOA { // Constructor public HelloServant () { super (); // Operation :: Hello :: say from IDL public String say ( String msg ) { return " Hello " + msg ; MW-Übung (WS09/10) CORBA CORBA und Java 32 39 MW-Übung (WS09/10) CORBA CORBA und Java 33 39 Hello World -Server Server-Implementierung public class HelloServer { public static void main ( String [] args ) throws Exception { ORB orb = ORB. init (args, null ); POA poa = POAHelper. narrow ( orb. resolve_ initial_ references (" RootPOA ")); poa. the_ POAManager (). activate (); HelloServant hserv = new HelloServant (); org. omg. CORBA. Object obj = poa. servant_to_reference ( hserv ); // Write object reference to file " Hello. ior " PrintWriter pw = new PrintWriter ( new FileWriter (" Hello. ior ")); pw. println ( orb. object_to_string ( obj ); pw. close (); Hello World -Server Klassen orb. run (); // Wait for request MW-Übung (WS09/10) CORBA CORBA und Java 34 39 MW-Übung (WS09/10) CORBA CORBA und Java 35 39

Hello World -Client Implementierung Hello World -Client Klassen Client-Implementierung public class HelloClient { public static void main ( String [] args ) throws Exception { ORB orb = ORB. init (args, null ); // Read object reference from file " Hello. ior " BufferedReader br = new BufferedReader ( new FileReader (" Hello. ior ")); String s = br. readline (); br. close (); // Create a stub object org. omg. CORBA. Object o = orb. string_to_object (s); // Narrow to the Hello interface Hello hello = HelloHelper. narrow ( o); // Do the call System. out. println ( hello. say (" world!")); MW-Übung (WS09/10) CORBA CORBA und Java 36 39 MW-Übung (WS09/10) CORBA CORBA und Java 37 39 Hello World Starten Aufgabe 3 Client Kompilieren und Starten mit JDK 1.5 (/local/java-1.5/) > idlj [- fclient ] Hello. idl > javac HelloClient. java > java HelloClient Kompilieren und Starten mit JacORB (/local/jacorb/) > idl Hello. idl > javac HelloClient. java > jaco HelloClient > java - Xbootclasspath :${ JACORB_HOME / lib / jacorb. jar :\ ${ JRE_HOME / lib /rt.jar :${ CLASSPATH \ -Dorg. omg. CORBA. ORBClass = org. jacorb. orb. ORB \ -Dorg. omg. CORBA. ORBSingletonClass = org. jacorb. orb. ORBSingleton HelloClient Server: analog, außer Once again... Bibliotheksverwaltung (dieses Mal eben mit CORBA) Details Jedes Medienobjekt ist ein CORBA-Objekt (mit eigenem Servant) Verwendung des CORBA-Namensdients Einsatz von SunORB und JacORB Herausforderung Viele Medienobjekte großer Ressourcenverbrauch Deshalb: Beschränkte Anzahl an gleichzeitig aktiven Servants Dynamische Deaktivierung und Aktivierung von Servants Speicherung von Daten in einer persistenten Datenbank > idlj -fserver Hello.idl MW-Übung (WS09/10) CORBA CORBA und Java 38 39 MW-Übung (WS09/10) CORBA Aufgabe 3 39 39