Konkurentné programovanie (ÚINF/KOPR/2012)

Obhajoby 1.projektu: 20.12.2017 od 10:30 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.

Obhajoby 2.projektu: 16.2.2017 od 15:00 v SJ2P10. 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.

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
  • Požadované vlastnosti
    • projekt musí využívať na správu vlákien Executor
    • použite aspoň jeden synchronizér
    • odchyťte v úlohe udalosť prerušenia
    • Počet dokopy vytvorených TCP spojení počas celej doby kopírovania musí byť rovný počtu TCP Soketov zadaných používateľom s prípadným bonusovým jedným TCP soketom/spojením na manažovanie kopírovania (ak máte potrebu ho použiť) - teda, počas kopírovania žiadne nové TCP spojenia nevznikajú

2. Projekt

Startup AJS chce postaviť portál na evidenciu prezenčných listín na cvičeniach. Členovia usúdili, že na tento účel je najlepšie postaviť webovú službu. Pre každé cvičenie, reprezentované názvom predmetu, dátumom a časom konania, chceme evidovať zoznam účastníkov.

  • vytvorenie nového cvičenia. Vstupom je názov predmetu. Návratovou hodnotu je jednoznačný identifikátor UUID.
  • zaregistrovanie nového účastníka: vstupom je meno a priezvisko. Návratovou hodnotu je jednoznačný identifikátor UUID účastníka.
  • vytvorenie novej prezenčnej listiny. Vstupom je UUID predmetu, dátum, čas a zoznam UUID účastníkov. Výstupom je UUID prezenčnej listiny.
  • získanie mien a priezvisk na konkrétnej prezenčnej listine.
  • získanie zoznamu prezenčných listín, na ktorých sa nachádza daný účastník.

Pri všetkých operáciách ošetrite situácie, keď sa účastník / cvičenie / prezenčná listina 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 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.

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

Implementujte SOAP webservice v štýle document/literal alebo RPC/encoded so všetkými vyššie uvedenými operáciami. 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ú 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

Navrhnite a implementujte aktorov pre vyššie uvedené operácie.

Demonštrujte funkčnosť pre aktorov -- odporúčaná forma sú unit testy.

Vyjasnenia

  • v prípade voľby variantu I. alebo II. môžete i klienta i server implementovať v rovnakej technológii na rovnakej platforme (JAX-WS server + JAX-WS klient).

GitHub úložisko

Na GitHube budem zverejňovať úlohy riešené na cvičeniach

Obsah cvičení

Literatúra