Common Object Request Broker Architecture

A Common Object Request Broker Architecture, azaz a CORBA az OMG által létrehozott architektúra, illetve szabványgyűjtemény a számítógépes hálózatok kommunikációjának szabványosítására. A CORBA szabványokat úgy határozták meg, hogy lehetővé tegyék különböző operációs rendszereken futó, eltérő programozási nyelveken megírt alkalmazások kommunikációját is. Ennek érdekében az egymással kommunikáló alkalmazások, programok között az interfészt egy a CORBA szabvány által meghatározott interfészleíró nyelven (angolul Interface Definition Language, IDL) kell definiálni.

Verziók szerkesztés

A CORBA infrastruktúráját több szabvány együttesen határozza meg, ezek közül azonban a legfontosabb a core CORBA technológiát specifikáló szabvány, amely a korábbi DCE szabványokon alapul. Ez jelenleg a 3.0.3-as verziónál tart. A különböző CORBA implementációk természetesen különböző verzióját támogatják a specifikációnak, illetve a core CORBA specifikációhoz kapcsolódó egyéb specifikációkból is egymástól eltérő részeket valósítanak meg.

  • Az első, az OMG honlapjáról letölthető verzió a 2.0-s szabvány,[1] ami 1997. február 25-én jelent meg. Ebben a szerveroldalon még Basic Object Adaptert használtak Portable Object Adapter helyett. A szabványnak ez a verziója még tartalmazta az ún. mappingek specifikációit is, amelyek az IDL-nek az egyes konkrét programozási nyelvekre történő leképezését definiálják: a támogatott programozási nyelvek a C, C++ és Smalltalk voltak.
  • A CORBA 2.1[2] többek között kibővítette a szabványt a COBOL és Ada nyelvekre való IDL leképezés specifikálásával.
  • Az 1998-ban megjelent CORBA 2.2[3] bevezette a Portable Object Adapter használatát és az interceptorokat. Ezenfelül ekkor jelent meg a Java nyelv támogatása is a mappingek között.
  • Ugyanezen év végén megjelent a CORBA 2.3[4] is, ami már az érték szerinti objektumátadást is lehetővé tette. A mappingek specifikációja kikerült a core szabványtól és innentől kezdve a CORBA specifikációgyűjteményen belül külön specifikáció lett létrehozva minden egyes támogatott programozási nyelv mappingjéhez.
  • 2000-ben jelent meg a CORBA 2.4,[5] ami tartalmazta a Minimum CORBA és a Real-Time CORBA specifikációkat is.
  • 2001-ben a CORBA 2.5[6] kibővült a Fault-Tolerant CORBA specifikációjával.

Áttekintés szerkesztés

A CORBA objektumorientált megközelítést alkalmaz a hálózati alkalmazások kommunikációjának specifikálására, és ennek megfelelően minden olyan alkalmazást, programot, amely ebben a kommunikációban részt vesz, akár mint egy kérés küldője, akár pedig mint egy kérés címzettje, azt egy absztrakt objektumnak tekint, amiről kezdetben semmi mást nem feltételez, csak hogy valahogy képes kéréseket generálni, illetve feldolgozni. A CORBA intrastruktúrában a kommunikáció távoli metódushívásokként megvalósított kérésekből áll. A kérések küldői, generálói az ún. kliens objektumok a szerver objektumoknak hívják meg valamely metódusát. Ehhez azonban először meg kell találniuk egy olyan szerver objektumot, ami az adott metódust tartalmazó interfészt megvalósítja. A szabvány első verziója nem specifikálta, hogyan kell a kliens objektumoknak szabványos módon megkeresniük a megfelelő szerver objektumokat, ezért erre több különböző, gyártónként különböző megoldást alakítottak a szabvány implementálói. A szabványgyűjtemény újabb verziói már tartalmaznak egy Naming Service specifikációt is (COSNaming), aminek a használatával már legalább részben szabványosítható ez a folyamat is.

A szerveroldali folyamatok szabványosítása egyébként nem is célja a specifikációnak, ez teljesen implementációfüggő, ezzel szemben a szabvány előírja, hogy ennek az implementációnak teljesen transzparensnek kell lennie a kliensek számára, azaz a különböző implementációknak is ugyanazt a külső interfészt kell támogatniuk, illetve ugyanazt a kommunikációs mechanizmust kell megvalósítaniuk. A kommunikáció megvalósítására a szabvány az GIOP, illetve még konkrétabban az IIOP eljárás támogatását írja elő kötelezően.

