5. týždeň

Úloha 4 - Implementujeme servisný komponent cez JDBC

Motivácia

Nielen pri online herných portáloch, akým je Gamestudio, môžu pomocné služby spestriť používateľský zážitok a vniesť do aplikácie socializačný aspekt, ktorý ju oživí.

Vašou úlohou na dnešnom cvičení je implementovať do vašej hry nasledujúce služby:

  • score - služba pre zaznamenávanie rebríčku najlepších skóre hráčov,
  • comment - služba pre pridávanie komentárov k hre,
  • rating - služba pre hodnotenie hry, napr. zadaním počtu hviezdičiek v škále od 1 do 5.

Návod pre implementáciu bude opísaný na príklade služby score pre ukladanie skóre hráčov a zobrazovanie rebríčka najvyššieho skóre hráčov. Pre implementáciu servisného komponentu pre každú z vyššie menovaných služieb budeme potrebovať nasledovné:

  • Databázu s názvom gamestudio s tabuľkou, ktorá bude obsahovať údaje servisnej služby, napríklad SCORE,
  • Entitnú triedu služby, ktorá bude obsahovať všetky údaje o jednej inštancii služby, napríklad: Score, Comment, Rating,
  • Rozhranie pre službu, zabezpečujúce základné akcie, napríklad ScoreService,
  • Implementáciu rozhrania pre službu, ktorá zabezpečí sprístupnenie hodnôt z databázy a ukladanie hodnôt do databázy, napríklad ScoreServiceJDBC.

Ciele

  1. Vytvoriť databázu slúžiacu na ukladanie údajov služby.
  2. Vytvoriť entitnú triedu slúžiacu na reprezentáciu údajov služby. Vytvoriť rozhranie servisných komponentov.
  3. Implementovať rozhrania servisných komponentov.
  4. Integrovať vytvorené služby do hry.

Postup

Krok 1

Úloha 1.1

Nainštalujte si databázový systém, odporúčame použiť server PostgreSQL. Na jeho stiahnutie môžete využiť oficiálnu stránku http://www.postgresql.org/download/ alebo si ho nainštalujte prostredníctvom správcu softvérových balíkov vášho operačného systému. Použite najnovšiu verziu databázového servera dostupnú pre váš systém.

Úloha 1.2

Vytvorte databázu s názvom gamestudio. Pre ďalšiu prácu s databázou si môžete pomôcť dokumentáciou pre PostgreSQL.

Poznámka

Na pripojenie, vytvorenie a správu databázy môžete použiť priamo vývojové prostredie IntelliJ IDEA a jeho nástrojový panel Database (tlačidlo pre jeho zobrazenie je spravidla pri pravom okraji okna)(Obr. 1). Pre pokročilú správu databáz mimo prostredia IntelliJ IDEA je od spoločnosti JetBrains dostupná aj aplikácia DataGrip. Možné je použiť aj aplikáciu pgAdmin.

Panel pre správu databáz v prostredí IntelliJ IDEA, vytvorenie pripojenia k databáze PostreSQL
Obr. 1: Panel pre správu databáz v prostredí IntelliJ IDEA, vytvorenie pripojenia k databáze PostreSQL

Úloha 1.3

Pridajte do projektu jdbc ovládač (driver) pre PostgreSQL, ktorý umožňuje aplikácii napísanej v jazyku Java pripojiť sa k PostgreSQL databáze.

Ak váš projekt nevyužíva žiaden nástroj na správu závislostí projektu (napr. Gradle, Maven), môžete ovládač vyhľadať a pridať cez vývojové prostredie, v menu File -> Project Structure -> Libraries, kde po stlačení na tlačidlo + v hornej časti vyberte možnosť From Maven (Obr. 2). Do vyhľadávacieho poľa zadajte názov ovládača org.postgresql:postgresql:42.2.19 (číslo verzie závisí od toho, ktorú verziu PostgreSQL používate).

Pridanie knižnice do projektu v prostredí IntelliJ IDEA
Obr. 2: Pridanie knižnice do projektu v prostredí IntelliJ IDEA

Ak ste váš projekt vytvorili ako Maven projekt, môžete potrebný ovládač získať pridaním záznamu projektovej závislosti (tzv. dependency) v konfiguračnom súbore pom.xml (video prednášky 4, čas cca 34:30).

Krok 2

Do projektu pridajte rozhrania a entity špecifikujúce servisné komponenty z archívu serviceSpecs.zip. Preštudujte si opis špecifikácie. Jednotlivé rozhrania obsahujú signatúry základných metód podporovaných jednotlivými službami.

Upozornenie

Kvôli kompatibilite s projektom GameStudio nemeňte rozhrania ani nedefinujte žiadne nové verejné metódy. Pri tvorbe databázy a služieb v nasledujúcich krokoch dodržte poskytnutú špecifikáciu rozhraní služieb.

Úloha 2.1

