Mi a CORBA? CORBA A programok által használt objektumok nem szükségképpen korlátozódnak az operációs rendszer által a programok számára kijelölt memóriaterületre - a program címzési tartományára. Általánosabb esetben az objektumok függetlenné válnak az őket létrehozó programoktól, és önálló - perszisztens módon léteznek. Az ilyen objektumokat szétteríthetjük egy számítógéphálózat különböző elemei között úgy, hogy az elosztott objektumok - programkomponensek - valós fizikai elhelyezkedésüktől függetlenül képesek legyenek az együttműködésre. Ennek a komponens elvnek egyik legismertebb megvalósítása a CORBA. A CORBA (Common Object Request Broker Architecture) a jelenleg több m 800 tagú, a számítástechnika minden ágát magába foglaló konzorcium, az OMG (Object Management Group) terméke. CORBA segítségével olyan szoftver- komponenseket definiálhatunk, amelyek különböző hálózati pontokon, eltérő operá- ciós rendszerek felett, esetleg más-más programnyelvben implementálva egy közös protokollon keresztül képesek az együttműködésre. Az OMG csoporthoz nem tartozó egyetlen jelentős számítástechnikai cég a Microsoft, amely hasonló elvű saját termékkel rendelkezik DCOM Distri- buted Component Object Model - néven. A Microsoft a COM technológiát fejleszti tovább a Windows 2000-ben COM+ néven, valójában a két technológia szolgáltatásai (bár nem eszközrendszere) egyre jobban közelítenek egymáshoz. A CORBA felépítése A CORBA,,szíve'' az ORB (Object Request Broker) felelős az objektumok közötti kapcsolat létrehozásáért és fenntartásáért. Fontos szerepe, hogy elfedje a különböző címtartományok (programok) közötti kommunikációt. 1
Az ORB felett az objektumok úgy létesí- tenek egymással kapcsolatot, mha mindannyian egyetlen programban, egyetlen címtartományban léteznének. Az ORB feladata a köztes - gyakran igen összetett - kommunikáció megvalósítása, többek között a távoli objektum hálózati helyének megtalálása, az objektumot implementáló folyamat elindítása, a haté- kony adatcsere, stb. A kliensoldalon Az z ORB több összetevőt tartalmaz a kliens és a szerveroldalon A kliens Interface Definition Language (IDL) kapcsolódási csonk (Client IDL Stubs) biztosítja a kliensoldal statikus felületét a CORBA objektumok eléréséhez. A dinamikus hívási felület (Dynamic Invocation Interface, DII) segítségével olyan dinamikus programokat írhatunk, amelyek futás alatt derítik fel a szerveroldali objektumok metódusait, és képesek meghívni is azokat. Az erfész-szótár szótár programozói felület (Interface Reposítory API) futási idejű hozzáférést enged az előbb említett adatokhoz, az erfész-szótárhoz. szótárhoz. 2
A szerveroldalon Az ORB felület (ORB erface) néhány hasznos helyi szolgáltatást nyújt a CORBA programozóknak. pl. objektumhivatkozások karakterlánccá és visszakonvertálása, ami az objektumok kapcsolatainak tárolásához előnyös. A szerver IDL kapcsolódás: felület (Server IDL Stub,, váz, skeleton) a szerverobjektumok által nyújtott statikus szolgáltatásokat definiálja. A kliensoldali csonkhoz hasonlóan a vázat (szkeletont) is az IDL fordító generálja. A dinamikus kapcsolódási felületet (Dynamic Skeleton Interface,, DSI), a kliensoldali dinamikus hívási felület (DII) párja: futási időben képes csatlakozási információt szolgáltatni azokról az elérhető szerveroldali objektumokról, amelyek nem rendelkeznek IDL definiált statikus csonkkal. Az objektumadapter (Object Adapter) a fenti két felület implementációjához szükséges, de önállóan is használható. Itt helyezkedik el az objektumok létrehozásához, metódusaik hívásához szükséges futási környezet. Az implementációs szótár (Implemen- tation, Repository) a megvalósított szerveroldali osztályok leírását tartalmazza, valam információt arról, mely objektumokat példányosították és hogyan lehet azonosítani azokat. Az ORB felület, amely a szerveroldalról is elérhető, megfelel a kliensoldalinak. 3
Az Interface Definition Language (IDL) A CORBA erősen objektumorientált szemléletű rendszer. Ennek megfelelően az egyes szoftver- komponenseket osztályokként definiáljuk, és használhatunk olyan általánosan elterjedt technikákat, m az öröklődés vagy a kivételkezelés. Az egyik legfontosabb objektumorientált jellemzőnek, az adatelrejtésnek (encapsulation) kiemelt szerepe van: az objektumok közötti kapcsolattartás csak az osztályok jól definiált felületén - erfészén - keresztül lehetséges. Az osztályok definiálására az IDL, az Interface Definition Language nyelvet használjuk. Az IDL hordozható, programozási nyelvtől, operációs rendszertől független nyelv. Nem azonos a C++-szal szal, bár szin- taxisának gyökerei oda vezethetőek vissza. Egy IDL program vázlatosan akövetkező: Az IDL deklaratív nyelv, azaz támogatja típusok, konstansok, adatelemek, metó- dusok,, kivételek deklarációját, de nem tartalmaz procedúrális elemeket, azaz nem foglalkozik azzal, hogy a definiált eljárásokat hogyan kell implementálni. Az IDL nyelven deklarált osztályokat ké- sőbb konkrétan megvalositjuk Java-ban. Ez két lépésben történik: az IDL nyelven leírt erfészekből az IDL-fordító készít konkrét Java nyelvű kódot, amelyet ki kell egészítenünk a metódusok - szén konkrét nyelvi - megvalósításával. module = <azonosító< azonosító> { <típusdeklarációk>; <konstandeklarációk>; <kivételdeklarációk>; erface <azonosító> [ : öröklődés] { <típusdeklarációk>; <konstandeklarációk>; <kivételdeklarációk>; <attribútumdeklarációk> [<mód>] <azonosító> (<paraméterek>) [raise <kivétel>] [kontextus]; } } 4
Az IDL-Java leképezés Habár az IDL nyelv szaxisa a C++ -hoz áll közelebb, a mögöttes elvek a Java által kitűzött célokhoz szorosabban kötődnek. Ennek megfelelően az IDL alaptípusainak és típuskonstrukcióinak leképezése a Java nyelvre viszonylag egyszerű. IDL alaptípus,w unsigned Int Megfelelő Java típus IDL típus unsigned unsigned unsigned IDL paramétertípusok Java nyelvi leképezése in inout out visszatérő érték unsigned unsigned FloatHolder DoubleHolder BooieanHolder FIoatHolder DoubleHolder BooieanHolder octet string,wstring byte java.lang.string octet any enum referencia struct union string byte Object Ref String CharHolder ByteHolder típusholder StringHolder CharHolder ByteHolder típusholder StringHolder byte ObjectRef String sequence A CORBA további lehetőségei Az objektumorientált eszközök közül használhatjuk a többszörös öröklődést (még akkor is, ha maga a Java nyelv ezt csak erfészek között valósítja meg), és a kivételkezelést. A szerveroldali szolgáltatásaink válthatnak ki kivételeket, melyeket a kliens kezel le. A kiváltott kivételek a Java nyelvhez hasonlóan képesek információ továbbítására, és pontosan a megfelelő helyen lehet lekezelni azokat. Az IDL-Java fordító IDL erfészforrást olvas és Java kódot hoz létre. Az IDL erfész-ből létrehozott Java er- fész mellett generálásra kerülnek a cson- kok,, vázak (szkeletonok), és egyéb állo- mányok is. Az IDL-Java fordítókat az egyes ORB gyártók biztosítják termékeikhez. Nemcsak lehetséges, de a CORBA alkal- mazásának egyik legígéretesebb módja, ha az objektumaink egy része a szerverről letöltött appletben helyezkedik el. Ilyenkor az applet a szerverrel metódushívásokon keresztül kommunikál, és egyszerre ak- názza ki az applet technika és az objek- tumorientált programozás valamennyi előnyét. 5
A kliens-szerver szerver rendszerek előtt teljesen új lehetősége- ket nyit meg a szerver vissza-hívási technika (callback( callback), amire ugyancsak lehetőséget ad a CORBA. A hagyomá- nyos kliens-szerver szerver elképzelés szer mindig a kliens a kezdeményező, aki aktivizál valamilyen szerver folya- matot.. Ha a kliens nem fordul a szerverhez, az nem ké- pes információt szolgáltatni. A visszahívási technika lehetőséget ad arra, hogy a (klienssel párhuzamosan futó) szerverfolyamat legyen a kezdeményező, és az hívja meg a kliens egy metódusát. (Ez a metódus Java kliens esetében legtöbbször egy külön szálon belül van implementálva.) Legfőképpen azonban nem csak statikusan - előre definiált műveletekkel - kommunikálhatunk a CORBA objektumok között, hanem használ- hatjuk a dinamikus hívási felületet (Dynamic Invocation Interface,, DII] is. A DII segítségével a kliens képes futási időben kiválasztani azokat a szerveroldali objektumokat és metódusokat, amelyekkel együtt kíván működni. Ez azt jelenti, hogy a kliens fordítási idő helyett futási időben is képes az IDL erfészt lekérdezni, metódusok között válogatni, egy kiválasztott metódus leírá- sát megszerezni, majd a metódust meghívni. 6