3.3 Das Orbix CORBA-System

Ähnliche Dokumente
3.2 Der CORBA-Standard Common Object Request Broker Architecture

Kommunikation. Björn und Georg

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

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

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

Grundlagen und Implementation. Jan Kraft

Inhaltsverzeichnis. Zusammenfassung CORBA

Modul Software Komponenten 10 Komponentenarchitektur

CORBA Implementierung von Client und Server

CORBA. Systemprogrammierung WS

ADDISON-WESLEY PUBLISHING COMPANY

Komponentenmodelle II

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

Vererbung. Martin Wirsing. Ziele. Vererbung

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

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

Kap. 3 Verteilte Objektverwaltung

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

Verteilte objektorientierte Programmierung am Beispiel CORBA

Enterprise JavaBeans Überblick

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

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

Remote Method Invocation

Remote Method Invocation

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

39 Object Request Brokers. 40 Components of an ORB Stubs and Skeletons Stub

Client/Server-Programmierung

Client/Server-Programmierung

Client/Server-Systeme

Einführung: Verteilte Systeme - Remote Method Invocation -

Remote Methode Invocation (RMI) ETIS SS05

Kommunikation in verteilten Anwendungen

-Testen verteilter Anwendungen

CORBA (Überblick, IDL)

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Übungen zu Softwaretechnik

Konzepte von Betriebssystem-Komponenten Middleware RMI

Lösung der OOP-Prüfung WS12/13

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

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

Common Object Request Broker Architecture (CORBA)

SOAP Integrationstechnologie für verteilte Middlewarearchitekturen?

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

Einstieg in die Informatik mit Java

Java Idioms. Basic und Advanced Java Coding Style. Prof. Dr. Nikolaus Wulff

Design von Schnittstellen mit CORBA-IDL. Andres Koch

Mobile und Verteilte Datenbanken

Transkript:

3.3 Das Orbix CORBA-System G Kurzer Überblick zu der CORBA-Implementierung Orbix G Unser Fahrplan: IDL Verwendungsbeispiel Zoom-In: CORBA Kommunikationsmechanismus Orbix Systemübersicht Naming Service, IORs VBS-Szenario mit Transaktionsservice, persistenten Objekten... Kapitel 3: Workshop Orbix 1

IDL Beispiel // naming service constants const string OHOContextName = "OhO_ss2001"; module Bank typedef long AccountID; typedef float Money; Interfaces - Attribute - Operationen - Exceptions TypeDefs, Konstanten... interface Account readonly attribute AccountID number; // account id readonly attribute Money balance; // amount of money in account // thrown if not enough money on account to withdraw exception InsufficientBalance }; }; // public methods to modify an account void Credit ( in Money amount ); void Debit ( in Money amount ) raises (InsufficientBalance); }; Kapitel 3: Workshop Orbix 2

C++ Verwendung des Orbix IDL Compilers ESQL/C++ Source IDL C++ Source Client.cpp Bank.idl AccountImpl.cxx AccountImpl.cpp idl -B Bank.idl Oracle proc80 C++ Stubs C++ Header C++ Skeletons BankC.cpp Bank.hh BankS.cpp C++ Compiler Orbix DLL C++ Compiler FinanceClient AccountServer Kapitel 3: Workshop Orbix 3

CORBA Kommunikationsmechanismus (1) Client account->balance() Proxy-Objekt Object Request Broker Kapitel 3: Workshop Orbix 4

