Corba Overzicht. Corba referenties Belangrijkste: CORBA: Integrating Diverse Applications Within...

of 87/87
Corba Overzicht
  • date post

    14-Jun-2015
  • Category

    Documents

  • view

    215
  • download

    1

Embed Size (px)

Transcript of Corba Overzicht. Corba referenties Belangrijkste: CORBA: Integrating Diverse Applications Within...

  • Dia 1
  • Corba Overzicht
  • Dia 2
  • Corba referenties Belangrijkste: CORBA: Integrating Diverse Applications Within Distributed Heterogeneous Environments (Steve Vinoski) (http://www.cs.wustl.edu/~schmidt/corba- papers.html) A Detailed Comparison of CORBA, DCOM and Java/RMI (Gopalan Suresh Raj) (http//wwww.execpc.com/~gopalan/misc/compare.ht ml)
  • Dia 3
  • Corba Sites De referentie is http://www.corba.org/ vooral:http://www.corba.org/ http://www.omg.org/technology/corba/corba3releaseinfo.htm Een autoriteit is: http://www.cs.wustl.edu/~schmidt/corba.html Voor de linux gemeenschap: http://linas.org/linux/corba.html Een goede tutorial is http://www.dcl.hpi.uni-potsdam.de/LV/ccm04/ En "off the road" http://www.corbamtb.com/
  • Dia 4
  • Corba Bedoeling Op een hoog niveau van abstractie de nodige voorzieningen treffen voor gedistribueerde programmering De Object Request Broker verzorgt transparantie van plaats, activatie en communicatie
  • Dia 5
  • OMG: Object Managing Group Opgericht in 1989, momenteel > 800 leden. Object Management Architecture (OMA) omvat als kern CORBA Object Model encapsulatie, vaste identiteit, interfaces Reference Model interface categorien
  • Dia 6
  • Dia 7
  • Corba Vijf Onderdelen Orb kern Interface Definition Language Dynamic Invocation Interface Interface Repository Object Adapters
  • Dia 8
  • Dia 9
  • Corba Versus RPC RPC laat toe om ingewikkelde datastructuren over het netwerk te verdelen RPC ondersteunt de distributie van C++ objecten niet expliciet Programmeurs moeten dit dus zelf implementeren
  • Dia 10
  • Corba Versus RPC Dit is moeilijk vanwege de verborgen pointers naar virtuele functietabellen De toepassing hoeft ook de klassen niet echt te kennen We hebben een methode nodig om de objecten over het net te distribueren Inpakken en uitpakken leidt tot problemen met encapsulatie en gebruik van bibliotheken
  • Dia 11
  • Corba Versus RMI RMI lost verschillende problemen van RPC op Het object blijft aan de serverkant functioneren Slechts een stub reist over het netwerk De klasse blijft voor de client een abstracte entiteit waarover slechts een minimum bekend hoeft te zijn RMI is enkel Java Het hergebruiken van bestaande code is problematisch (enkel mogelijk via de native code interface van Java)
  • Dia 12
  • Corba Versus CGI e.a. De Common Gateway Interface laat toe om code aan de serverkant (website) uit te voeren in opdracht van een client (browser) De programmeertaal is niet vastgelegd De parameters worden gespecificeerd via de URL Cfr asp Dit is niet object georienteerd en loopt over HTTP HTTP is toestandsloos, er is dus geen sprake van een verbinding (kan omzeild worden)
  • Dia 13
  • Corba Voordelen Ondersteuning van legacy code in C, C++, COBOL, SMALLTALK, Java ondersteuning Onafhankelijkheid van een specifieke software- boer Schaalbaarheid naar het aantal gebruikers toe Ondersteuning van een groot aantal platformen Een Object Georienteerd ontwikkelingsparadigma Veiligheid
  • Dia 14
  • CORBA en DCOM DCOM is de Microsoft oplossing voor dit probleem Distributed Component Object Model COM (Component Object Model) geeft toegang tot alle onderdelen van de MS applicaties DCOM laat toe deze applicaties over het netwerk te raadplegen Probleem: 1 vendor. DCOM-CORBA bridges zijn nodig voor andere gebruikers (vb LINUX)
  • Dia 15
  • Een voorbeeld TimeServer 1 struct, 1 interface time.idl $idl time.idl time.hh: #include bij client timeC.cc stub voor client timeS.hh, timeS.cc #include en skeleton voor server struct TimeOfDay { short hour; short minute; short second; }; Interface Time { TimeOfDay get_gmt(); };
  • Dia 16
  • #include #include timeS.hh class Time_impl : public virtual POA_Time { }; public : virtual TimeOfDay get_gmt() throw(CORBA::SystemException); TimeOfDay Time_impl::getgmt() throw(CORBA::SystemException) { return tod; } time_t time_now = time(0); struct tm * time_p = gmtime(&time_now); TimeOfDay tod; tod.hour = time_p->tm_hour;tod.minute = time_p->tm_min; tod.second = time_p->tm_sec; Server code
  • Dia 17
  • int main(int argc, char * argv[]) { return 0;} try{ } catch (const CORBA::Exception &) { cerr the_POAManager(); mgr->activate(); Time_impl time_servant; Time_var tm = time_servant._this(); CORBA::String_var str = orb->object_to_string(tm); cout
  • Server compilatie e.d. $CC -c -I/opt/myORB/include timeC.cc $CC -c -I/opt/myORB/include timeS.cc $CC -c -I/opt/myORB/include myserver.cc $CC -o myserver timeC.o timeS.o myserver.o \ >-L/opt/myORB/lib -lorb IOR:0000000000000000d4944443eafec902.
  • Dia 19
  • Client #include #inlcude time.hh int main(int argc, char * argv[]){ return 0;} try { } catch (const CORBA::Exception &) {cerr CORBA -L/opt/myORB">
  • Client compilatie e.d. $CC -c -I/opt/myORB/include timeC.cc $CC -c -I/opt/myORB/include myclient.cc $CC -o myserver timeC.o myclient.o \ >-L/opt/myORB/lib -lorb $./myserver >/tmp/myserver.ref & [1] 1729 $./myclient `cat /tmp/myserver.ref` Time is 1:35 $kill %1 [1] + Terminated./myserver & $
  • Dia 21
  • OMG IDL Interface Definition Language OMG IDL is de fundamentele abstractie die interfaces van hun implementaties scheidt. Er bestaan standaard afbeeldingen voor C, C++, Smalltalk, COBOL, Ada, Java Er zijn onafhankelijke afbeeldingen voor Modula 3, Perl, Tcl, Python, Dylan, Oberon, Visual Basic, Objective-C. OMG IDL is zuiver declaratief: interfaces, exceptions, datatypes. OMG IDL->IDL
  • Dia 22
  • COMPILATIE IDL->source files die met de applicatiecode moeten gecombineerd worden (afhankelijk van de ORB). Client executable en Server executable kunnen overal lopen, kunnen in verschillende talen geschreven zijn. De host machines verschaffen de runtime omgeving. Twee gevallen: n ontwikkelingsomgeving en gescheiden ontwikkelingsomgevingen voor client en server.
  • Dia 23
  • Dia 24
  • Dia 25
  • Inhoud OMG IDL Lexicografie Basis types Gebruikerstypes Unions Arrays Sequenties Recursieve types Interfaces User Exceptions Overerving Voorbeeld
  • Dia 26
  • Source Files Bestandsnamen:.idl Bestandsformaat: free-form Preprocessing: C++ preprocessor #include #define #ifdef #ifndef #endif /* einde conditionele module */ Definitievolgorde: definitie vr gebruik
  • Dia 27
  • Basis Types De grootte van de types worden bewaard door de afbeeldingen. De bereiken zijn niet noodzakelijk behouden. Vb Java kent geen unsigned integers Vb geen 8 bit characters Er kunnen representatie omzettingen nodig zijn of vertalingen nodig zijn little endian, big endian EBCDIC, ASCII Er zijn geen pointers, enkel referenties
  • Dia 28
  • Dia 29
  • Lexicografie Commentaar /* */ en // als in C++ Sleutelwoorden in kleine letters, behalve Object, TRUE en FALSE Namen: letter (a-z,A-Z) gevolgd door letters, cijfers en onderlijning. Geen _ vooraan, geen onengelse letters. Hoofdletter ongevoelig maar consistentie is verplicht. short aap; Aap = 0; // fout, inconsistent long giraffe; double Giraffe; // fout, ongevoelig long while; // ok maar niet verstandig
  • Dia 30
  • Gebruiker gefinieerde Types Andere namen: typedef semantiek afhankelijk van de programmeertaal typedef short JaarType; Opsommingen : enum enum dag {maa,din,woe,don,vri,zat} gegarandeerd 32 bits geen gegarandeerde overeenkomst met int
  • Dia 31
  • Gebruikers Types Structuren C++ notatie struct Tijd {short uur;short minuut;}; een struct vormt een eigen naamruimte Unions: altijd discriminerend: union TelDagen switch(dag) { case maa : case din : unsigned long num_serious; case woe : float discount; default : string no_sense; }
  • Dia 32
  • Union idiomatic union AgeOpt switch (boolean) { case TRUE : unsigned short age; }; Struct InfoKind {text, numeric, none}; union Info switch (InfoKind) { case text : string text; case numeric : long index; }; Union not advised (overloading)
  • Dia 33
  • Arrays typedef Color ColorVector[10]; typedef long IDTable[10][20]; Always use typedef Geen niet gedimensioneerde tabellen Indexbereik is niet gespecifieerd!
  • Dia 34
  • Sequences typedef sequence Colors; typedef sequence Numbers; (hoogstens 100 getallen) typedef sequence ; (lijst lijsten van hoogstens 100 getallen) typedef sequence >; lijst lijsten van long, gebruikt anonieme variabele=>niet onproblematisch, te vermijden.
  • Dia 35
  • Sequences/Arrays Matrix als een array: Performantie! typedef long M[100][100]; interface MProc { M invert(in M m); }; Matrix als een sequentie: sparse struct NZ { unsigned short r; unsigned short c; long val;}; typedef sequence M; interface MProc { M invert(in M m); };
  • Dia 36
  • Recursieve types Structures: struct Node { long value; sequence children;}; Unions: enum OpType {O_AND, O_OR, O_NOT}; enum NodeSoort {BLAD,UNAIR,BINAIR}; union Node switch(NodeSoort) { case BLAD: long val; _cxx_if Modules worden namespaces De CORBA module: namespace in C++, bevat standaard IDL ">
  • Enige regels Identifiers blijven normaal behouden if -> _cxx_if Modules worden namespaces De CORBA module: namespace in C++, bevat standaard IDL types en interfaces Basis types zijn beschikbaar voor overloading, behalve Boolean, Octet, Wchar (w)strings worden op (W)char * afgebeeld. Allocatie moet gebeuren met speciale functies
  • Dia 57
  • Afbeeldingstabel
  • Dia 58
  • Overdraagbare geheugenallocatie namespace CORBA { // do not use new[] en delete[] static char * string_alloc(Ulong len); static char * string_dup(const char *); static void string_free(char *); static WChar * wstring_alloc(Ulong len); static WChar * wstring_dup(const WChar *); static void wstring_free(WChar *); // }
  • Dia 59
  • Types van variabele lengte Voor types van variabele lengte zijn er twee mogelijkheden: raw: doe als programmeur alle geheugenbeheer zelf. Dit is de oude C-programmeerstijl, met een onderscheid tussen types van variabele en vaste lengte. Gebruik slimme pointer types, _var, die de deallocatie van het geheugen voor u doen. Vaste en variabele lengte krijgen een uniforme behandeling.
  • Dia 60
  • _var types Voorbeeld Schrijf een C-functie die een string van een I/O apparaat leest en teruggeeft als resultaat. De lengte van de string is niet beperkt, en kan niet bepaald worden op voorhand. Oplossingen static buffer static pointer naar dynamisch geheugen geheugen meegegeven door de oproeper een pointer naar dynamisch geheugen als return
  • Dia 61
  • _var types Van elke klasse van variabele grootte wordt een basis C++ type (raw) en een wrapper klasse gedefinieerd (automatisch):
  • Dia 62
  • _var types, voorbeeld class String_var { public: String_var(); // s = 0 String_var(char * p); // s = p, zal string_free uitvoeren op p String_var(const char * p); // s = string_dup(p), free op s String_var(const String_var & s);//deep copy ~String_var(); //destructor, voert string_free(s) uit String_var operator=(char * p); // s = p, String_var operator=(const char * p); // s = string_dup(p) String_var operator=(const String_var & s);//deep copy
  • Dia 63
  • _var types, class String_var operator char *(); // conversie tot char * operator const char *() const; // conversie tot const char * operator char * &(); // vb in void update(char * &);(realloc) char & operator[](ULong); char operator[](ULong) const; // gebruik een_string[3] /* voorbeeld CORBA::String_var s; s = get_string(); // string_alloc, s eigenaar size_t len = strlen(s); // Ok, conversie */
  • Dia 64
  • Valkuilen in String_var CORBA::String_var s1(Hall); // slecht in non ANSI C++ CORBA::String_var s2 = Hall; // idem! CORBA::String_var s3; s3 = Hall; // idem, nu met toekenningsoperator oplossingen: CORBA::String_var s1((const char *) Hall); CORBA::String_var s2 =(CORBA::string_dup(Hall)); CORBA::String_var s3; s3 = (const char *) Hall; een toekenning aan een pointer geeft een wijzer naar inwendig geheugen in de string, let dus op met char * p = s1;
  • Dia 65
  • Performantie bij lees toegang void print_string(CORBA::String_var s) { cout