Konkurentné programovanie (ÚINF/KOPR/2012)

Opravné obhajoby projektov: 1.3.2015 od 15:00 v SJSP17. Obhajoby prebiehajú pred všetkými spolužiakmi formou ukážky funkčnosti projektu a odpovedaním na otázky k zdrojovému kódu hodnotiacich prípadne spolužiakov. Všetci účastníci obhajujú svoje riešenie všetkých troch zadaní.

Obhajoby projektov: 9.2.2016 od 12:30 v SJ2P12. Obhajuje sa prvý projekt a jeden z variantov druhého projektu podľa voľby študenta. Obhajoby prebiehajú pred všetkými spolužiakmi formou ukážky funkčnosti projektu a odpovedaním na otázky k zdrojovému kódu hodnotiacich prípadne spolužiakov. Študenti, ktorí neprídu na túto obhajobu, alebo ich kód nebude spĺňať uvedené požiadavky v dostatočnom rozsahu, budú mať možnosť obhajoby v opravom termíne zhruba o 2 týždne neskôr. Na opravnom termíne už budú musieť obhajovať prvý projekt a obidva varianty druhého projektu.

1. Projekt

Vytvorte klient-server aplikáciu na kopírovanie súboru. Požadované vlastnosti:

  • Sťahovanie súboru prebieha paralelne cez používateľom daný počet TCP soketov.
  • Toto sťahovanie je prerušiteľné tak, že ho je možné prerušiť, vypnúť program, napr. sa presunúť na iné miesto na internete a pri opätovnom pokuse o skopírovanie toto kopírovanie pokračuje od momentu prerušenia opäť paralelne cez rovnaký počet TCP soketov.
  • Grafické používateľské rozhranie obsahujúce aspoň
    • progressbar znázorňujúci percento skopírovania celého súboru
    • tlačidlo na prerušenie kopírovania a následné vypnutie programu
    • tlačidlo na opätovné pokračovanie v kopírovaní, ak je (pri spustení) zistené, že kopírovanie bolo prerušené
    • tlačidlo na úplné zrušenie kopírovania bez možnosti pokračovania, ktoré nezanechá na disku žiadnu stopu
  • Môžete si vybrať, či bude prebiehať kopírovanie zo servra na klienta alebo naopak, nie je potrebné programovať oba smery
  • Stačí uvažovať kopírovanie jedného súboru v rovnakom čase
  • Nie je potrebné programovať prehľadávač disku "na druhej strane" na výber súboru
  • Odporúčam nepoužívať vytváranie špeciálnych paketov s hlavičkami, či inak krájať dáta na chunky, ale posielať cez Socket.getOutputStream().write() po prípadných úvodných dohodách iba dáta. Uzatvorenie streamu sa dá odchytiť cez výnikmku IOException, keď sa zatvorí socket.
  • Program má byť schopný skopírovať bez problémov na lokálnej sieti, alebo v rámci localhostu aj 1GB súbor pod 1 minútu

2. Projekt

Startup velky.hlad.sk chce postaviť aplikáciu na správu kuchárskych receptov. Usúdila, že na tento účel je najlepšie postaviť webovú službu.

Kuchársky recept obsahuje:

  • názov receptu
  • autora
  • zoznam ingrediencí vrátane merných jednotiek (napr. 4 vajcia, 400 g hladkej múky, 1 lyžica cukru)
  • postup prípravy.

Implementujte nasledovné operácie:

  • pridanie receptu do databázy receptov. Návratovou hodnotou je jednoznačný UUID identifikátor receptu. Vstupom je recept s vyššie uvedenými vlastnosťami.
  • aktualizácia receptu na základe identifikátora
  • odstránenie receptu na základe identifikátora
  • získanie receptu na základe identifikátora
  • vyhľadanie receptov obsahujúcich zadané kľúčové slovo či slová. V tejto funkcionalite implementujte fulltextové vyhľadávanie, pričom algoritmus môže byť aj veľmi jednoduchý.
  • vyhľadávanie receptov podľa ingrediencií. Pokryte situácie, keď máte doma napr. vajcia, múku a bravčové mäso a chcete vedieť, aké recepty si môžete pripraviť.

Pri všetkých operáciách ošetrite situácie, keď sa recept v databáze nenachádza, a to rozumným spôsobom, ktorý klienta dostatočne oboznámi s chybovým stavom.

Implementáciu databázy zvoľte podľa vlastného uváženia. Nezabúdajte na to, že ku databáze receptov budú pristupovať viacerí klienti naraz.

Zvoľte si aspoň jednu z nasledovných možností (REST/SOAP).

I. SOAP webservice


Implementujte webovú službu s vyššie uvedenými operáciami. Služba nech je realizovaná v štýle document/literal alebo RPC/encoded. Zverejnite WSDL so službou a vytvorte k nej klienta.

Na implementáciu servera i klienta použite ľubovoľnú technológiu.

Demonštrujte funkčnosť servera i klienta -- odporúčaná forma sú unit testy.

II. REST webservice


Navrhnite a implementujte REST API pre vyššie uvedené operácie na strane servera. Použite ľubovoľný vhodný framework: odporúčaný je Spring MVC (Spring Boot) alebo Restlet.

Implementujte klienta pre uvedenú webovú službu v odlišnej technológii / programovacom jazyku. Ak ste implementovali server v Jave, ste povinní implementovať klienta v odlišnom programovacom jazyku: napr. PHP / Python / Pascal a pod.

Demonštrujte funkčnosť servera i klienta -- odporúčaná forma sú unit testy.

Vyjasnenia


  • v prípade voľby variantu I. SOAP môžete i klienta i server implementovať v rovnakej technológii na rovnakej platforme (JAX-WS server + JAX-WS klient).
  • v prípade voľby variantu II. REST musíte klientskú stranu implementovať v odlišnej technológii než server.

SVN úložisko

Na SVN úložisku budem zverejňovať úlohy riešené na cvičeniach

Obsah cvičení

Literatúra