Konkurentné programovanie (ÚINF/KOPR/2012)

Obhajoby projektov: 25.2.2015 od 13:30 v SJSP18. 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.

Opravné obhajoby projektov: 18.3.2015 od 13:30 v SJSP18. 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. Trestom za neúspešnú, alebo nerealizovanú obhajobu niektorého z projektov 25.2.2015 je vypracovanie aj ďalšej verzie druhého zadania. Teda ak niekto neobháji 1 projekt, na opravnej obhajobe obhajuje 3 projekty, ak neobhájil oba projkety bude obhajovať všetky štyri.

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, 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

Spoločnosť Killplag chce postaviť systém na detekciu plagiátov zadaní a záverečných prác. Usúdila, že na tento účel je najvhodnejšie postaviť webovú službu. Dokumentom budeme nazývať textový súbor s metadátami, zodpovedajúci záverečnej práci či zadaniu. Dokument obsahuje:

  • názov
  • autora
  • jazyk
  • text zadania či záverečnej práce
  • kľúčové slová

Implementujte pre Killplag nasledovné operácie:

  • pridanie zadania či záverečnej práce do korpusu dokumentov, ktoré sa budú používať v budúcich hľadaniach. Návratovou hodnotou je jednoznačný UUID identifikátor dokumentu. Vstupom je dokument. Ošetrite situácie, keď už daný dokument v korpuse existuje.
  • zistenie miery podobnosti medzi vybraným dokumentom a korpusom. Návratovou hodnotou je zoznam identifikátorov dokumentov z korpusu, ktoré majú s vybraným dokumentom nenulovú zhodu. Pri volaní umožnite nastaviť percentuálny prah zhody, pre ktorý sa budú dokumenty považovať za zhodné i v prípade, že majú mieru zhody menšiu alebo rovnú než prah. Výstupom je zoznam identifikátorov dokumentov usporiadaný podľa miery zhody zostupne.
    • Príklad: na vstupe je 71942845-c20b-402d-a28d-0a055cb5091e a prah 10%. Na výstupe je päť dokumentov so zhodami 50%, 30%, 20% a 12%. Dokument so zhodou 6% sa vo výsledku neobjaví.
  • získanie metadát dokumentu podľa identifikátora.
  • získanie dát dokumentu (textu) na základe identifikátora dokumentu.

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

Implementáciu korpusu (sady dokumentov) zvoľte podľa vlastného uváženia. Nezabúdajte na to, že ku korpusu budú pristupovať viacerí klienti naraz.

Implementáciu algoritmu podobnosti textových dokumentov zvoľte podľa vlastného uváženia. Pokojne použite existujúce knižnice, či implementácie, ak uvediete zdroj a dodržíte licenciu.

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

I. SOAP webservice

  • Vytvorte WSDL súbor pre webovú službu s vyššie uvedenými operáciami. Služba nech je realizovaná v štýle document/literal alebo RPC/encoded.
    Vyjasnenie: WSDL súbor vytvorte Contract First prístupom, teda manuálnym vytvorením WSDL, napr. s pomocou nástrojov Eclipse.
  • Implementujte SOAP endpoint pre vyššie uvedené operácie. Použite ľubovoľný vhodný framework: odporúčaný je JAX-WS 2.0.
  • Implementujte klienta pre uvedenú webovú službu v ľubovoľnej technológii.
  • 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 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.

III. Akka aktor

Vyjasnenie

  • 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.
  • v prípade voľby variantu *III. Akka* máte len jednu technológiu, s ktorou viete implementovať obe strany.

SVN úložisko

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

Obsah cvičení

Literatúra