Komponens modellek 3. Előadás (első fele)
A komponens modellek feladata • Támogassa a szoftverrendszerek felépítését különböző funkcionális, logikai komponensekből, amelyek a számítógépes hálózatban különböző csomópontokban (nodes) helyezkedhetnek el. • A komponens alapú szoftverfejlesztést tehát a hardver és a szoftver oldaláról is támogatni kell. Az alapszoftver oldaláról a támogatás egyik fontos eleme az úgynevezett köztes réteg (middleware).
Köztes réteg (middleware) • Valahol az operációs rendszer és az alkalmazások között helyezkedik el, azokhoz hasonló szolgáltatásokat nyújt:
• Futtató környezetet biztosít • Tipikus operációsrendszer funkciókat nyújt • Összeköttetés operációsrendszer és a programozási nyelv között • Egy operációsrendszert és egy programozási nyelvet támogat • Futtatható kód előállítása kódgenerátorral • Komponensek kézi létrehozásának fontossága csökken, egymástól függetlenül fejlesztik a komponenseket.
• A komponenek lehetnek azonos hálózati végpontban vagy különbözőekben • A távoli komponensek együttműködésének megvalósítása „távoli eljáráshívásokkal” (RPC) • Valamilyen RPC minden modern komponens platformban megtalálható • A köztes rétegre épülnek rá az objektum modellek.
Komponens modellek • Object Management Group (OMG) – CORBA
• Microsoft – COM/DCOM
• Sun Microsystems – EJB
CORBA • Common Request Broker Architekture • Az első kísérlet egy objektum modell definiálására • OMG 1991 • Főbb részei: – Object Request Broker (ORB) • A CORBA „szíve”, felelős a komponensek közötti kapcsolat létrehozásáért és fenntartásáért.
– Interfészek leírása Interface Definition Language IDL nyelven • Hordozható, programozási nyelvtől és operációs rendszertől független nyelv. – IDL – célnyelvi fordítók
Object Request Broker (ORB) • Elfedi a különböző címtartományok közötti kommunikációt – Az ORB felügyelete mellett a komponensek úgy létesítenek egymással kapcsolatot, mintha mindannyian egyetlen címtartományban léteznének. – Az ORB több összetevőből áll a kliens és szerveroldalon
• Kliensoldalon – A kliens IDL kapcsolódási csonkok (Client IDL Stubs) biztosítják a kliensoldal statikus felületeit a CORBA komponens eléréséhez. • A távoli komponens helyi képviselője, proxy, amely a hozzá intézett hívásokat továbbítja a távoli szolgáltatóhoz. • Gondoskodik a paraméterek átirányításáról a szerver felé, ez az ún. marshaling.
– Az ORB felület (ORB interface) néhány hasznos helyi szolgáltatást nyújt a CORBA felhasználóinak: • Komponenshivatkozások karakterlánccá konvertálása, stb.
– A dinamikus hívási felület ( Dynamic Invocation Interface – DII ) segítségével olyan dinamikus komponenseket készíthetünk, amelyek futás alatt derítik fel a szerveroldali komponensek metódusait, és hívják meg azokat. • A DII nagyobb rugalmasságot ad futási időben, a statikus jellegű IDL csonk viszont támogatja a fordításidejű típusellenőrzést
– Az Interfész-szótár programozói felület (Iterface Repository API) futásidejű hozzáférést biztosít az interfész-szótárhoz, amely az IDL definíciók feldolgozott formáit tartalmazza. • A CORBA 2.0 esetén ORB globális azonosítókat (Repository ID) is tartalmaz, amelyek a komponenseket és interfészüket egyedileg azonosítja.
• Szerveroldalon – A szerver IDL kapcsolódási felület (Server IDL Stub) a szerver oldali komponensek által nyújtott statikus szolgáltatásokat definiálja. Ennek a vázát (skeleton) is az IDL fordító generálja. – A dinamikus kapcsolódási felület (Dynamic Skeleton Interface – DSI) a kliens oldali dinamikus hívási felület (DII) párja. Futási időben csatlakozási információt szolgáltat azokról a szerveroldali komponensekről, amelyeknek nincs IDL által definiált statikus csonkja. A DSI a bejövő üzenet paramétereiből határozza meg a komponenst és annak szolgáltatását (metódusát).
• Az objektumadapter (Object Adapter) az előző két felület implementációjához szükséges, de önállóan is használható. – Ez a futtatási környezet: • Objektumreferenciák, • Implementációs szótár kezelése.
– Minden ORB legalább egy adaptert támogat • Basic Object Adapter (BOA)
– AZ implementációs szótár (Implementation Repository) • a megvalósított szerveroldali osztályok leírását tartalmazza • Számon tartja, hogy mely objektumokat példányosították, hogyan lehet azokat azonosítani.
– Az ORB felület, amely a kliensoldali megfelelő a szerver oldalán.
Interface Definition Language (IDL) • A CORBA erősen objektum elvű rendszer – A szerverkomponensek osztályként definiálhatók, jellemzői: • Öröklődés • Kivételkezelés • Adatelrejtés (encapsulation).
• Az osztályok definiálására az IDL nyelvet használjuk – Hordozható – Programozási nyelvtől és operációs rendszertől független deklaratív nyelv, amely tehát procedurális elemeket nem tartalmaz, de támogatja • • • • •
Típusok Konstansok Adatelemek Metódusok Kivételek deklarációját.
• AZ IDL nyelven leírt interfészekből az IDL-fordító készít konkrét nyelvű kódot (pl. Java), amelyet ki kell egészíteni a metódusok szintén konkrét nyelvű megvalósításával. • Az IDL nyelv vázlatos szerkezete megtalálható például a – Java 2 Útikalauz programozóknak című könyvben (szerk. Nyékyné Gaizler Judit, ELTE TTK Hallgatói Alapítvány, Budapest, 1999.)
IDL – célnyelvi fordítók • Az IDL – Java fordító – Inputja: IDL nyelvű interfész leírás – Outputja: Java kódú program – A fordító működését a JAVA 2 tankönyv 22.3 fejezetében megtalálhatják. – Egy egyszerű, de hasznos példát találnak a CORBA használatára a fenti könyv 22.4. fejezetében. • A példában olyan objektumcsoportot kívánunk létrehozni, amelyeknek a példányai más-más szerveren helyezkednek el. • A fenti példában a kliens és a szerver a CORBA névszolgáltatásán (Naming Service) keresztül találtak egymásra.
COM/DCOM • Component Object Model - COM – A Microsoft első komponens modellje (‘93)
• COM+ – COM bővítése: tranzakciók, aszinkron üzenetek, klaszterezés kezeléseinek eszközeivel.
• Distributed COM – DCOM – A COM elosztott kiterjesztése – A DCOM kliens képes egy DCOM szerverrel kommunikálni – kliens helyettesek és szerver csonkok segítségével.
• A CORBA és a DCOM szolgáltatásai egyre jobban közelítenek egymáshoz, de az eszközrendszerükre ez nem igaz.
JavaBeans - EJB • A Java komponens modelljei – Röviden bemutatjuk a JavaBeans modellt a mai előadásban – Az EJB modell lényegét a J2EE architektúra részeként tárgyaljuk meg.
JavaBeans • A Java legegyszerűbb komponens modellje. – Első közelítésben egy JavaBean olyan újra felhasználható szoftver komponens, amely egy fejlesztő környezetben vizuálisan manipulálható.
• A JavaBeans komponens modellben – Egy komponensnek többféle, egymástól független implementációja lehet. – Egy adott komponensből több példány is létrehozható a különböző alkalmazások számára testre szabva. – A komponensek konténerek elemei lehetnek. – Egy komponens lehet konténer és ő is tartalmazhat más komponenseket. – A komponensek közötti kommunikáció és kapcsolat eseménykezeléssel és metódusok hívásával történik.
• A JavaBeans komponens modell támogatja a hierarchikus szoftverfejlesztést, ahol egyszerűbb komponensekből bonyolultabbakat tudunk létrehozni a konténerek segítségével. • Felhasználhatjuk a vizuális fejlesztő eszközök nyújtotta szolgáltatásokat. • A beanek fejlesztését megkönnyíti a Sun által kifejlesztett BeanBox fejlesztő környezet. • A JavaBeans modell támogatja a beanek testre szabását tulajdonságlisták alapján, amelyek a képernyőn megjeleníthetők.
EJB - Enterprise Java Bean • Szerver oldali elosztott komponens modell • Funkcionalitása szerint több fajtája van: – Session Bean – Enterprise Bean – MessageDriven Bean
• Futtatásukhoz alkalmazásszerver (EJB konténer szükséges) • Kontraktus az EJB és a konténer között: – interfészek halmaza – telepítési leírók
Java2EE
Egy architektúra komponens alapú, többrétegű vállalati alkalmazások fejlesztésére J2EE architektúra:
Összefoglalás • A komponens modell a komponens alapú szoftverfejlesztés egyik központi fogalma. • A komponens modellek fontos szerepet játszanak az alkalmazásfejlesztés menetében az alkalmazott architektúra és a fejlesztési platform szempontjából.