Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator10 [2016/01/08 02:13]
Andrei Roșu-Cojocaru
laboratoare:laborator10 [2016/01/08 16:18] (current)
Andrei Roșu-Cojocaru [Soluții]
Line 881: Line 881:
 Un utilizator ce a primit un mesaj că un alt utilizator nu mai e disponibil îl va exclude din lista utilizatorilor activi. Un utilizator ce a primit un mesaj că un alt utilizator nu mai e disponibil îl va exclude din lista utilizatorilor activi.
  
-**a)** În clasa ''​ContactsList'',​ în metoda ''​start()'',​ să se transmită mesajul ''​Constants.LOGIN_MESSAGE''​ către toţi utilizatorii cu care s-a comunicat recent (din ''​recentContactsListItem''​). Se va apela metoda ''​publish()''​ a obiectului ''​communicator''​ având ca parametrii numele de utilizator al destinatarului şi mesajul propriu-zis. ​+<​spoiler|Indicații de Rezolvare>​ 
 +**a)** În clasa ''​ContactsList'',​ în metoda ''​start()'',​ să se transmită mesajul ''​Constants.LOGIN_MESSAGE''​ către toţi utilizatorii cu care s-a comunicat recent (din ''​recentContactsListItem''​). Se va apela metoda ''​publish()''​ a obiectului ''​communicator''​ având ca parametrii numele de utilizator al destinatarului şi mesajul propriu-zis.
  
-**b)** În clasa ''​ContactsList'', ​în metoda ​''​handleMessage()''​, să se analizeze mesajul ​''​Constants.LOGIN_MESSAGE''​, parcurgându-se lista ''​connectedContactsListItem'' ​şi adăugându-se la aceasta numele de utilizator din mesajul primit, în cazul în care utilizatorul nu se regăseşte în aceasta.+Obiectul ​''​recentContactsListItem''​ conține lista utilizatorilor recenți sub formă de ''​ObservableList<​TreeItem<​String>>​'', ​obținută ca rezultat al metodei ​''​getChildren()''​. Valoarea conținută de un obiect de tip ''​TreeItem''​ se obține prin intermediul metodei ​''​getValue()''​.
  
-**c)** În clasa ''​ContactsList'',​ în metoda ''​close()'',​ să se transmită ​mesajul ''​Constants.LOGOUT_MESSAGE'' ​către toţi utilizatorii cu care s-a comunicat recent (din ''​recentContactsListItem''​). Se va apela metoda ''​publish()'' ​a obiectului ​''​communicator''​ având ca parametrii numele de utilizator al destinatarului ​şi mesajul ​propriu-zis. +**b)** În clasa ''​ContactsList'',​ în metoda ''​handleMessage()'',​ să se analizeze ​mesajul ''​Constants.LOGIN_MESSAGE''​, parcurgându-se lista ''​connectedContactsListItem'' ​şi adăugându-se la aceasta numele de utilizator din mesajul primit ​(''​interlocutorUserName''​), în cazul în care utilizatorul nu se regăseşte în aceasta. După această procesare, metoda se termină întrucât ​mesajul ​nu mai poate avea și alt tip.
  
-**d)** În clasa ''​ContactsList'',​ în metoda ''​handleMessage()'',​ să se analizeze mesajul ''​Constants.LOGOUT_MESSAGE'',​ parcurgându-se lista ''​connectedContactsListItem''​ şi eliminându-se din ea numele de utilizator din mesajul primit, în cazul în care utilizatorul face parte din aceasta.+**c)** În clasa ''​ContactsList'',​ în metoda ''​close()'',​ să se transmită mesajul ''​Constants.LOGOUT_MESSAGE''​ către toţi utilizatorii cu care s-a comunicat recent (din ''​recentContactsListItem''​). Se va apela metoda ''​publish()''​ a obiectului ''​communicator''​ având ca parametrii numele de utilizator al destinatarului şi mesajul propriu-zis. 
 + 
 +Obiectul ''​recentContactsListItem''​ conține lista utilizatorilor recenți sub formă de ''​ObservableList<​TreeItem<​String>>'',​ obținută ca rezultat al metodei ''​getChildren()''​. Valoarea conținută de un obiect de tip ''​TreeItem''​ se obține prin intermediul metodei ''​getValue()''​. 
 + 
 +**d)** În clasa ''​ContactsList'',​ în metoda ''​handleMessage()'',​ să se analizeze mesajul ''​Constants.LOGOUT_MESSAGE'',​ parcurgându-se lista ''​connectedContactsListItem''​ şi eliminându-se din ea numele de utilizator din mesajul primit, în cazul în care utilizatorul face parte din aceasta. ​Este important ca eliminarea să nu se realizeze concomitent cu parcurgerea tabloului. După această procesare, metoda se termină întrucât mesajul nu mai poate avea și alt tip. 
 +</​spoiler>​
  
 **8.** Să se modifice comportamentul aplicaţiei astfel încât utilizatorii să poată primi şi mesajele transmise în răstimpul în care nu au fost disponibili. **8.** Să se modifice comportamentul aplicaţiei astfel încât utilizatorii să poată primi şi mesajele transmise în răstimpul în care nu au fost disponibili.
  
