Kockadobás kliens-szerver alkalmazás

Fejlesszünk elosztott, hálózatos, datagram alapú üzenetküldéssel megvalósított Java alkalmazást!

A kockadobás kliens egyszerre két szabályos dobókockával dob, amit ezerszer megismétel és a dobott számok összegét datagram típusú üzenetküldéssel folyamatosan elküldi a szervernek. A szerver localhost-on fut és egy megadott porton keresztül várja a klienstől. A szerver és a kliens egyaránt szálkezelést alkalmazó konzolos alkalmazás.

A projektben van egy swing GUI-s alkalmazás, amely JFreeChart oszlopdiagramon – folyamatosan frissítve – megjeleníti az összesített adatokat, mindez a szerver üzenetküldésével irányítva (amint beérkezik egy dobott (2-12-ig) összeg).

A kommunikációnak – a lehetőségekhez képes – biztonságosnak és – a hálózati adatforgalmat tekintve – takarékosnak kell lennie! Ennek részeként szükséges egy azonosító és egy egyszerű szabály (protokoll).

Tekintsük át mondatszerűen a szálkezelést használó kliens és szerver kommunikációhoz kötődő feladatait:

Ezek működését összefogja egy központi vezérlőosztály és ez a fejlesztőeszköz projektablakában így jelenik meg (egyetlen MVC Java projektként):

A program két felületen kommunikál. A háttérben konzolosan logol a kliens, és a háttérben futó szerver időnként frissítteti a grafikus felhasználói felületen (GUI, ablak) megjelenő grafikont:

Kockadobás - Java kliens-szerver alkalmazás működésa

Aki kedvet kapott: bátran készítse el a fenti terv/koncepció/specifikáció alapján az MVC Java projektet. Érdemes alaposan tesztelni: külön a szervert, külön a klienst, először indítva az egyiket, majd a másikat, leállítani az egyiket majd fordítva. Átgondoltan indokolni is hasznos, vajon mi, hogyan és miért történik.

A bejegyzéshez tartozó forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A feladat a Java EE szoftverfejlesztő tanfolyam 1-8. óra: Elosztott alkalmazások, webszolgáltatások, szálkezelés, párhuzamosság alkalmához kapcsolódik. Amikor itt járunk a tananyagban, akkor a GUI felület és a grafikon tervezése, megvalósítása már magabiztosan megy, így elegendő a hálózati kommunikációra helyezni a fókuszt.

MAFIOK 2023

A Matematikát, Fizikát és Informatikát Oktatók 44. Országos Konferenciája (MAFIOK 2023) a Neumann év keretében a Neumann János Egyetem GAMF Műszaki és Informatikai Karán, Kecskeméten került megrendezésre 2023. augusztus 23-25-ig.

A konferencia céljai

A rendezvény elsődleges célja annak elősegítése, hogy a felsőoktatási intézmények oktatói és kutatói a matematika, a fizika, az informatika és a logisztika korszerű és hatékony oktatásáról és tudományos eredményeiről előadások, poszter-bemutatók és személyes találkozás révén tapasztalatot cserélhessenek, valamint kapcsolatot építhessenek mind a hazai kollégákkal, mind a környező országok magyar ajkú oktatóival. A rendezvény célja továbbá, hogy fórumot adjunk PhD hallgatók eredményeinek bemutatására.

A konferencia tervezett főbb témakörei

  • a korszerű matematika-, fizika-, logisztika- és informatikatanítás és tanulás új útjai és távlatai, oktatásfejlesztési tapasztalatai,
  • a felsőoktatás alapozó tárgyainak oktatás-módszertani problémái,
  • mesterképzésbe való bekapcsolódás, a duális képzés gondjai és tapasztalatai,
  • matematika, fizika, informatika, logisztika tudományos eredményei,
  • új és innovatív kutatási irányok, problémák és gyakorlati alkalmazások bemutatása a fenti tudományterületeken.

A konferencia programja

