Készletgazdálkodás DCOM alapon, avagy hogyan készítsünk vezérlőpultot egy szerviz alkalmazásnak
Az elosztott rendszerek programozásakor DCOM fejlesztést tanultam. Ennek egy mintapéldája az adatbázis nélkül, objektum orientáltan működő készletgazdálkodási rendszer, ami egy központi szerver és a hozzá kapcsolódó kliens programokból áll. A szerver feladata a készlet nyilvántartása, negatív készlet esetén a kliensek értesítése. A kliensek lehetősége, hogy növelhetik vagy csökkenthetik a készletet, és negatív készlet eseményeket fogadhatnak. A szerver regisztrációja a szerveren és a kliens gépeken a következő parancs futtatásával lehetséges:
keszletezo.exe /regserver
A szerver regisztrációjának megszüntetése pedig a
keszletezo.exe /unregserver
parancs kiadásával. Az esemény kezelő osztály regisztrációjához a kliens osztályt is regisztrálni kell a szerveren. Ehhez a
KliensKeszletezo.exe /regserver
parancsot is ki kell adni a szerver gépen a kliens gépek megosztott könyvtáraiban. Fontos, hogy a kliens gépeken a szerveren megosztott könyvtárba található szerver programot regisztráljuk, és ugyan azzal a felhasználónév/jelszó párossal létezzen egy fiók a kliens gépeken, mint a szerveren a regisztrációkor kapcsolódott felhasználó. Ez utóbbi a negatív készlet esemény kezeléséhez szükséges.
A szerver egy Automation Object, ami több klienst képes kiszolgálni (Multiple Instance), szálbiztos módon (Apartment thread model). Létrehozásakor a Generate Event support code jelölő négyzetet bekapcsoltam. Az esemény objektum szintén Automotion Object. Kliens oldalon az alábbi kódrészlettel kapcsolom össze ezeket.
server:=CreateOleObject('Keszletezo.Keszletezo'); Event:=CoCEventObj.Create; InterfaceConnect(server,IID_ICEventObj,Event,ConnID);
Szétkapcsoláskor pedig az InterfaceDisconnect függvényt hívom.
InterfaceDisconnect(server,IID_ICEventObj,ConnID); Event:=nil; server:=UnAssigned;
Nézzd meg, hogyan kapcsolódik a szerver és a kliensek a registry-ben. A Keszletezo.tbl fájban az IKeszletezoEvents DispInterface UUID értéke megegyezik a KliensKeszletezo.tlb fájlban található ICEventObj Interface UUID értékével. Ezt Delphi-ben a megfelelő ..._TLB.pas szerkesztésekor az Interface és DispInterface GUID értékek módosításával érhetjük el.
A szerver távoli gépen futtatásához szerkesszük a dcomcnfg alkalmazással a szerver komponens futási körülményeit. Ugyanilyen elven könnyen készíthetünk vezérlőfelületet egy szolgáltatáshoz. A szolgáltatás mint kliens kapcsolódik a szerverként működő vezérlőpulthoz, és a vezérlőpulton végzett műveleteket eseményként visszavezethetjük az összes kapcsolódott kliensre, többek között a feliratkozott szervizre is.
(Delphi 5)
- A hozzászóláshoz be kell jelentkezni