Auszug aus den Account-Stubs CORBA::Float Account::balance ( ) CORBA::Environment IT_env; Methode kodieren CORBA::Request IT_r (this, _get_balance",it_env,1,0); IT_r.invoke (CORBA::Flags(0),IT_env); Methodenaufruf } if (!IT_r.isException (IT_env) ) CORBA::Float IT_result; IT_r >> IT_result; IT_r.checkEnv (IT_env); return IT_result; } else Kapitel 3: Workshop Orbix 5

CORBA Kommunikationsmechanismus (2) Client account->balance() Server AccountImpl Proxy-Objekt Object Request Broker Request Objekt-Adapter Implementation Repository Kapitel 3: Workshop Orbix 6

Auszug aus den Account-Skeletons Account_dispatch::dispatch ( CORBA::Request & IT_r, void * IT_pp ) const char *IT_s = IT_r.getOperation (); if (!strcmp(it_s, _get_balance") ) Dispatching CORBA::Float IT_result; CORBA::Environment IT_env (IT_r); }... IT_result = ((Bank::Account *)IT_pp) -> balance ( IT_env ); IT_r << IT_result; Methodenaufruf Kapitel 3: Workshop Orbix 7

CORBA Kommunikationsmechanismus (3) Client account->balance() Server AccountImpl Account Proxy-Objekt Object Request Broker Request Objekt-Adapter Kapitel 3: Workshop Orbix 8

Account-Server Implementierung CORBA::Float AccountImpl::balance ( CORBA::Environment & ) cout << AccountImpl::balance() called" << endl; return this->my_balance; } Kapitel 3: Workshop Orbix 9

CORBA Kommunikationsmechanismus (4) Client account->balance() Server CORBA::Float balance( )... } Account Proxy-Objekt Object Request Broker Request Answer Objekt-Adapter Kapitel 3: Workshop Orbix 10

Komplett-Anatomie eines ORBs Client IDL Stubs: statisch, d.h. alle Operationen sind zur Compilezeit bekannt. Dynamic Invocation Interface (DII) findet Objekte und Schnittstellen zur Laufzeit und konstruiert den Aufruf dynamisch, unter Verwendung des Interface Repository (für interpretierende Werkzeuge, wie Query Browser) Server Object Adapter interpretiert Objektreferenzen, bildet diese auf Objektimplementierungen ab und ruft Methodenimplementierungen auf, statisch via IDL Skeletons oder dynamisch über Dynamic IDL Skeletons als Grundlage für die Implementierung der Anwendungslogik Client Objekt-Implementation Dynamic Invocation IDL Stubs ORB Interface IDL Skeleton Dynamic Skeleton Object Adapter Interface Repository Object Request Broker Implementation Repository Kapitel 3: Workshop Orbix 11

Was ist nun in Orbix der ORB? G Der ORB in Orbix besteht aus mehreren Komponenten: Orbix Link-Library Wird sowohl dem Client-, als auch Server hinzugelinkt. Basisfähigkeit zum Austausch von CORBA::Requests, enthält ORB-Interface und Objekt-Adapter der vorherigen Folie. Orbix Daemon orbixd Orbix-Vermittlung : Lokalisiert CORBA-Objekte, leitet Requests entweder zu anderen Rechnern weiter oder startet lokal eine Implementierung, dann LOCATION_FORWARD Mechanismus. Client kommuniziert danach direkt mit CORBA-Server. Konfigurationsdateien Wo liegen die Repositories? Welches ist der Default-orbixd?... Weitere Link-Libraries für IFR und DII G Weitere Bestandteile des Orbix-Systems: Verwaltungsprogramme für die Repositories, Includes, Doku Kapitel 3: Workshop Orbix 12

VBS-Szenario - Übersicht CORBA-Objekt Common Object Services Naming Service Client Finance Zürich Transaction Service CORBA-Objekt mit explizitem persistenten Zustand CORBA-Objekt mit explizitem persistenten Zustand Account Account Bern Zürich STUD5 STUD2 Kapitel 3: Workshop Orbix 13

VBS Szenario: Datenzugriff auf Kundendaten 1. VBS = NamingService->resolve(...) Naming Service Client 2. VBS->Transfer( ) Finance Zürich Bern Zürich STUD5 STUD2 Kapitel 3: Workshop Orbix 14

Aktivierung von CORBA Objekten G Das Münchhausen Problem von CORBA: Wie ziehe ich mich selbst an den Haaren aus dem Sumpf? G Bei CORBA: Woher bekommt man die erste Objektreferenz? G Möglichkeiten: ORB::resolve_initial_reference() Standardisiert für wenige zentrale Dienste wie NamingService. ORB::string_to_object() Wandelt stringified IOR in ein Objektreferenz zurück. Problem: Wer nennt uns vorher den String? NamingService::resolve() NamingService bietet Mapping von Strings auf OIDs. Again: Eintrag muss bereits vorhanden sein <T>::_bind() Orbix-proprietärer Weg über Orb-Konfiguration, siehe Übung. Kapitel 3: Workshop Orbix 15

CORBA IORs (Inter-ORB-References) roehm@dblab6:7 > catns OhO_ss2001.OTS IOR:000100000000002b49444c3a436f735472616e73616374696f6e732f5472616e7361637 4696f6e466163746f72793a312e30007300000001000000000000007d000100000000000f64 626c6162362e6574687a2e63680000062200000000005d3a5c64626c6162362e6574687a2e6 3683a436f735472616e73616374696f6e735f5472616e73616374696f6e466163746f72793a 303a3a49523a436f735472616e73616374696f6e735f5472616e73616374696f6e466163746 f727900 IOR V 1.74 type_id : IDL:CosTransactions/TransactionFactory:1.0 profiles : tag : TAG_INTERNET_IIOP data : ProfileBody of length 125 iiop_version: 1.0 host : dblab6.ethz.ch } } } port : 1570 object_key : :\dblab6.ethz.ch:costransactions_transactionfactory:0 ::IR:CosTransactions_TransactionFactory Kapitel 3: Workshop Orbix 16