A letölthető absztraktkötet tartalmazza a program- és szervezőbizottság által összeállított szakmai programot. A szerdai 5 plenáris előadást este bűvészprogram követte. Csütörtökön párhuzamos szekciókat tartottak: Matematika, Matematika oktatása, Fizika, Informatika, Logisztika, valamint poszterbemutató, mindezek után szakmai kirándulás volt Lakitelken a Hungarikum Ligetben planetáriumi bemutatóval, borkóstolóval, vacsorával. Pénteken a Matematika, Informatika szekciók után a konferenciát 2 plenáris előadás zárta. 20-nál több intézményből 100-nál több előadó regisztrált a rendezvényre.

Részt vettünk a konferencián

2023-ban két szakmai előadást tartottunk, 20-20 percben, a csütörtöki Informatika szekcióban.

Szakmai cikkeink a Gradus lektorált, online folyóiratban fognak megjelenni (ISSN 2064-8014), amely eredeti publikációkat közöl számos témakörben, beleértve a természettudományok minden területét, mindenféle műszaki tudományt, számítástechnikát, kertészetet, környezetmérnökséget, pedagógiát, didaktikát és közgazdaságtant. A számítástechnika és a matematika elméleti és alkalmazott területeit is befogadja. A folyóirat csak kutatási cikkeket közöl, és minden cikk az esettanulmányok, kísérletek, vagy a gyakorlatban már alkalmazott megközelítésekkel való szisztematikus összehasonlítások révén előrehaladó ötletek gyakorlati alkalmazását tárgyalja.

Szakmai előadásaink összefoglalói

Kaczur Sándor, Friedel Attila – Hogyan érdemes nagy tömegű adatot importálni Microsoft .NET Framework platformon?

Üzleti alkalmazások fejlesztésénél elengedhetetlen alkotóelem az adatok kezelése, tárolása. Ezt leggyakrabban valamilyen relációs adatbázis-kezelővel valósítják meg a fejlesztők. A hétköznapi munka során gyakran előforduló feladat külső forrásból történő adatok átvétele, aktualizálása. A cikk szerzői arra a kérdésre keresik a választ, hogy hogyan érdemes ezen (néha igen tetemes mennyiségű) adatokat minél gyorsabban átvenni. A bemutatásra kerülő esettanulmány Microsoft .NET Framework segítségével, a platform által kínált adatbázis-kezelési lehetőségek közül válogat. A cikk összehasonlítja a nyelvben már régóta jelen lévő alacsony szintű SQL parancsokkal végzett megvalósítást a később beépített, de szintén elterjedt objektumrelációs modell keretrendszerrel (azaz az Entity Framework-kel) történő megvalósítással, majd elemzi a kapott eredményeket.

Kaczur Sándor, Kiss Balázs – Alkalmazottak életpálya modellje – Java és SQL esettanulmány az Oracle HR sémára építve

Az objektumorientált programozás oktatásának része olyan kliensprogramok tervezése, kódolása és tesztelése, amelyek képesek adatbázishoz csatlakozni. A belépő szint csupán lekérdezés, adatok megjelenítése űrlapokon, táblázatos komponensekben, vagy grafikonokon. Haladó szinten már szükséges az adatok karbantartása is, illetve konzolos, asztali alkalmazásokról át lehet térni webes és mobil platformokra is. A szerzők cikke ebből az útból emel ki egy esettanulmányt, amely Java és SQL nyelveken készült és MVC architekturális tervezési mintát használ. A felhasznált mintaadatok az Oracle HR sémából származnak. Az elemzés betekintést nyújt a modellalkotás lehetőségeibe – többféle megközelítést alkalmazva, elvi és konkrét szinten is.

Az előadásaink témája a Java adatbázis-kezelős tanfolyam szakmai moduljához és orientáló moduljához is kapcsolódik. Az előadásaink prezentációit ILIAS e-learning tananyagban tettük elérhetővé tanfolyamaink résztvevői számára.