Az egyes szerveroldali objektumok által támogatott interfész leírására a CORBA szabvány tartalmazza az ún. IDL interfészleíró nyelv specifikációját, ami független a szerveroldal, illetve a kliens megvalósítására alkalmazott konkrét programozási nyelvektől. Éppen ezért szükség van egy további specifikációra, amely a IDL-nek az adott konkrét programozási nyelvekre történő leképezését határozza meg. Ilyen specifikációk léteznek az összes széles körben elterjedt programozási nyelvhez, így például a C++-hoz és a Javához is. Ezzel az architektúrával lehetővé válik, hogy egy C++ nyelven megírt kliens egy Javában megírt szerverrel kommunikáljon.

Az IDL által definiált interfészeket azután le kell fordítani mind a kliens, mind pedig a szerver objektumok által használt programozási nyelvekre. A fordításon túlmenően az interfész segítségével automatikusan generálhatunk további forráskódokat is az adott nyelven. A kliens oldal esetében az ún. csonk (angolul stub) objektumok, illetve ezek kódja generálható, amelyek segítségével a távoli metódust hívó CORBA kliensek elől elrejthető mind a GIOP kommunikáció konkrét megvalósítása, mind pedig a szerverobjektum megtalálásának a megvalósítása. Ezeket a programozási feladatokat a CORBA implementációk automatikusan elvégzik. A szerveroldal esetében ezzel szemben az ún. skeleton objektumok, illetve ezek kódja generálható, amelyek szintén elrejtik a felhasználó elől a GIOP kommunikáció megvalósítását. Azonban a szerveroldali objektumok esetében az így legenerált kód még nem használható, hiszen szükség van az IDL interfész által meghatározott metódusok konkrét megvalósítására, ami már a felhasználók, azaz a CORBA infrastruktúrát használó programozók feladata.

Portable Object Adapter (POA) szerkesztés

A Portable Object Adapter (POA) feladata a virtuális CORBA objektumok (azaz a külvilág számára az IOR-ok, azaz az objektumreferenciák) leképezése, azaz mappingje a megfelelő servant implementáció-, azaz szerveroldali nyelvi alapú objektumok irányába.

A POA számos rendszabály (policy) bevezetésével valósítja meg azt a szerveroldali skálázhatóságot, amellyel a szerveroldal terhelése, valamint erőforrásainak elosztása megoldottá válik.

A POA-k hierarchikus elrendezésűek. Ezt az ORB (Object Request Broker) felé történő hívásokkal valósíthatjuk meg, amikor felinicializáljuk az objektumadapterek faszerkezetű hálózatát, mégpedig valószínűleg a programunk, avagy az osztálykönyvtárunk inicializációja során. A POA-k hierarchiája egyáltalán nem jelent semmiféle OO-szerű öröklést - hiszen ez csupán egy létrehozási (creation-time) hierarchia, amely csupán abban ölt testet, hogy az ORB leállásakor e POA hierarchia a C++ destruktor-hívási sorrendjének megfelelően építi lefelé ezt a struktúrát. Ily módon a POA-k fa-alapú felépítése egyáltalán nem definiál semmiféle OO-szerű öröklést a POA-k policy-jeinek deklarálásakor.

CORBA implementációk szerkesztés

A CORBA specifikációknak léteznek kereskedelmi forgalomban megvásárolható, azaz fizetős és nyílt forráskódú implementációi egyaránt. Ezek azonban a szabvány különböző, általában régebbi verzióit támogatják, illetve a CORBA szabványgyűjteményből sem támogatják az összes lehetséges szabványt, hiszen ezt a szabvány nem is teszi kötelezővé. A szabvány szerint ugyanis a core funkcionalitáson kívül legalább egy mapping, azaz programozási nyelvre való leképezés támogatása van kötelezően előírva a gyártók számára.

Jegyzetek szerkesztés

  1. CORBA 2.0. [2007. szeptember 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2006. november 3.)
  2. CORBA 2.1. [2007. szeptember 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2006. november 3.)
  3. CORBA 2.2. [2004. október 18-i dátummal az eredetiből archiválva]. (Hozzáférés: 2006. november 3.)
  4. CORBA 2.3. [2005. szeptember 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2006. november 3.)
  5. CORBA 2.4. [2004. október 18-i dátummal az eredetiből archiválva]. (Hozzáférés: 2006. november 3.)
  6. CORBA 2.5. [2004. október 18-i dátummal az eredetiből archiválva]. (Hozzáférés: 2006. november 3.)