Delphi - Multi-tier alkalmazásfejlesztés MIDAS komponensekkel

Multi-tier 12. rész

forráskód letöltése
Mostani cikkünk a TSimpleObjectBroker komponens használatának bemutatását tűzi ki célul két példaprogram megvalósításán keresztül. A mellékelt példa könyvtára két példaprogramot tartalmaz, az ObjectBroker.dpr-t és az ObjectBrokerLoadStr.dpr-t. Először lássuk az elsőt:
ObjectBroker.dpr példaprogram

Az előző - az alkalmazásszerverekhez való kapcsolódást szolgáló komponensekről szóló - cikkekben csak megemlítettük ezt a komponenst. Ha az előző példaprogramjainkban leírt komponensek lehetőségeit jobban ki szeretnénk használni hálózatos környezetben, akkor meg kell ismernünk a TSimpleObjectBroker-t is.
Ez a komponens az elérhető alkalmazásszerverek listáját tartja karban, és biztosítja azok elérését a kapcsolódást ellátó komponensek felé. Ha egy kapcsoló komponens (TDCOMConnection, TWEBConnection, TSocketConnection) egy szervert kér, a TSimpleObjectBroker rendelkezésére bocsát egy nevet az elérhető szerverek listájából (TServerCollection osztályból származtatott lista a Servers property-ben). Ez a process lehetővé teszi a kliensalkalmazások számára a szerverrendszerek dinamikus helymeghatározását futásidőben. Ha egyidejűleg több elérhető szerver áll rendelkezésre, akkor kétféle módszer is rendelkezésre áll a szerver kiválasztására a LoadBalanced tulajdonság beállításával:

LoadBalanced tulajdonság:
Ha értékét True-ra állítjuk, a TSimpleObjectBroker a Servers property-ben felsorolt szervernevekből véletlenszerű kiválasztással fogja rendelkezésre bocsátani a szervernevet a kliensalkalmazás számára.
Ha értékét False-ra állítjuk (alapértelmezés), akkor a komponens GetComputerForGUID és GetComputerForProgID metódusai mindig az első elérhető szerver adataival térnek vissza.

Servers tulajdonság:
Az elérhető szerverek listáját tartalmazza (TServerCollection osztály).
A listát úgy tölthetjük ki, ha a Server tulajdonságra kattintunk, majd a mellette található ellipszisgombot megnyomjuk.Ekkor megjelenik egy lista, amibe felvihetjük az új szervereket. Az AddNew gombra kattintva megjelenik egy új listaelem (0 - TServerItem), amelynek a következő tulajdonságait állíthatjuk be:

- ComputerName: Ennek ellipszisgombjára kattintva megjelenik a "Tallózás számítógépek között" (Select Remote Server, távoli szerver kiválasztás) panel, amelyben tallózva kiválaszthatjuk a kívánt számítógépet, amennyiben van telepítve hálózatunk.
Amennyiben a csatlakozó komponens egy TDCOMConnection objektum, a Computername a Windows számítógépnév lesz (megtalálható a Windows Vezérlőpult hálózati beállításainál), ha a kapcsolódó komponens egy TSocketConnection objektum, akkor pedig a ComputerName a szerveralkalmazást futtató gép host-neve vagy IP-címe lesz. (Amennyiben nem hálózaton dolgozunk, akkor a Windows számítógépnevét írjuk be a listába egyetlen szerverként, a TSimpleObjectBroker így is működőképes.)
- Port: Az a port-cím, amelyen keresztül a TCP/IP kapcsolat létrejön. Ennek értéke alapértelmezésben 211, amely a ScktSrvr.exe alapértelmezett portszáma. A szerver eltérő portcíme esetén ezt az értéket a TSimpleObjectBroker GetPortForComputer metódusának visszatérési értéke biztosítja.

- Enabled: True érték esetén a ComputerName-ben meghatározott szerver elérhető lesz az object brokeren keresztül a kapcsolódást ellátó komponens számára.

A TSimpleObjectBroker fontosabb metódusai:

A fentebb leírt tulajdonságoknál már említettük a TSimpleObjectBroker néhány metódusát, most lássuk ezek leírását kicsit bővebben:

