A CORBA specifikáció

Szerzô: Micsik András
Megjelent az Infopen magazin 1993 októberi számában

A CORBA az Object Management Group egyik technológiai ajánlása, amelyrôl mostanában egyre többet hallani. A rövidítés jelentése Common Object Request Broker Architecture, azaz egy ORB (Object Request Broker) általános felépítése. Az ORB-t fordíthatnánk objektum ügynöknek, kezelônek, de leginkább csak összekötônek vagy hírvivônek. Az Object Management Group kidolgozott egy olyan architektúrát, amely objektum-orientált rendszerek közös váza lehet (Object Management Architecture). Ilyen rendszerben vagy rendszerekben az egyes számítógépeken különféle objektumok vannak installálva, amelyek úgy tudnak igazán hatékonyan mûködni, ha egymás mûveleteit hívni tudják. Ennek az architektúrának az alapja az ORB, amely az objektumok közötti üzenetváltásokat (mûvelethívásokat) bonyolítja. Azért nem tekinthetô objektum kezelônek egy ORB, mert a kezelôtôl megszokott szolgáltatásokat (objektumok létrehozása, tárolása, aktiválása stb.) nem ô végzi, hanem ezek tôle elkülönülô illetve rajta alapuló szolgáltatások.

Lássuk, mit tesz egy ORB, ha beérkezik egy objektum-hívás:

  1. megkeresi a hívott objektumot (amely lehet más számítógépen, de mindenképpen ugyanazon az ORB-n belül)
  2. az objektumot aktiválja ha kell, azaz olyan állapotba hozza, hogy az fogadni tudja a hívást,
  3. meghívja a mûveletet az adott paraméterekkel,
  4. végül a hívóhoz visszajuttatja a mûvelet eredményeit vagy az esetleges hibaüzeneteket.

Az ORB szempontjából két ügyfelet különböztethetünk meg; a klienst, hívót, amely valamelyik objektum valamilyen mûveletét szeretné végrehajtatni és az objektum implementációját, amely a mûveletekhez tartozó kódokat tartalmazza. Egy alkalmazáson belül persze a szerepek keverednek, vagyis vannak olyan objektum implementációk amelyek más implementációkat hívnak, azaz hívóként viselkednek. Az ORB-hez két szolgáltatás nélkülözhetetlen: az interfész és az implementáció tároló. Az interfész tároló a hívó számára fontos információkat tartalmazza, míg az implementáció tároló magát a végrehajtható kódot tárolja és kezeli.

Funkcióinak betöltéséhez az ORB öt interfészt nyújt:

A kliens kétféle interfészen keresztül hívhat objektumokat (1. ábra). A dinamikus hívó interfész futási idôben konfigurálható hívásokat tesz lehetôvé. Ilyenkor a hívó az interfész tárolóból lekérdezheti egy objektum mûveleteit, azok paraméterlistáit és egyéb tulajdonságait. A választott mûvelethez kérhet egy "biankó" paraméterlistát, amelyet kitöltve meghívhatja a mûveletet szinkron vagy aszinkron módon. Az interfész tárolóba az információk IDL nyelven (Interface Definition Language) kerülnek be. E nyelv az ANSI C++ leíró szintaxisán alapul, és a CORBA tartalmazza a teljes specifikációját. Szinkron híváskor a hívó futását felfüggesztik addig, amíg a hívás be nem fejezôdik. Aszinkron hívás esetén a send eljárás elküldi a hívást az ORB-nek, a hívó tovább tud futni, és amikor már kíváncsi az eredményre, a get_response eljárással kérdezi le azt. A paraméterek in, out vagy inout típusúak lehetnek mint az ADA nyelvben, így az eredményeket is a paraméterlistában kapjuk vissza.

1. ábra: A kliens kapcsolatai

A kliens kérhet hívásokat az úgynevezett IDL csonkokon keresztül is. A csonkok a mûveletek IDL leírása alapján generálódnak, és egy könnyen kezelhetô felületet nyújtanak az egyes mûveletek statikus hívásához. Ilyenkor tehát már fordítási idôben meg kell adni a hívandó mûvelet nevét.

