Programare concurentă și bazată pe evenimente
Lucrări de laborator

Autori: Dan Cosma, Petru Mierlutiu, (c)2008-2017
Actualizari: 24 septembrie 2018

Bun venit pe pagina oficiala a laboratorului de Programare concurenta si bazata pe evenimente! Aici veti gasi cele mai proaspete informatii legate de activitatea la laborator, inclusiv toate anunturile oficiale. De asemenea, aceasta este locatia indrumatorului de laborator pe care il veti folosi de-a lungul semestrului.

English site

You can access the English version of the CEBP lab page.

Situatia la laborator

Situatia la laborator poate fi consultata aici .

Proiecte

In cursul laboratorului vor fi implementate 2 mini-proiecte. Pentru realizarea proiectelor, studentii trebuie sa se organizeze in echipe de maxim 4 persoane.

In cazul in care acest lucru nu a fost facut la inscrierea la laborator, tema aleasa pentru primul proiect trebuie anuntata prin e-mail cadrului didactic cu care se face laboratorul pana cel tarziu la sfarsitul celei de-a doua saptamani a semestrului, de catre reprezentantul ales al echipei.

Este recomandat ca echipele sa fie formate din studenti care sunt programati la laborator la aceeasi ora si in aceeasi sala. Pot fi efectuate schimbari intre studenti, in asa fel incat numarul de studenti de la fiecare laborator sa ramana acelasi (asa cum a fost stabilita configuratia grupelor la inceputul semestrului). Echipa va veni la laborator la ora la care majoritatea membrilor au programat in orar laboratorul. La un laborator se pot prezenta maxim 5 echipe.

Proiectele trebuie realizate in Java. Cu acordul cadrului didactic pot fi alese si alte platforme sau limbaje sau de programare. Proiectele vor fi implementate astfel incat sa trateze toate problemele de concurenta care pot sa apara in contextul temei alese. Trebuie evitate situatiile de deadlock, livelock si starvation si trebuie eliminate problemele legate de consistenta si vizibilitatea resurselor comune.

Proiectul 1

Proiectul poate fi implementat atat ca aplicatie locala, cat si, la alegere, ca sistem distribuit. Proiectul incepe in saptamana a III-a si are termenul limita de predare in saptamana a VIII-a a semestrului I.

Pot fi alese oricare din temele de mai jos, sau pot fi propuse teme noi. Propunerile de teme noi trebuie facute pana la o data care va fi anuntata si vor fi puse in aplicare numai cu acordul cadrului didactic.

Temele propuse pentru primul proiect sunt:

  1. Simulator de Workflow
  2. Sistem birocratic
  3. Server de mesagerie
  4. Joc de strategie
  5. Bursa
  6. Reactii chimice

Proiectul 2

Proiectul are termenul limita de predare in saptamana a XII-a a semestrului I.

Pot fi alese oricare din temele de mai jos, sau pot fi propuse teme noi. Propunerile de teme noi trebuie facute pana la o data care va fi anuntata si vor fi puse in aplicare numai cu acordul cadrului didactic.

Proiectul poate fi realizat in oricare din urmatoarele doua variante:

Proiect de tip A:

Aplicatia este formata dintr-un set de componente (clase Java), dupa cum urmeaza:

  • un set de generatori si consumatori de evenimente, in functie de specificatiile proiectului
  • un dispecer implementat ca o bucla de evenimente (event loop) sau ca un serviciu separat (o clasa avand metode de tip sendEvent(type, source)). Dispecerul ofera metode de genul registerListener(type, class) prin care clasele se pot inregistra ca fiind interesate de evenimente.

Evenimentele sunt caracterizate de un tip reprezentat printr-un identificator (sir de caractere), iar la dispecer se pot inregistra clase interesate de aparitia anumitor tipuri de evenimente. O clasa se poate inregistra pentru mai multe tipuri de evenimente, apeland de mai multe ori metoda registerListener.

Evenimentele generate sunt trimise dispecerului, care le trimite mai departe claselor care s-au inregistrat ca fiind interesate de respectivele evenimente. Dupa ce au fost trimise tuturor celor interesati, evenimentele respective sunt sterse.

Portiunea legata de preluarea si dispecerizarea mesajelor trebuie sa fie independenta de specificatiile particulare ale proiectului.

Proiect de tip B:

Arhitectura e similara celei de tip A. dar dispecerul nu trebuie implementat in aplicatie, in schimb fiind folosita o infrastructura software disponibila care permite modelarea sa. Este vorba de Java Message Service (JMS), folosind resurse de tip Topic pentru a modela evenimentele ca mesaje asincrone.

Ca si in cazul anterior, evenimentele sunt caracterizate de un tip reprezentat printr-un identificator (sir de caractere), iar la sistemul de mesagerie (JMS) se pot inregistra clase interesate de aparitia anumitor tipuri de evenimente. O clasa se poate inregistra pentru mai multe tipuri de evenimente.

Pentru ambele variante de proiect, consumatorii de evenimente sunt clase construite special, care preiau evenimente si realizeaza actiunile corespunzatoare, conform specificatiei proiectului.

Proiectele concrete pot fi specificate de studenti, sau pot fi alese din lista urmatoare:

  1. Joc de strategie
  2. Bursa online
  3. Sistem de stiri

Pagina cursului

Notele de curs (slide-uri), informatiile despre examinare si ultimele noutati referitoare la curs pot fi aflate consultand pagina cursului.

Resurse

  1. Programare concurenta
  2. Programare bazata pe evenimente

Informatii

Pentru probleme legate de laborator, puteti lua legatura prin e-mail cu cadrele didactice cu care faceti laboratorul:
  • Dan Cosma, la adresa danc at cs -dot- upt dot ro.

Pentru observatii, sugestii sau orice alte probleme legate de lucrarile de laborator, autorii pot fi contactati la adresele de mai sus.