Firma Station vyrába systém pre železničnú stanicu.

Na železničnú stanicu prichádzajú pravidelne vlaky pre prepravu cestujúcich, pričom každý z nich má svoj vlastný typ (R – rýchlik, Os – osobný a pod.), a číselné označenie (napr. 602). Vlak prichádza v konkrétny deň (16. 11. 2021), presnú hodinu a minútu (16:02) na konkrétne nástupište (5. nástupište). V inú presnú hodinu a minútu (16:05) smeruje do konkrétneho cieľa (Poprad-Tatry).

Prirodzene, vlaky meškajú a nezriedka vlak R602 príde o 16:12 namiesto 16:02 a odíde o 16:20 namiesto pôvodného 16:05.

Navrhnite informačný systém, ktorý má podporovať nasledovné služby:

  1. Evidenciu reálneho času príchodu konkrétneho vlaku v daný deň
  2. Evidenciu reálneho času odchodu konkrétneho vlaku v daný deň
  3. Možnosť zaevidovať plánované meškanie príchodu konkrétneho vlaku pre účely elektronických tabúľ a hlasového systému („Vlak R602 bude meškať 10 minút“)
  4. Výpis 20 odchádzajúcich vlakov krížom cez všetky nástupištia pre účely centrálnej elektronickej tabule

    • R602 16:02 Poprad Tatry, 2. nástupište, 10 m.
    • Os122 16:05 Prešov, 5. nástupište
  5. Výpis prehľadu odchodov a príchodov konkrétneho vlaku, vrátane meškaní, za konkrétne časové obdobie.

    • 12. 6. 2021 R602 16:02 Poprad Tatry, 2. nástupište, 10 m.
    • 13. 6. 2021 R602 16:02 Poprad Tatry, 2. nástupište, 12 m.
    • 14. 6. 2021 R602 16:02 Poprad Tatry, 2. nástupište, 0 m.
    • 15. 6. 2021 R602 16:02 Poprad Tatry, 2. nástupište, 25 m.

Varianty zadania

Vyberte si jeden z variantov zadania a implementujte ho úplne. Zadanie, ktoré nespĺňa všetky požiadavky vo vybranej možnosti, bude zamietnuté. Pri zadaní sa hodnotí kvalita a spôsob implementácie.

I. SOAP webservice (od kódu k WSDL)

Implementujte SOAP webservice v štýle document/literal. Zverejnite WSDL so službou a vytvorte k nej klienta v ľubovoľnej technológii, pričom odporúčame použiť JAX-WS 2.0. Demonštrujte funkčnosť servera i klienta — odporúčaná forma sú unit testy.

II. SOAP webservice (od WSDL ku kódu)

Vytvorte ručne WSDL, ktoré popisuje ľubovoľnú jednu z vyššie uvedenú operácií. Na základe tohto WSDL implementujte serverovskú a klientskú časť pre túto operáciu v ľubovoľnej technológii. Použite ľubovoľný štýl (i keď odporúčame document/literal.) Demonštrujte funkčnosť servera i klienta — odporúčaná forma sú unit testy.

III. Akka aktor

Implementujte zadanie, ktoré podporuje len nasledovné vlastnosti:

  1. evidencia príchodu. Prijmite správu, ktorá hovorí, ktorý vlak, v ktorý dátum a čas dorazil na konkrétne nástupište.
  2. evidencia odchodu. Prijmite správu, ktorá hovorí, ktorý vlak, v ktorý dátum a čas odišiel z konkrétneho nástupišta
  3. evidencia meškania. Umožnite sledovať meškania vlakov
  4. výpis najbližších 20 odchádzajúcich vlakov krížom cez všetky nástupištia pre účely centrálnej elektronickej tabule

Pri demonštrácii predpokladajte, že na stanici existuje 5 elektronických tabúľ, ktoré nezávisle od seba ukazujú informácie. Tabule sa môžu kaziť – preukážte to v kóde.

Použite jedného hlavného aktora, ktorý bude prijímať príkazy zodpovedajúce jednotlivým službám a výsledky bude vracať do mimoaktorového sveta primeraným spôsobom.

Predpokladajte, že na stanici existuje 5 elektronických tabúľ, ktoré nezávisle od seba ukazujú informácie. Tabule sa môžu kaziť – preukážte to v kóde.

IV. Broker RabbitMQ alebo Kafka

Vyberte si jeden broker — buď RabbitMQ alebo Kafka — a implementujte zadanie, ktoré podporuje len nasledovné vlastnosti:

  1. evidencia príchodu. Prijmite správu, ktorá hovorí, ktorý vlak, v ktorý dátum a čas dorazil na konkrétne nástupište.
  2. evidencia odchodu. Prijmite správu, ktorá hovorí, ktorý vlak, v ktorý dátum a čas odišiel z konkrétneho nástupišta
  3. evidencia meškania. Umožnite sledovať meškania vlakov
  4. výpis najbližších 20 odchádzajúcich vlakov krížom cez všetky nástupištia pre účely centrálnej elektronickej tabule

Pri demonštrácii predpokladajte, že na stanici existuje 5 elektronických tabúľ, ktoré nezávisle od seba ukazujú informácie. Tabule sa môžu kaziť – preukážte to v kóde.