Az implementációhoz a hívás az objektum illesztôn keresztül jut el (2. ábra). Az illesztô gondoskodik arról, hogy a megfelelô implementáció futtatható legyen és a hívott objektum rendelkezésre álljon. Ugyancsak ô végzi az objektumok és implementációk deaktiválását is. Egy konkrét mûveletet a hozzátartozó IDL vázon keresztül hív meg az objektum illesztô. Az IDL váz egy hívó interfész, amely megmondja, hogyan legyen kódolva az objektum implementáció ahhoz, hogy ô a mûveleteket hívni tudja.

2. ábra: Az implementáció kapcsolatai

Az utolsó interfész közvetlenül az ORB szolgáltatásaihoz nyújt hozzáférést. Ezek fôleg az objektum hivatkozások kezelésére valók. Az objektum hivatkozás az egyetlen, amellyel a hívott objektumokat címezni tudjuk. A hivatkozásokat átlátszatlan típusként kell megvalósítani. Az ORB interfésszel egy hivatkozás alapján lekérdezhetô az objektum implementációja és interfésze, hivatkozások törölhetôek és másolhatóak. Mivel a hivatkozások nem tárolhatók és nem is küldhetôk át más számítógépre, az ORB kérésünkre stringgé alakíthatja azt (és természetesen fordítva is), amelyet már tetszés szerint kezelhetünk.

Hogyan írjunk egy alkalmazást ORB környezetben? A programnyelvet azok közül a nyelvek közül kell választani, amelyeket az adott ORB támogat. A támogatott nyelvekre szabvány leképezés van megadva, amelybôl megtudhatjuk, hogyan kell az IDL leírásokra hivatkozni, milyen legyen a mûveletek paraméterezése, hogyan kezeljük a kivételeket stb. A következô lépés az objektum illesztô megválasztása. Az egyes objektum illesztôk különbözô alaptulajdonságú objektumokhoz készülnek, így ezek eltérnek az aktiválás, deaktiválás és tárolás módszerében, az objektum engedélyezett méretében stb. Az ORB elônye, hogy egy adott nyelven és adott objektum illesztôhöz írt forráskód bármely olyan másik ORB környezetre is átvihetô amely támogatja azt a nyelvet és azt az illesztôt.

ORB-ket sokféle környezetben és különbözô alapossággal lehet megvalósítani. A legegyszerûbb ORB akár eljáráskönyvtárakkal is megvalósítható. Komolyabb formában alapulhat IPC mechanizmusokon, vagy beépülhet az operációs rendszerbe.

Az elsô CORBA alapú objektum kezelô rendszert a HyperDesk jelentette meg a piacon. Ez a szoftver Unix-os szerverekkel és Unix vagy MS Windows kliensekkel képes dolgozni. A szerveren helyezkednek el az interfész és az implementáció tárolók, amelyek Informix vagy ObjectStore adatbáziskezelôre épülhetnek. A kliensektôl egy ORB meghajtóhoz kerülnek a hívások, amely azokat lefuttatja vagy továbbküldi a megfelelô objektum kezelônek. A meghajtó Unix kliens esetén helyben, MS Windows kliens esetén a szerveren fut. A kliensek az ORB API-n keresztül kommunikálnak az ORB meghajtójukkal, amely többé-kevésbé tartalmazza a fentebb felsorolt szolgáltatásokat. A HyperDesk Distributed Object Management System (DOMS) a tervek szerint az év végétôl már a Novell NetWare részeként is kapható lesz.

A CORBA-támogató cégek száma meghaladja a hetvenet. A nagyobb operációs rendszerek gazdái mind készítik vagy már el is készítették a platformjaikon futtatható ORB-ket. Az IBM-nél System Object Model-nek (SOM) hívják és már idén kapható lesz az Object Developers Toolkit 2.0. Ezzel AIX és OS/2 alatt lehet C és C++ nyelven objektumokat fejleszteni. A Digital ORB szoftverének neve ACA Services, és tíz környezet valamint két átviteli mód integrálására alkalmas. További megvalósítások: Distributed Object Management Facility (DOMF) a HP-nél és a Project DOE (Distributed Objects Everywhere) a SunSoft-nál. A Next Computer NEXTSTEP operációs rendszere is eleget fog tenni a cég ígérete szerint a CORBA szabványnak. A szoftvercégek, mint például a HyperDesk, az Iona Technologies vagy a SuiteSoftware is készen állnak már saját ORB környezeteikkel.