GetComputerForGUID:
Egy sztringgel tér vissza, ami azonosít egy elérhető szervergépet. Ha a LoadBalanced property-t True-ra állítottuk, akkor a szerver kiválasztása véletlenszerűen történik az elérhető szerverek listájából, ha False-ra, akkor az első elérhető szerver neve a visszatérési érték.
Példaprogramunkban a metódust a GetComputerForGUID-feliratú gomb (Button1) OnClick eseménykezelőjében (TForm1.Button1Click) kódoltuk le. Az alkalmazásszerver GUID-jét a legutóbbi példaprogramunk (10.cikk) szerveralkalmazás Szerver_tlb típuskönyvtára PeldaSzerver attribútumának Szerver attribútumának GUID-jéből másoltuk át az eseménykezelő konstansdeklarációjába (ID_Srvr konstans; ehhez a 10.cikk szerverének regisztrálva kell lennie rendszerünkben).
A gombot megnyomva az Edit1-ben megjelenik a megadott GUID-ű szerveralkalmazást futtató gép neve (amennyiben a GUID-et pontosan másoltuk át, ezt mindenki ellenőrizze a maga rendszerén!).

GetComputerForProgID:
Ennél a metódusnál minden ugyanúgy működik, mint a GetComputerForGUID-nél. Egyedüli különbség, hogy itt a metódushívás paramétereként a fent említett szerveralkalmazás típuskönyvtárából a PeldaSzerver atribútum GUID-jét adtuk át konstansként a paraméterként szolgáló ProID-nek.
(A ProgId tulajdonképpen egy class factory-ból (TComObjectFactory) származtatott objektumot azonosít. Ezeket az objektumokat a COM-szerverek automatikusan állítják elő. Példaszerverünkön ez a PeldaSzerver nevű - CoClass osztályból származtatott - objektum. A CoClass osztály egy olyan osztály, amely a COM-interfészek implementációját tartalmazza, amit esetünkben a példaszerverünk Szerver_tlb típuskönyvtárának Implements tab-ja kiválasztásával tekinthetünk meg.)

GetPortForComputer:
A paraméterként megadott host-névvel vagy IP-címmel specifikált számítógép portszámával tér vissza. Ezt a metódust a Button3 gomb OnClick eseménykezelőjében (TForm1.Button3Click) kódoltuk le. A Button3 Enabled tulajdonságát tervezéskor False-ra állítottuk, True értéket akkor kap a futás során, ha a másik két gomb valamelyikét megnyomtuk, mert a Button1 és Button2 eseménykezelőiben lévő kódok szolgáltatják a CompName public változó értékét, amely ennek a metódusnak a hívási paramétereként szolgál. A Button3 megnyomásával az Edit3 mezőben kiírásra kerül az előző két metódus valamelyikének meghívása által értéket kapott CompName public változóban szereplő számítógépnév által specifikált gép portszáma.

SaveToStream, LoadFromStream:
A SaveToStream metódus meghívásával az elérhető szerverek listáját (és azok tulajdonságait) lementhetjük egy stream-be (TStream osztály), amit később visszatölthetünk a LoadFromStream metódus segítségével.
Az eddig tárgyalt ObjectBroker.dpr példaprogramunk Form-jának FormActivate eseményének kezelőjében lekódoltuk a stream-be mentést.

A szerverek listájának stream-ből történő visszatöltésének bemutatásához találunk a könyvtárunkban egy másik alkalmazást, az ObjectBrokerLoadStr.dpr-t. Most lássuk ezt röviden:

ObjectBrokerLoadStr.dpr példaprogram

Ez a példaalkalmazás annyiban tér el az előzőtől, hogy itt a SimpleObjectBroker1 Servers tulajdonságánál nem töltöttük ki a szerverek listáját, hanem a Form aktivizálásakor (TForm1.FormActivate) az eseménykezelőbe írt kód tölti be azt az előző példaprogram által stream-be kiírt "Servers"-nevű fájlból.
A program működése egyébként - e kivételtől eltekintve - teljesen megegyezik az előzővel.


Multi-tier cikksorozat