Konkurentné programovanie (ÚINF/KOPR/2012)

Obhajoby 1.projektu: 19.12.2018 od 11:40 v SJSP16. 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.

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

Firma DDT vyrába informačný systém na monitorovanie parkovacích miest. V rámci implementácie backendu chcú zverejniť webovú službu. Parkovací systém má podporovať nasledovné služby:

  • zaparkovanie auta. Do systému sa vloží EČV auta (napr. TT-250AE), dátum a čas príchodu na parkovisko a identifikačný kód parkoviska. Po zaparkovaní auta sa vydá parkovací lístok s jednoznačným identifikátorom.
  • opustenie parkoviska. Do systému sa vloží EČV auta, dátum a čas odchodu, a identifikátor parkovacieho lístka.
  • výpis naplnenia parkovísk v danom čase. Pre zadané identifikátory parkoviska nech služba vráti percentuálne naplnenia jednotlivých parkovísk v aktuálnom čase. Pre jednoduchosť nech má každé parkovisko kapacitu 100 miest.
  • výpis počtu návštevníkov (teda začatých a ukončených parkovaní) pre konkrétne parkovisko v zadaný deň.

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.

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ú jednu 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 všetky vyššie uvedené operácie. Demonštrujte funkčnosť pre aktorov -- odporúčaná forma sú unit testy.

Git úložisko

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

Obsah cvičení

Literatúra