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ť.