Korábbi MAFIOK előadásaink, cikkeink, posztereink

  • Kaczur S.: Az OracleHRJSP webalkalmazás működése, Matematikát, fizikát és informatikát oktatók (MAFIOK) XXXVIII. országos konferenciája, Pécs, Pécsi Tudományegyetem Pollack Mihály Műszaki és Informatikai Kar, 2014, ISBN 978-963-7298-55-4, p. 121-126 (magyar nyelvű szakcikk)
  • Kaczur, S.: A Gábor Dénes Tehetségpont programozáshoz kötődő diákműhelyei, Matematikát, fizikát és informatikát oktatók (MAFIOK) XXXVIII. országos konferenciája, Pécs, Pécsi Tudományegyetem Pollack Mihály Műszaki és Informatikai Kar, 2014. augusztus 25-27. (poszter hazai konferencián)
  • Kaczur, S.; Lengyel, B. I. (előadó: Kaczur, S.): A csomópont kiválasztás algoritmus működését bemutató oktatóprogram PLNC adatátvitel esetén, Matematikát, fizikát és informatikát oktatók (MAFIOK) XXXVIII. országos konferenciája, Pécs, Pécsi Tudományegyetem Pollack Mihály Műszaki és Informatikai Kar, 2014. augusztus 25-27. (poszter hazai konferencián)
  • Kaczur, S.: Nyílt forráskódú EKG analizáló algoritmusok hatékonysága (Signal analysis), Matematikát, fizikát és informatikát oktatók XXXVI. országos konferenciája (MAFIOK), Gyöngyös, Károly Róbert Főiskola, 2012. augusztus 27-29. (előadás hazai konferencián)
  • Kaczur, S.; Fintor, K.: Szerkezetföldtani oktatóprogram, vetőmenti elmozdulások modellezésére, Perspective, XV. évfolyam különszám, Szent István Egyetem Gazdasági Kar, 2011, ISSN 1454-9921, p. 215-222 (magyar nyelvű szakcikk)
  • Fintor, K.; Kaczur, S.: Vetőmozgások 3D-s szimulációjának alkalmazása a földtudományi képzésben, Perspective, XV. évfolyam különszám, Szent István Egyetem Gazdasági Kar, 2011, ISSN 1454-9921, p. 208-204 (magyar nyelvű szakcikk)
  • Kaczur, S.; Fintor, K. (előadó: Kaczur, S.): Szerkezetföldtani oktatóprogram, vetőmenti elmozdulások modellezésére, Matematikát, fizikát és informatikát oktatók XXXIV. konferenciája (MAFIOK), Békéscsaba, Szent István Egyetem Gazdasági Kar, 2010. augusztus 24-26. (előadás hazai konferencián)
  • Fintor, K.; Kaczur, S. (előadó: Fintor, K.): Vetőmozgások 3D-s szimulációjának alkalmazása a földtudományi képzésben, Matematikát, fizikát és informatikát oktatók XXXIV. konferenciája (MAFIOK), Békéscsaba, Szent István Egyetem Gazdasági Kar, 2010. augusztus 24-26. (előadás hazai konferencián)
  • S. Kaczur; S. Kopácsi: Practical application of coordinate and dot transformations, A GAMF Közleményei, Kecskemét, XXIII. évf., 2008, HU ISSN 1587-4400, p. 121-126 (idegen nyelvű szakcikk)
  • Kaczur, S.; Kopácsi, S. (előadó: Kaczur, S.): Koordináta- és ponttranszformációk alkalmazása a gyakorlatban, Felsőfokú alapképzésben matematikát, fizikát és informatikát oktatók XXXII. Konferenciája (MAFIOK), Kecskemét, Kecskeméti Főiskola, 2008. augusztus 25-27. (előadás hazai konferencián)

Tankocka – Legyen Ön is milliomos! – Programozás Java nyelven

Utolsó megosztott tankockánkkal lezárjuk a 12 részes Tankockák blog bejegyzés sorozatunkat.