Implementujte entitné triedy Comment a Rating.

Pre ukážku máte k dispozícii implementáciu triedy Score.

Krok 3

Úloha 3.1

Na základe špecifikácie v databáze vytvorte tabuľky, ktoré budú obsahovať informácie súvisiace so službami.

Vývojové prostredie IntelliJ IDEA má podporu pre prácu s databázovými systémami, takže tabuľky pre ukladanie dát služieb môžete vytvoriť aj priamo cez vývojové prostredie. K dispozícii je grafický editor pre prácu s tabuľkami (dialógové okná), ale aj možnosť zapísať a vykonať vlastný databázový skript.

Novú tabuľku môžete v prostredí IntelliJ IDEA pridať cez nástrojový panel Database (tlačidlo pre jeho zobrazenie je spravidla pri pravom okraji okna). Rozkliknutím názvu pripojenej databázy sa dostanete k schéme (položka schemas->public) a kliknutím naň pravým tlačidlom myši sa zobrazí kontextová ponuka, v ktorej je možné zvoliť New->Table (Obrázok nižšie).

Vytvorenie databázovej tabuľky v prostredí IntelliJ IDEA
Obr. 3: Vytvorenie databázovej tabuľky v prostredí IntelliJ IDEA

Následne sa otvorí dialógové okno, v ktorom je možné pridať pomocou dlačidla jednotlivé stĺpce a nastaviť ich údajové typy (horná časť okna) alebo je možné zapísať do poľa pre text príkaz, ktorým sa má realizovať vytvorenie tabuľky (spodná časť okna). Pri pridávaní stĺpcov pomocou tlačidla + sa automaticky vyplní aj textové pole s príkazom, ktorý zodpovedá vytvoreniu tabuľky s takýmito stĺpcami.

Pridanie stĺpcov do novovytvorenej tabuľky
Obr. 4: Pridanie stĺpcov do novovytvorenej tabuľky

Poznámka

Pri vytváraní tabuliek sa riaďte špecifikáciou jednotlivých služieb. Myslite ale na to, že táto špecifikácia je všeobecná a preto pri zadávaní údajových typov jednotlivých stĺpcov treba zohľadniť typy podporované databázovým systémom Postgresql.

Krok 4

Úloha 4.1

Vytvorte implementácie rozhraní služieb v balíku service pre JDBC s názvami RatingServiceJDBC a CommentServiceJDBC. Inšpirujte sa príkladom ScoreServiceJDBC.java.

Pre implementáciu služieb potrebujete:

  • Údaje pre pripojenie k databáze (URL, login, password),
  • SQL príkazy, ktoré sa využijú v jednotlivých metódach komponentu,
  • Implementáciu metód rozhrania spolu s pripojením na databázu, ošetrením výnimiek a ukončením pripojenia.

Poznámka

Inšpirovať sa môžete implementáciou služby ScoreServiceJDBC z prednášky. Všimnite si tiež, ako je služba score zakomponovaná do hry v triede ConsoleUI.

Upozornenie

Pri implementácii dávajte pozor na to, aby ste triedy či metódy pomenovali podľa špecifikácie.

Krok 5

Úloha 5.1

Integrujte vytvorený servisný komponent do hry tak, aby všetky jeho funkcionality boli priamo využiteľné z konzolového používateľského rozhrania. Inšpirujte sa ukážkami implementácie z prednášok.

Napríklad, služba score by mala byť do hry zakomponovaná tak, že automaticky po dohratí hry sa skóre hráča uloží do databázy. Následne, či už automaticky alebo prostredníctvom špecifického príkazu zadaného hráčom, sa vypíše zoznam top 10 hráčov s najvyšším skóre.

Úloha 5.2

Vytvorte JUnit testy pre všetky vytvorené služby. Inšpirujte sa príkladmi v prednáškach.

Pre inšpiráciu si preštudujte zdrojové kódy z ročníka 2018 a 2019 (odkazy sú k dispozícii v systéme Moodle).

Buďte kreatívni a implementujte ďalšie testy, ktorými by bolo vhodné funkcionalitu overiť.

Poznámka

Myslite na to, že implementácia nad rámec požadovaných úloh a kreatívny prístup budú hodnotené aj v rámci odovzdávok bodmi za aktivitu ;)

Krok 6

Úloha 6.1

Nahrajte vašu implementáciu do vášho repozitára na GitLab-e. Projekt môžete ďalej priebežne aktualizovať. Pred ďalším cvičením sa uistite, že máte v repozitári vaše aktuálne súbory. Zároveň si pripravte otázky, ktoré by ste na cvičení chceli vyriešiť.

Zdroje

  1. Dokumentácia pre PostgreSQL
  2. Archív so špecifikáciou pre servisné komponenty serviceSpecs.zip
  3. Opis špecifikácie servisných komponentov
  4. Dokumentácia údajových typov pre Postgresql