Kap. 4.2 Das Orbix CORBA-System

22
Kap 4-1 OHO Kap. 4.2 Das Orbix CORBA-System Kurzer überblick zu der CORBA-Implementierung Orbix Unser Fahrplan: IDL Verwendungsbeispiel Zoom-In: CORBA Kommunikationsmechanismus Orbix Systemübersicht Naming Service, IORs VBS-Szenario mit Transaktionsservice, persistenten Objekten...

description

Kap. 4.2 Das Orbix CORBA-System. Kurzer überblick zu der CORBA-Implementierung Orbix Unser Fahrplan: IDL Verwendungsbeispiel Zoom-In: CORBA Kommunikationsmechanismus Orbix Systemübersicht Naming Service, IORs VBS-Szenario mit Transaktionsservice, persistenten Objekten. IDL Beispiel. - PowerPoint PPT Presentation

Transcript of Kap. 4.2 Das Orbix CORBA-System

Page 1: Kap. 4.2  Das Orbix CORBA-System

Kap 4-1OHO

Kap. 4.2 Das Orbix CORBA-System

Kurzer überblick zu der CORBA-Implementierung Orbix

� Unser Fahrplan:� IDL Verwendungsbeispiel� Zoom-In: CORBA Kommunikationsmechanismus� Orbix Systemübersicht� Naming Service, IORs� VBS-Szenario mit Transaktionsservice, persistenten Objekten...

Page 2: Kap. 4.2  Das Orbix CORBA-System

Kap 4-2OHO

IDL Beispiel

// naming service constantsconst string OHOContextName = "OhO_ss2000";

module Bank{ typedef long AccountID;

interface Account {

readonly attribute AccountID number; // account idreadonly attribute float balance; // amount of money in account

// thrown if not enough money on account to withdrawexception InsufficientFunds {};

// public methods to modify an accountvoid Deposit ( in float amount );void Withdraw ( in float amount ) raises (InsufficientFunds);

};};

Interfaces - Attribute - Operationen - ExceptionsTypeDefs, Konstanten...

Page 3: Kap. 4.2  Das Orbix CORBA-System

Kap 4-3OHO

Verwendung des IDL Compilers

IDL

Bank.idl

idl -B Bank.idl

C++ Header

Bank.hh

C++ Stubs

BankC.cpp

C++ Skeletons

BankS.cpp

C++ Source

Client.cpp

C++ Compiler

FinanceClient

C++ Source

AccountImpl.cpp

C++ Compiler

AccountServer

Orbix DLL

Page 4: Kap. 4.2  Das Orbix CORBA-System

Kap 4-4OHO

account->balance()

Client

Object Request Broker

CORBA Kommunikationsmechanismus (1)

Proxy-Objekt

Page 5: Kap. 4.2  Das Orbix CORBA-System

Kap 4-5OHO

Auszug aus den Account-Stubs

CORBA::Float Account::balance ( ){ CORBA::Environment IT_env; CORBA::Request IT_r (this,”_get_balance",IT_env,1,0);

IT_r.invoke (CORBA::Flags(0),IT_env);

if ( !IT_r.isException (IT_env) ) { CORBA::Float IT_result; IT_r >> IT_result; IT_r.checkEnv (IT_env); return IT_result; } else …}

Page 6: Kap. 4.2  Das Orbix CORBA-System

Kap 4-6OHO

Proxy-Objekt

account->balance()

Client

Object Request Broker

CORBA Kommunikationsmechanismus (2)

Objekt-Adapter

Request

ImplementationRepository

AccountImpl

Server

Page 7: Kap. 4.2  Das Orbix CORBA-System

Kap 4-7OHO

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") ) { CORBA::Float IT_result; CORBA::Environment IT_env (IT_r);

IT_result = ((Bank::Account *)IT_pp) -> balance ( IT_env );

IT_r << IT_result; ...}

Page 8: Kap. 4.2  Das Orbix CORBA-System

Kap 4-8OHO

AccountImpl

Server

Proxy-Objekt Objekt-Skelett

account->balance()

Client

Object Request Broker

CORBA Kommunikationsmechanismus (3)

Account

Request

Page 9: Kap. 4.2  Das Orbix CORBA-System

Kap 4-9OHO

Account-Server Implementierung