A Legyen Ön is milliomos! típusú tankocka mindig 6 db, egyre nehezedő kérdést tesz fel. Egy kérdés mindig 4 válaszlehetőséget tartalmaz és ezek közül mindig egy és csak egy lehet a helyes válasz. A kérdésbank nehézségi szintek alapján csoportosított: egészen könnyű (500), nagyon könnyű (1’000), közepes nehézségű (5’000), mérsékelten nehéz (50’000), kicsit nehéz (250’000), nagyon nehéz (1’000’000). A kérdésbank 60 db kérdést tartalmaz. A játék azonnal véget ér az első hibás válasznál, és ekkor újra is kezdhető. A szakmai tartalom a korábban elkészült 11 tankockára épít és rendszerező, szintetizáló jellegű ismétlés, kötődik két tanfolyamunk tematikájához: Java SE szoftverfejlesztő tanfolyam és Java EE szoftverfejlesztő tanfolyam.

Tartalmas időtöltést kívánok! Tessék bátran gyakorolni!

Aki mindegyik nagyon nehéz kérdésre tudja a választ és ezt a megkapott LearningApps kóddal igazolni tudja, az kap egy it-tanfolyam.hu logós csokoládét, amit bármelyik következő rendezvényünkön átvehet: Digitális Témahét, Kutatók éjszakája, Programozási Hét – CodeWeek.eu.

Letöltés szimuláció

letöltés logó

letöltés logóLetöltési folyamatot szimulálunk. A paraméterek rugalmasan beállíthatóak. Előre beállított mennyiségű adatot, párhuzamos szálakon/folyamatokon keresztül töltünk le, miközben mérjük az eltelt időt. A folyamatok állapota lehet inaktív, aktív és befejezett. Az aktív folyamatok esetében megjelenő százalék fejezi ki, hogy a folyamat hol tart a rá jutó részfeladat végrehajtásával. Összesített formában követhetjük a hiányzó és a letöltött adat mennyiségét MB-onként és százalékosan is. A folyamat szimulációjához grafikus felületű Java kliensprogram készült, egyszerű GUI komponensekkel (nyomógomb, címke, folyamatindikátor, másképpen JButton, JLabel, JProgressBar swing komponensek).

Az alábbi animáció bemutatja a letöltés szimulációját:

letölés szimuláció

A konkrét paraméterek: 128 MB-nyi adatot töltünk le 256 párhuzamos szálon/folyamaton keresztül, így egy-egy részfeladat 0,5 MB-nyi adat letöltését jelenti. Minden értéket/mérőszámot egész számként ábrázolunk, akár százalékhoz tartozik, akár mértékegységként MB vagy s. A változások – és egyben a frissítés is – 5 ezredmásodpercként történnek a GUI-n.

A Java SE szoftverfejlesztő tanfolyamunkon, a szakmai modul Objektumorientált programozás témakörét követő 29-36. óra Grafikus felhasználói felület alkalmain már tudunk egyszerűbb szimulációs programot tervezni, kódolni, tesztelni. A Java EE szoftverfejlesztő tanfolyamunkon, a szakmai modul 5-8. óra Szálkezelés, párhuzamosság alkalommal többféle elosztott stratégiát ismertetünk, és a 17-24. óra Socket és RMI alapú kommunikáció alkalommal pedig megvalósíthatjuk többféle protokoll szerint a hálózati kapcsolatot, letöltést/feltöltést.

Elosztott alkalmazások esetén többféleképpen is modellezhető és kialakítható a rendszer architektúrája. Elosztott lehet maga a hálózat, a számítási folyamat, az algoritmus. Elosztott objektumok kommunikálhatnak egyenrangúnak tekinthető P2P szerepkörben vagy szerver/kliens oldalon, és több dolog/elem/hardver/szoftver/komponens együttműködéseként is megvalósulhat elosztott alkalmazás. A hálózati kommunikáció folyamatát valamilyen protokoll határozza meg, amit minden komponens ismer és így meghatározott szabályrendszer szerint működik.

