Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 Johan.Sall.2535 Thomas.Wahlsten.1711 Distribuerade System HT 2002 Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 Sammanfattning Vår uppgift har varit att skriva en rapport om CORBA, en av de tidigaste och mest använda arkitekturerna för distribuerade objekt. Rapporten tar upp allmänna delar om CORBA så som dess tillkomst, utformning av CORBA, användningsområden. Detta följs av en teknisk beskrivning av CORBA, vad är ORB, ORB i jämförelse med RPC, IDL:er, vilket protokoll används för kommunikation mellan ORB:ar osv. I rapporten finns även små kod-exempel för att belysa vissa elementära grunder med CORBA. Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 Innehållsförteckning 1. Introduktion ........................................................................................................................ 4 1.1 Vad är CORBA?......................................................................................................... 4 1.2 Vad är middleware? ................................................................................................... 4 1.3 Användningsområden ................................................................................................. 4 1.4 OMG (Object Management Group) ........................................................................... 5 2. Tekniska detaljer om CORBA ........................................................................................... 5 2.1 Object Request Broker (ORB) ................................................................................... 5 2.2 Vad är skillnaden mot RPC? ...................................................................................... 5 2.3 Transparens och kommunikation ................................................................................... 6 2.3.1. Följande mål har tagit hänsyn till vid utveckling av GIOP: .................................... 7 2.4 Argument och marshalling ............................................................................................... 7 2.5. Interface Definition Language (IDL) ............................................................................. 7 2.5.1. Erhålla objektreferens: ............................................................................................ 8 2.5.2. Klientmodell för skapande av objekt: .................................................................... 8 2.5.3. Exeptions: ............................................................................................................... 8 2.6 Statiskt eller dynamiskt metodanrop? ............................................................................. 8 2.6.1. CORBA Statiskt metodanrop ................................................................................... 9 2.6.1.1 Översikt av statiskt metodanrop ........................................................................... 10 2.6.2. CORBA Dynamiskt metodanrop ........................................................................... 11 3. Referenser......................................................................................................................... 12 Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 1. Introduktion 1.1 Vad är CORBA? CORBA är en förkortning för Common Object Request Broker Architecture, framtaget av OMG (Object Management Group) för att kunna möta det behov som finns för att det enorma antal mjukvaror och hårdvaror som finns på marknaden skall kunna kommunicera sinsemellan. Tanken är alltså att CORBA ska möjliggöra kommunikation mellan olika applikationer över ett nätverk, oavsett programspråk och dataplattform. Med hjälp av CORBA kan metoder exekveras på en annan maskin, men även ren dataåtkomst möjliggörs, dvs. åtkomst av objekt över ett nätverk. CORBA är ett exempel på en middleware - en programvara som fogar samman andra programvaror - och fungerar som brygga mellan dessa. [OMG01] 1.2 Vad är middleware? Inom dataindustrin är middleware en generell beskrivning av all slags programmering som siktar till att “limma” samman eller medla mellan två separata och ofta redan existerande program. En vanlig tillämpning med middleware är att tillåta program skrivna för att accessa en viss databas att kunna få access även till andra databaser. Vanligtvis tillhandahåller middleware program meddelandetjänster så att olika applikationer kan kommunicera. Det systematiska sammanbindandet av olika applikationer, oftast genom användning av middleware, benämns som EAI(Enterprise Application Integration). Det skall påpekas att det naturligtvis krävs att gränssnittet mellan middleware och de komponenter som finns runt om den är tydligt specificerade för att det hela skall kunna fungera väl. 1.3 Användningsområden Möjligheterna med CORBA är nästan obegränsade, och det finns en uppsjö med exempel på tillämpningar som använder sig av CORBA. Några exempel är e-handelslösningar, webbservrar och fönsterhanteraren gnome, men CORBA är även populärt inom finansvärlden för banktjänster, aktiehandel m.m. Till exempel använder Handelsbanken CORBA tillsammans med sitt aktiesystem för att kontinuerligt hålla sig uppdaterade med de senaste aktiekurserna. CORBA lämnar möjligheterna öppna för framtida utbyggnader och plattformar. [OMG02] Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 1.4 OMG (Object Management Group) Object Management Group (OMG) grundades i april 1989 av elva företag, bestående av 3Com Corporation, American Airlines, Canon, Inc., Data General, Hewlett-Packard, Philips Telecommunications N.V., Sun Microsystems and Unisys Corporation. OMG:s huvudkontor finns i Needham, Massachussets i USA och mindre kontor i ett 10 – tal länder runtom i världen. I oktober 1989 på började OMG sitt oberoende arbete som ett non-profit företag. Företaget uppstod i en tid när många mjukvarutillverkare såg ett enormt behov av att kunna kunna ta fram gemensamma specifikationer för samexistens mellan olika mjukvaror. OMG: s uppgift är alltså att vara ett oberoende organ som lägger upp och håller i specifikationerna för CORBA. Tack vare sitt målmedvetna utvecklingsarbete och det faktum att specifikation och implementation är åtskilda har gjort att OMG idag har över 1000 medlemmar världen över. [OMG01] 2. Tekniska detaljer om CORBA 2.1 Object Request Broker (ORB) ORB, Object Request Broker, är en distribuerad service som implementerar förfrågning till fjärrobjektet. ORB har till uppgift att lokalisera fjärrobjektet, skicka förfrågan till fjärrobjektet och invänta svar samt skicka svaret tillbaka till klienten. ORB implementerar lokaliserings transpararens, vilket innebär att samma förfrågningsmekanism används oberoende om objektet är lokaliserat lokalt eller som fjärrobjekt. ORB, erbjuder programmeraren stor flexibilitet såsom att fritt välja bästa lämpliga: Operationsystem, programspråk för varje komponent. Men viktigast av allt är att ORB möjliggör integration av existerande komponenter. Språkkopplingar finns definierade för alla populära programspråk. Specifikationen för detta definieras i IDL:en, Interface Definition Language. [Sun01] 2.2 Vad är skillnaden mot RPC? Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 RPC och ORB är ganska nära besläktade, men det finns några viktiga skillnader. Den stora skillnaden är att ORB är objektorienterat vilket RPC inte är. Med RPC anropar en specifik funktion medan man med ORB:en anropar en metod inom ett specifikt objekt. En av fördelarna med objektorientering är att man kan få olika objektklasser att uppträda annorlunda med samma metodanrop genom så kallads polymorfism. Eftersom varje objekt har hand om sina egna privata data, så blir metoden implementerad på just dessa specifika data. I ORB ligger objektet instansierat hos servern och klienten har en referens till objektet, medan i RPC ligger data hos klienten och servern använder sig bara av inskickade argument. CORBA erbjuder objektabstraktioner och dynamisk invokation, vilket inte RPC erbjuder. Dessutom kan man ärva interface i CORBA. 2.3 Transparens och kommunikation Som vi tidigare nämnt så implementerar ORB lokaliserings transpararens. Vilket betyder att exekveringen är den samma om objektet exekveras lokalt på användarens maskin eller på en fjärrmaskin. Som användare märker man ingen skillnad förutom att det eventuellt tar längre tid att exekvera fjärrobjektet. Transpararensen kan man uppnå genom att man implementerar ett interface mellan ORB:n och klienten/servern, ett så kallat stubbe och skelett. Client Object Client Object Stub Skel Stub Skel ORB 1 IIOP ORB 2 Protkoll ORB till ORB kommunikation Protokoll för att kommunicera och sköta felhantering sker generellt med GIOP, General Inter-ORB Protocol. Protokollet har åtta definierade meddelanden: Request, Reply, CancelRequest, LocateRequest, LocateReply, CloseConnection, MessageError, Fragment. GIOP kan mappas för till de flesta anslutningsorienterade transportprotokoll bara de följer ett mindre antal förutsättningar. Specifiering av GIOP som körs direkt över TCP/IP kallas IIOP, Internet Inter-ORB Protocol. Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 2.3.1. Följande mål har tagit hänsyn till vid utveckling av GIOP: Största möjliga användbarhet – GIOP och IIOP är baserat på TCP/IP och definierar ett minimalt extra protokollager som är nödvändiga för att överföra CORBA förfrågningar mellan ORB:er. Enkelhet – Målsättningen är att GIOP ska vara så enkelt som möjligt, vilket är bästa målet för att säkerställa en mängd olika oberoende och kompatibla implementationer. Skalbarhet - GIOP och IIOP ska stödja ORB:er och nätverk med bryggade ORB:er, till storleken av dagens och framtidens Internet. Låg kostnad – Att lägga till stöd för GIOP och IIOP till en existerande eller ny ORB design ska kräva små tekniska investeringar. Generellitet – Medan IIOP är definierad för TCP/IP, Så är GIOP:s designat för att användas med alla transport lager som uppfyller ett minimalt antal förutsättningar. Arkitektisk neutralitet – GIOP specifikationen gör ett minimalt antal antaganden om hur arkitekturen måste vara uppbyggd för att det ska fungera. [Sun01], [STD01], [OMG01] 2.4 Argument och marshalling Vid en förfrågan så läses först argumenten för förfrågan in vid stubben. Sedan anpassas de där enligt CDR, Common Data Representation, och processen kallas marshalling. Efter detta skickas förfrågan vidare till fjärrobjektets skelett. I skelettet sker en återanpassning, så kallad unmarshalling, av argumenten så de passar objektet. Klienten och objektet kan ha olika programspråk och man är vidare fri att utveckla klient och objekt i de flesta programspråk. Följande argument stöds av CORBA: Grundläggande datatyper som long, short, string, float osv., konstruerade datatyper som struct, union, enum, sequence, objektreferenser (objekt-ID), any-typen, som är ett dynamiskt typat värde. Man kan t ex inte använda sig av pekare som argument! 2.5. Interface Definition Language (IDL) CORBA bygger på ett väl definierat gränssnitt som komponenterna måste följa. Detta görs med IDL, Interface Definition Language. Ett objektinterface indikerar vilka operationer som objektet stödjer, men inte hur de implementeras. Implementationen av CORBA objekt stöds av objektorienterade språk såsom Java eller C++. IDL interfacen är programneutrala. IDL definierar språkbindningar till många olika programspråk. Detta innebär att man kan välja lämplikt språk för objektet samt har valfrihet att utveckla klienten i det mest lämpliga språket. OMG har standardiserat bindningar till C, C++, Java, Ada, COBOL, Smalltalk, Objetive C och Lisp. Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 2.5.1. Erhålla objektreferens: Det finns som kanske bekant tre olika sätt att få ett stycke kod att erhålla objektreferens: Det kan bli sänt till sig som en parameter Det kan returneras som resultat från en förfrågan. Det kan erhållas genom konvertering av en sträng till en objektreferens. 2.5.2. Klientmodell för skapande av objekt: Ibland vill man kanske ge det distribuerade objektsystemet möjlighet att skapa objekt. Detta kan göras genom att man definierar en factory för objektet. Factories är inget annat än distribuerade objekt som skapar andra distribuerade objekt. Det finns inget standard interface för en factory. Nedan ges ett exempel på hur det kan gå till. interface StockFactory { Stock create_stock( in string symbol, in string description ); }; För att skapa ett objekt av typen Stock så gör klienten en förfrågan på StockFactory. [Sun01] 2.5.3. Exeptions: Undantag, exeptions, i CORBA är mycket likt undantag i Java. När man använder undantag i CORBA så måste man använda try och catch precis som i Java. Det finns två typer av CORBA undantag, system- och användarundantag. Exempel: StockFactory factory = ... Stock theStock = ... try { theStock = factory.create( "GII", "Global Industries Inc."); } catch (Throwable e) { } [Sun01] 2.6 Statiskt eller dynamiskt metodanrop? Med CORBA kan man göra statiskt eller dynamiska metodanrop. Fördelen med det statiska är att det är enkelt, typsäkert och effektivt. Det dynamiska är då av naturliga skäl mer komplicerat och mindre typsäkert. Fördelen är dock att man kan anropa operationer på objekt som inte är kända vid kompileringen. Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 2.6.1. CORBA Statiskt metodanrop 1. Definiera serverinterfacen i Interface Definition Language (IDL). IDL-filen innehåller de operationer på objekten som finns tillgängliga för potentiella klienter, och hur de kan anropas. IDL-definitionen innehåller typer för objekt, deras attribut, vilka metoder de exporterar och metodparametrar med tillhörande typer. 2. Kör IDL-filen genom en precompiler. Detta skapar språkskelett för implementation av server klasser. 3. Lägg till impementationskoden, som skapades vid förkompileringen, till skeletten. 4. Kompilera koden. Detta görs med den vanliga kompilatorn. CORBA kompilatorn kan generera fyra typer av filer. Import filer – beskriver objekt för Interface Repository. Klientstubbar – Anropas av klientprogrammet. Serverstubbar – Anropar metoder på servern. Kod som implementerar serverklasserna. 5. Bind interfacedefinitionerna till Interface Repository. 6. Instansiera objekten på servern. Object Adapter kan instansiera serverobjekt som tjänstgör vid metodanrop på fjärrobjekt. 7. Registrera run-time-objekten hos Implementation Repository. Object Adapter registrerar objektreferens och vilken objekttyp som den instansierar på servern. Registreringen sker i Interface Repository. 8. Implementera klientkoden. Klienten lägger till CORBA-anrop, som är språkberoende, i koden. Stubbarna tar hand om marshalling och unmarshalling. 9. Kompilera klientkoden. Detta görs med den vanliga kompilatorn. [SMI01] Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 2.6.1.1 Översikt av statiskt metodanrop Figur 1: En översikt av statiskt metodanrop, jmf bilden med den steg för steg beskrivning som ges i kapitel 2.6.1. Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 2.6.2. CORBA Dynamiskt metodanrop Med Dynamic Skeleton Interface kan man göra dynamiska metodanrop. Interfacet finns istället för stubben men utåt sett så märks ingen skillnad. 1. Erhåll metodbeskrivning från Interface Repository. CORBA anrop lokaliserar och beskriver objekt i Interface Repository. 2. Skapa en argumentationslista. Datastruktur för att skicka parametrar (NamedValueList). 3. Skapa ett tomt requestobjekt. Specificerar objektreferens, metodnamn och argumentationslista. 4. Anropa requestobjektet. 5. Frigör requestobjektet. [DMI01] Författare: Johan Säll 2535 Thomas Wahlsten 1711 Distribuerade System, HT 2002 Uppgift 1: CORBA 2002-09-18 3. Referenser [OMG01] OMG: Hemsida för CORBA http://www.corba.org/ [OMG02] En översikt av CORBA http://www.infosys.tuwien.ac.at/Research/Corba/OMG/arch2.htm#446864 [OMG03] OMG: OMG's CORBA FAQ http://www.omg.org/gettingstarted/corbafaq.htm [Sun01] Kort om Corba på Suns hemsida http://developer.java.sun.com/developer/onlineTraining/corba/corba.html [STD01] CORBA v2.3a specifikation http://www.slac.stanford.edu/BFROOT/www/Computing/Environment/Standards /corba/corba2.3a.pdf [SMI01] Statiskt metodanrop, steg för steg http://ei.cs.vt.edu/~wwwbtb/fall.96/Presentations/Corba/tsld024.htm http://oopsla.snu.ac.kr/corba/tp_note/corba-chap2.ppt [DMI01] Dynamiskt metodanrop, steg för steg http://ei.cs.vt.edu/~wwwbtb/fall.96/Presentations/Corba/tsld027.htm http://oopsla.snu.ac.kr/corba/tp_note/corba-chap2.ppt Författare: Johan Säll 2535 Thomas Wahlsten 1711