Code-Beispiel Bank::Finance::Transfer() void FinanceImpl::Transfer(Bank::AccountID a1,bank::accountid a2, Bank::Money amount,corba::environment &env) try Current.begin(); source = Bank::Account::_bind( 1001@STUD:Bank_Account_OHO7 ); destin = Bank::Account::_bind( 3004@STUD:Bank_Account_OHO7"); } source->debit(amount, env); destin->credit(amount, env); Current.end(); } catch (...) Current.rollback(); throw Bank::Finance::TransferFailed(); } Kapitel 3: Workshop Orbix 17

VBS Szenario: Finance-Dienst in voller Aktion Client VBS->Transfer(1001,3004, 4711) Naming Service Finance 1. begin() Transaction Service 4. register() 7. 2. a1 = Account::_bind( ) 3. a1->debit(4711) 5. A2 = Account::_bind(...) 6. a2->credit(4711) TransactionalObject Account Resource TransactionalObject Account Resource STUD5 STUD2 Kapitel 3: Workshop Orbix 18

CORBA Objekte & explizit persistenter Zustand G Problem: Aktivierung eines Objektes mit persistentem Zustand? Object-Oriented Database Adapter zum direkten Einblenden von Objekten aus Objektbanken in die CORBA Welt, nur wir haben noch keinen gesehen... Orbix-spezifisch: spezialisierte ObjectLoader Klasse ein Hook im ORB, um Einfluss darauf nehmen zu können, wie ein zu aktivierendes Objekt initialisiert werden soll. Siehe Übung: Aus der Objektreferenz wird die gewünschte Kontonummer extrahiert und mit den aus der DB gelesenen Werten ein neues Account Objekt erzeugt. CORBA: Persistent Object Service Standardisierter Dienst, um Objekte mit persistenten Zuständen zu initialisieren. Nachteil: zusätzliche Kommunikation und erneut vorherige Verknüpfung notwendig. Portable Object Adapter (POA) neuer, aber noch nicht weit verbreitet G Vergleiche auch Lösungsansätze von OTM/EJB Kapitel 3: Workshop Orbix 19

VBS Szenario: Festschreiben der Datenänderungen Client 5. DONE Finance 1. commit() Koordiniert 2PC der beteiligten Resourcen Transaction Service 2. prepare() 4. commit() if all OK TransactionalObject TransactionalObject Account Resource Account Resource 4. COMMIT 3. UPDATE... 3. UPDATE... 4. COMMIT STUD5 STUD2 Kapitel 3: Workshop Orbix 20