Hardver szinten elosztottak a többprocesszoros rendszerek. Szoftveresen elosztott például egy moduláris vállalatirányítási rendszer, illetve a mobilalkalmazások többsége. Tipikus háromrétegű webalkalmazás esetén külön szerver nyújtja az adatbázishoz kapcsolódó szolgáltatásokat, a felhasználó számítógépén található a böngészőben futó/megjelenő kliensprogram/weboldal és a kettő között a felhő rétegben lehet a funkcionálisan elosztott alkalmazáslogika (például validálás, titkosítás, tömörítés, autentikáció, autorizáció).

A vezérlést megvalósító részlet a Java forráskódból:

 A szimuláció elvi szinten:

  • a folyamatok generikus listában vannak,
  • időzítő által meghatározottan, gyorsan és ismétlődve történnek az időzített lépések,
  • ha egy folyamat befejeződik, akkor kikerül a generikus listából,
  • ha a folyamatok generikus listája kiürült, akkor vége a szimulációnak,
  • ki kell választani véletlenszerűen egy folyamatot, léptetni kell véletlenszerűen, amíg be nem fejeződik,
  • folyamatosan nyilván kell tartani a szükséges adatokat a háttérben,
  • folyamatosan frissíteni kell a felhasználói felületet.

Haladóbb megközelítésben másképp is lehetne: a számítási műveletek redukálhatóak lennének, ha lenne egy – minden olyan adat karbantartásáért felelős – modellobjektum, amelynek adatai hozzá lennének rendelve a GUI komponensekhez. Aki már sejti, annak megerősítem, hogy igen, ez observer (megfigyelő) tervezési minta.

A feladat könnyen általánosítható, például:

  • Egy keresési feladatot oldjunk meg az állományrendszerben! Kereshetünk egy konkrét nevű fájlt, adott kiterjesztésű fájlt, joker karakterekkel paraméterezett nevű fájlt/mappát, adott méretű állományt, adott dátum előtt létrehozott fájlt… Az állományrendszer bejárása rekurzív módon történik. A gyökérben lévő mappánként külön, esetleg második szinten lévő mappánként külön indíthatók szálak, párhuzamos folyamatok. Ha egyetlen találat elegendő, akkor bármelyik szál pozitív visszajelzésére minden szál leállítható. A feladatnál nagy eséllyel nagyon különböző méretű mappákon és eltérő mélységű mappaszerkezeteken kell végighaladni, így erre érdemes lehet optimalizálni, de ez már nagyon más szintje ennek a problémának.
  • Active Directory szerkezetben keressünk elérhető nyomtatókat a hálózaton!
  • Elosztott számítási hálózatként működik/működött a SETI@home. Koncepciójának lényege, hogy egy hatalmas feladatot nem nagyon drága szuperszámítógépeken, hanem olcsó gépek ezrein, százezrein, vagy akár millióin végeztetjük el, amelyek jelentős szabad kapacitással (pl. processzoridővel, átmeneti tárhellyel) rendelkeznek és egyébként is csatlakoznak a világhálóra.
  • Hasonlóan elosztott működésű a torrent protokoll. A kliensek/szálak az állományokat több kisebb darabban/szeletben töltik le, természetesen párhuzamosítva. Minden csomópont megkeresi a hiányzó részhez a lehető leggyorsabb kapcsolatot, miközben saját maga is letöltésre kínálja fel a már letöltött fájldarabokat. A módszer nagyon jól beválik nagyméretű fájloknál, például videók esetében. Minél népszerűbb/keresettebb egy fájl, annál többen vesznek részt az elosztásában, ezáltal a letöltési folyamat gyorsabb, mintha mindenki egy központi szerverről töltené le ugyanazt (hiszen az informatikában minden korlátos, a sávszélesség is).
  • A képtömörítést végző algoritmusok is lehetnek elosztottak, ezáltal párhuzamosíthatóak. Például ha felosztjuk a képet 16*16-os méretű egymást nem átfedő részekre, akkor ezek egymástól függetlenül tömöríthetők.
  • A merevlemezek esetén korábban használatos defragmentáló szoftverek felhasználói felülete emlékeztet a mintafeladat ablakára.