CORBA::Float AccountImpl::balance ( CORBA::Environment & ){ cout << ”AccountImpl::balance() called" << endl; return this->my_balance;}

Page 10: Kap. 4.2  Das Orbix CORBA-System

Kap 4-10OHO

CORBA::Float balance(…)

{... }

Server

Proxy-Objekt Objekt-Skelett

account->balance()

Client

Object Request Broker

CORBA Kommunikationsmechanismus (4)

Account

RequestAnswer

Page 11: Kap. 4.2  Das Orbix CORBA-System

Kap 4-11OHO

Komplett-Anatomie eines ORBsClient

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 desInterface Repository (für interpretierende Werkzeuge, wie Query Browser)

ServerObject Adapter interpretiert Objektreferenzen, bildet diese auf Objektimplementierungen ab und ruft Methodenimplementierungen auf,statisch via IDL Skeletons oderdynamisch über Dynamic IDL Skeletons als Grundlage für die Implementierung der Anwendungslogik

ORBInterface

Objekt-ImplementationClient

IDLSkeletonIDL

Stubs

ObjectAdapter

Object Request Broker

DynamicSkeletonDynamic

Invocation

InterfaceRepository

Implemen-tation

Repository

Page 12: Kap. 4.2  Das Orbix CORBA-System

Kap 4-12OHO

Was ist nun in Orbix der ORB?

� 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.

� KonfigurationsdateienWo liegen die Repositories? Welches ist der Default-orbixd? ...

� Weitere Link-Libraries für IFR und DII

� Weitere Bestandteile des Orbix-Systems:� Verwaltungsprogramme für die Repositories, Includes, Doku

Page 13: Kap. 4.2  Das Orbix CORBA-System

Kap 4-13OHO

VBS-Szenario - übersicht

Finance

STUD

Zürich

London Basel

Client

Account

STUD2

Account

Naming Service

Transaction Service

Page 14: Kap. 4.2  Das Orbix CORBA-System

Kap 4-14OHO

Datenkapselung(1)

� Speicherform der Kundendaten: relationale Tupel

CREATE TYPE cust_address_type( street VARCHAR2(50), zipCode VARCHAR2(5), city VARCHAR2(50));

/* Customer table */CREATE TABLE customer ( customer_ID INTEGER PRIMARY KEY, person_data CUST_PERSON_TYPE, address_data CUST_ADDRESS_TYPE);

CREATE TYPE cust_person_type( family_name VARCHAR2(50), pre_name VARCHAR2(50), nationality VARCHAR2(50), date_of_birth DATE);

/* Account table */CREATE TABLE account( account_number INTEGER PRIMARY KEY, customer_ID INTEGER, balance NUMBER;);

Page 15: Kap. 4.2  Das Orbix CORBA-System

Kap 4-15OHO

Datenkapselung (2)

� Repräsentation der Kundendaten: ”feingranulare” CORBA-Objekte

enum Nation { UNKNOWN, CH, D, F, GB, IR, NL };struct Address { string<50> street; string<5> zipcode; string<50> city;};interface Customer {

readonly attribute string name; readonly attribute string firstname; readonly attribute Nation nationality; readonly attribute string birthdate; readonly attribute Address addr; readonly attribute Account account;};interface Account { readonly attribute AccountID number; readonly attribute float balance;

void Deposit ( in float amount ); void Withdraw ( in float amount ) raises (InsufficientFunds);};

Page 16: Kap. 4.2  Das Orbix CORBA-System

Kap 4-16OHO

VBS Szenario: Datenzugriff auf Kundendaten

STUD

Zürich

London Basel

Client

STUD2

Naming Service1. VBS = NamingService->resolve(...)

Finance2. VBS->Transfer(…)

Page 17: Kap. 4.2  Das Orbix CORBA-System

Kap 4-17OHO

Aktivierung von CORBA Objekten

� Das “Münchhausen” Problem von CORBA:Wie ziehe ich mich selbst an den Haaren aus dem Sumpf?

� Bei CORBA: Woher bekommt man die erste Objektreferenz? � 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.

Page 18: Kap. 4.2  Das Orbix CORBA-System

Kap 4-18OHO

CORBA IORs (Inter-ORB-References)

roehm@dblab5:7 > catns OhO_ss2000.OTSIOR:0001004a0000002b49444c3a436f735472616e73616374696f6e732f5472616e73616374696f6e466163746f72793a312e30007300000001000000000000007d000100000000000f64626c6162352e6574687a2e63680000062200000000005d3a5c64626c6162352e6574687a2e63683a436f735472616e73616374696f6e735f5472616e73616374696f6e466163746f72793a303a3a49523a436f735472616e73616374696f6e735f5472616e73616374696f6e466163746f727900

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 : dblab5.ethz.ch port : 6 object_key : :\dblab5.ethz.ch:CosTransactions_TransactionFactory:0 ::IR:CosTransactions_TransactionFactory} } }

Page 19: Kap. 4.2  Das Orbix CORBA-System

Kap 4-19OHO

Code-Beispiel Bank::Finance::Transfer()

void FinanceImpl::Transfer( Bank::AccountID a1,Bank::AccountID a2, float amount, CORBA::Environment &env ){ try { tx = OTS->create(1000); source = Bank::Account::_bind(“1001@STUD:Bank_Account_OHO7”); destin = Bank::Account::_bind(“1004@STUD:Bank_Account_OHO7");

source->Withdraw(amount, env); destin->Deposit(amount, env); tx->commit(); } catch (...) { tx->rollback(); throw Bank::Finance::TransferFailed(); }}

Page 20: Kap. 4.2  Das Orbix CORBA-System

Kap 4-20OHO

VBS Szenario: Finance-Dienst in voller Aktion

STUD STUD2

Transaction Service1. create()

ClientFinance

VBS->Transfer(1001,1004, 4711)

Account

2. a1 = Account::_bind(…)3. a1->Withdraw(4711)

Account

5. A2 = Account::_bind(...)6. a2->Deposit(4711)

Naming Service

4. register() 7.

Page 21: Kap. 4.2  Das Orbix CORBA-System

Kap 4-21OHO

Persistente CORBA Objekte

� 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 Klasseein “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 gelesen, die Datenbank angesprochen und mit den gelesenen Werten ein neues Account Objekt erzeugt.

� CORBA: Persistent Object ServiceStandardisierter Dienst, um Objekte mit persistenten Zuständen zu initialisieren. Nachteil: zusätzliche Kommunikation und erneut vorherige Verknüpfung notwendig.

� Neu: Portable Object Adapter (POA)aber noch nicht weit verbreitet

Page 22: Kap. 4.2  Das Orbix CORBA-System

Kap 4-22OHO

VBS Szenario: Festschreiben der Datenänderungen

ClientFinance

Transaction Service

Account Account

5. DONE

2. prepare()

Koordiniert 2PC der beteiligten Objekten

1. commit()

STUD STUD2

3. UPDATE ... 3. UPDATE ...

4. commit() if all OK

4. COMMIT4. COMMIT