-În clasa ''​PublishSubscribe'',​ în metoda ''​subscribe()'',​ se va modifica tipul obiectului consumator de mesaje astfel încât acesta să fie durabil (persistent şi atunci când este inactiv, adică nu are nici un abonat conectat la el). +<​spoiler|Indicații de Rezolvare>​ 
 +În clasa ''​PublishSubscribe'',​ în metoda ''​subscribe()'',​ se va modifica tipul obiectului consumator de mesaje astfel încât acesta să fie durabil (persistent şi atunci când este inactiv, adică nu are nici un abonat conectat la el). 
 + 
 +Se va utiliza metoda [[https://​docs.oracle.com/​javaee/​7/​api/​javax/​jms/​JMSContext.html#​createSharedDurableConsumer-javax.jms.Topic-java.lang.String-java.lang.String-|createSharedDurableConsumer()]] care, pe lângă argumentele topicii și a selectorului de mesaje (pe care le primea și metoda ''​createConsumer()''​) primește ca argument și o denumire (unică) prin intermediul căreia este identificat. Se va folosi, în acest scop, denumirea utilizatorului care a lansat în execuție aplicația, dată fiind unicitatea sa (deși de poate recurge la orice convenție, în acest scop). 
 + 
 +<code java> 
 +MessageConsumer consumer = subscribeSession.createSharedDurableConsumer(topic,​ userName, Constants.CUSTOM_MESSAGE_PROPERTY + "= '"​ + userName + "'"​);​ 
 +</​code>​ 
 +</​spoiler>​
  
 **9.** Să se modifice formatul mesajelor astfel încât acesta să includă şi ora la care mesajul a fost transmis: **9.** Să se modifice formatul mesajelor astfel încât acesta să includă şi ora la care mesajul a fost transmis:
Line 900: Line 914:
 </​code>​ </​code>​
  
-Se va modifica ​structura ​mesajului din clasa ''​CustomMessage'', ​modificându-se definiţia ​metodei ''​handleMessage()''​ din clasa ''​ContactsList'' ​astfel încât să conţină şi parametrul referitor ​la momentul ​de timp la care a fost transmis mesajul.+<​spoiler|Indicații de Rezolvare>​ 
 +Este necesar să se realizeze următoarele modificări în structura ​aplicației pentru a se obține funcționalitatea solicitată:​ 
 +  * în clasa ''​CustomMessage'' ​se va include un câmp ''​messageDateTime''​ de tip [[https://​docs.oracle.com/​javase/​8/​docs/​api/​java/​util/​GregorianCalendar.html|GregorianCalendar]], care va fi instanțiat în cadrul constructorului de copiere și pentru care se vor implementa metode getter și setter; 
 +  * în clasa ''​PublishSubscribe''​ se vor modifica metodele: 
 +    * ''​handleMessage()'' ​- se va transmite ​metodei ''​handleMessage()'' ​(din clasa ''​ContactsList''​) argumentul care conține data și timpul ​la care mesajul a fost transmis; 
 +    * ''​publish()''​ - va crea un obiect ​de tip ''​Message''​ care conține și parametrul de tip dată și timp, instanțiat cu momentul curent (constructorul implicit al clasei ''​GregorianCalendar''​);​ 
 +  * în clasa ''​ContactsList'',​ metoda ''​handleMessage()''​ va primi un argument de tip ''​GregorianCalendar''​ pe care îl va propaga, mai departe, către metoda ''​handleConversationHistory()''​ din clasa ''​MessageExchange'';​ 
 +  * în clasa ''​MessageExchange'',​ data și timpul ​la care a fost transmis mesajul ​este afișat în interfața grafică: 
 +    * în metoda de tratare a evenimentului de apăsare a butonului //​SendMessage//​ (metoda ''​handle()''​ asociată ascultătorului obiectului ''​sendMessageButton''​);​ 
 +    * în metoda ''​handleConversationHistory()'',​ a cărei semnătură trebuie schimbată corespunzător (pentru a include argumentul de tip dată și timp). 
 +</​spoiler>​
  
 ===== Resurse ====== ===== Resurse ======
Line 908: Line 932:
 ===== Soluții ===== ===== Soluții =====
  
-TODO+[[https://​github.com/​aipi2015/​Laborator10/​tree/​master/​solutions/​eclipse/​10-Messaging-JMS|Proiect Eclipse]]\\  
 +[[https://​github.com/​aipi2015/​Laborator10/​tree/​master/​solutions/​netbeans/​10-Messaging-JMS|Proiect NetBeans]]
laboratoare/laborator10.1452212031.txt.gz · Last modified: 2016/01/08 02:13 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0