Fontos szem előtt tartani, hogy a grafikus megjelenítés csupán a szimulációhoz tartozó – annak megértéséhez szükséges – reprezentáció, így teljesen független lehet a folyamatok valós működésétől.

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

Egy példányban futó Java program

egy

egyGyakran észrevesszük, hogy a programok futtatásakor vannak bizonyos korlátok. Például egyszerre általában csak egyetlen telepítőprogram futhat egy operációs rendszeren. Vagy amíg fut egy program korábbi verziójának eltávolítása, addig nem futhat a program új verziójának telepítője. Vagy egy nagyobb erőforrás igényű program (periféria meghajtó program, képernyő videó+hang rögzítő, hardveres gyorsítást használó játékprogram) egyszerre csak egy példányban indítható el. Előfordulhat kategóriánkénti korlát is, például a különböző víruskereső programok általában „nem tűrik meg” egymást, kizárólagosságot „követelnek”.

Lássunk példát arra, hogyan kell készíteni egy példányban futó Java programot!

Néhány dolgot át kell gondolni:

  • Amikor először indítjuk el a programot, akkor olyan egyedi dolgot kell beállítani, ami mindvégig úgy marad, amíg a program fut. Ezt megtehetjük a memóriában, de megfelelő jogosultsággal futtatva a programot akár beleírhatunk a Windows rendszerleíró adatbázisába (Registry) is. Előbbi módszer platformfüggetlen lenne – ahogyan egy Java programhoz illik –, és az utóbbi megoldás pedig operációs rendszertől függne.
  • Amikor többedszer (második, harmadik… példányban) indítjuk el a programot, akkor ezt az egyedi dolgot észlelni kell és meg kell akadályozni a program másodszori, harmadszori elindítását. Hasznos, ha ezekben az esetekben kapunk hibaüzenetet, például: „This application is already running”.
  • Amikor a programot szabályosan állítjuk le, akkor a korábban beállított egyedi dolgot semmissé kell tenni. Ez biztosítja, hogy a program egymás után – egymással nem párhuzamosan, egymástól függetlenül – elindítható lesz.

A megoldás két részből áll. Ez a Java forráskód első része:

A program indulásakor le kell futni a fenti forráskódnak. A static blokk a konstruktor előtt hajtódik végre (például a modell vagy a nézet rétegben). A java.net csomag kötetlen ServerSocket osztályú ss nevű objektumát kell inicializálni helyben ( InetAddress.getLocalHost()) egy nem dedikált porttal ( 65001). Ez elsőre mindig sikerült és az objektum „beül a memóriába” egy nem blokkoló elven működő háttérszálon. Ha (többedszerre) nem sikerül létrehozni az objektumot, akkor – kezelve a kötelezően kezelendő kivételeket – hasznos jelezni ezt logban, konzolon vagy felbukkanó párbeszédablakban és a programból ki kell lépni (másképpen: a duplikált futtatását meg kell akadályozni).

Ez a Java forráskód második része:

A programból való szabályos kilépéskor le kell futni a fenti forráskódnak. Ez ellenőrzést követően lezárja az ss objektumot és kilép a programból. Például a main() metódusban, ha elfogynak az utasítások egy konzolos alkalmazásban, vagy GUI-s programban nyomógombra kattintás actionPerformed() esemény, vagy (fő)ablak bezárásának kísérlete WindowClosing() esemény.

A programot érdemes körültekintően tesztelni. Ha elrontjuk a fenti felsorolásban vázolt logikai működés végrehajtásának sorrendjét, akkor fejlesztés vagy tesztelés közben akár a számítógépet is újra kell indítanunk.

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A Java EE szoftverfejlesztő tanfolyamunkon, a szakmai modul 5-8. óra Szálkezelés, párhuzamosság alkalommal megismerjük a megoldás elméleti hátterét és a 17-24. óra Socket és RMI alapú kommunikáció alkalommal többféle megvalósítást is kódolunk, tesztelünk.