Firma Vpusti s.r.o. vyrába systém na turnikety v budove, ktoré sa otvárajú čipovou kartou.

Každý zamestnanec má svoju kartu, ktorou si môže otvoriť turniket v budove na konkrétnom mieste (ďalej „lokácia“).

Každá lokácia je obojsmerná a dokáže zaevidovať, či zamestnanec vchádza do budovy (octitne sa „dnu“) alebo vychádza z budovy (vyjde „von“). Zamestnanec vie cez jednu lokáciu vojsť „dnu“ a inou vyjsť „von“!

Systém ma podporovať nasledovné služby:

  • Požiadavka 1: zavedenie karty do systému. Karta je identifikovaná číslom. Po zavedení karty do systému môže zamestnanec prechádzať všetkými lokáciami.
  • Požiadavka 2: prechod cez turniket či otvorenie dverí. Zamestnanec sa môže „pípnuť“ a do systému sa vloží identifikátor karty, dátum a čas prechodu, a lokácia, cez ktorú zamestnanec prešiel. Lokácia sama rozhodne, či ide o odchod alebo príchod – smer, ktorým prešiel zamestnanec je záležitosťou lokácie, nie vlastnosťou karty. Ak karta nie je v systéme, treba odoprieť prístup.
  • Požiadavka 3: zistenie, ktorí zamestnanci sú „dnu“ – prešli lokáciou a sú v budove.
  • Požiadavka 4: celkovú dĺžku pobytu konkrétneho zamestnanca „dnu“, ktorú strávil za príslušný deň. Ak zamestnanec vošiel „dnu“ o 08:00, vyšiel o 09:15, potom vošiel o 09:45 a vyšiel „von“ o 16:00, celková dĺžka pobytu „dnu“ je 7 hodín a 30 minút.

Technické požiadavky

Implementáciu databázy zvoľte podľa vlastného uváženia. Nezabúdajte na to, že ku databáze budú pristupovať viacerí klienti naraz. Zvoľte si aspoň jednu z nasledovných možností a plne ju implementujte. Zadanie, ktoré nespĺňa všetky požiadavky vo vybranej možnosti, bude zamietnuté. Pri zadaní sa hodnotí kvalita a spôsob implementácie.

Evidencia staníc a cien vzdialeností medzi nimi môže byť implementovaná ľubovoľným spôsobom, ale nie je nutné ju zverejňovať pre klientov služby.

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

Implementujte SOAP webservice v štýle document/literal so všetkými vyššie uvedenými požiadavkami. 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ú požiadaviek. 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

Navrhnite a implementujte aktorov pre všetky vyššie uvedené požiadavky 2 („prechod“) a 4 („dĺžka pobytu“). Demonštrujte funkčnosť pre aktorov – odporúčaná forma sú unit testy.

Pre požiadavku 4 použite návrhový vzor „Ask“ pre synchrónne zistenie informácie z bežiaceho systému.

IV. Message Broker: RabbitMQ alebo Kafka

Vyberte si jeden broker – buď RabbitMQ alebo Kafka – a implementujte zadanie, ktoré podporuje požiadavky 2 („prechod“) a 4 („dĺžka pobytu“).

Pre požiadavku 4 použite len asynchrónnu požiadavku a výstup z operácie pošlite ako správy do konkrétnej exchange, resp. topicu, ktorý ich bude zbierať.