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:laborator01 [2015/10/18 19:30]
Andrei Roșu-Cojocaru
laboratoare:laborator01 [2015/10/19 00:44] (current)
Andrei Roșu-Cojocaru [Materiale Ajutătoare]
Line 18: Line 18:
 ===== Materiale Ajutătoare ====== ===== Materiale Ajutătoare ======
  
-TODO+{{ :​laboratoare:​laborator01:​aipi2015-lab01-slides.pdf }}
  
 ===== Java Database Connectivity - aspecte generale ===== ===== Java Database Connectivity - aspecte generale =====
Line 890: Line 890:
  
 <code java> <code java>
-java.io.FileOutputStream fileOutputStream = new java.io.FileOutputStream("​genres.xml"​);​ +java.io.FileOutputStream fileOutputStream = new java.io.FileOutputStream("​category.xml"​);​ 
-genres.writeXml(fileOutputStream);​+categories.writeXml(fileOutputStream);​
 </​code>​ </​code>​
  
 <code java> <code java>
-java.io.FileWriter fileWriter = new java.io.FileWriter("​genres.xml"​);​ +java.io.FileWriter fileWriter = new java.io.FileWriter("​category.xml"​);​ 
-genres.writeXml(fileWriter);​+categories.writeXml(fileWriter);​
 </​code>​ </​code>​
  
Line 902: Line 902:
  
 <code java> <code java>
-genres.writeXml(resultSet,​ fileOutputStream);​ +categories.writeXml(resultSet,​ fileOutputStream);​ 
-genres.writeXml(resultSet,​ fileWriter);​+categories.writeXml(resultSet,​ fileWriter);​
 </​code>​ </​code>​
  
Line 909: Line 909:
  
 <code java> <code java>
-java.io.FileInputStream fileInputStream = new java.io.FileOutputStream("​genres.xml"​);​ +java.io.FileInputStream fileInputStream = new java.io.FileOutputStream("​category.xml"​);​ 
-genres.readXml(fileOutputStream);​+categories.readXml(fileOutputStream);​
 </​code>​ </​code>​
  
 <code java> <code java>
-java.io.FileReader fileReader = new java.io.FileReader("​genres.xml"​);​ +java.io.FileReader fileReader = new java.io.FileReader("​category.xml"​);​ 
-genres.readXml(fileReader);​+categories.readXml(fileReader);​
 </​code>​ </​code>​
  
Line 934: Line 934:
  
 Se doreşte proiectarea unei aplicaţii care exploatează o bază de date ce urmează să fie integrată în cadrul unui sistem ERP pentru o librărie care comercializează cărţi. Se va porni de la schema conceptuală,​ respectiv de la structura bazei de date construite în cadrul laboratorului anterior. Se doreşte proiectarea unei aplicaţii care exploatează o bază de date ce urmează să fie integrată în cadrul unui sistem ERP pentru o librărie care comercializează cărţi. Se va porni de la schema conceptuală,​ respectiv de la structura bazei de date construite în cadrul laboratorului anterior.
 +
 +Proiectul poate fi dezvoltat folosind [[https://​maven.apache.org/​|Apache Maven]], fiind necesar să se precizeze configurațiile de rulare în mediile integrate de dezvoltare, în acest scop.
 +
 +==== Eclipse Mars (4.5) ====
 +
 +Pentru acțiunea //Run As// → //Maven Build// disponibilă în meniul contextual al proiectului (click dreapta în secțiunea //Package Explorer//​),​ se poate defini o configurație de rulare care va realiza simultan acțiunile de curățare a fișierelor generate, compilare și testare.
 +
 +{{ :​laboratoare:​laborator01:​04eclipse_project_configuration06.png?​nolink }}
 +
 +O configurație de rulare este caracterizată prin următoarele caracteristici (în panoul de prezentare //Main//):
 +  * denumire (//eng.// Name);
 +  * locație (//eng.// Base directory) - de regulă, referința se face relativ la spațiul de lucru, disponibil la ''​${workspace_loc:​}'';​
 +  * acțiunile care vor fi realizate (//eng.// Goals): pot fi specificate acțiuni precum ''​clean'',​ ''​build'',​ ''​compile'',​ ''​install''​ sau ''​test'',​ dacă este necesar);
 +  * diferiți parametri (definiți prin nume și valoare), în situația în care este necesar un control mai exact al comportamentului,​ în detrimentul celui implicit.
 +
 +{{ :​laboratoare:​laborator01:​04eclipse_project_configuration07.png?​nolink }}
 +
 +==== NetBeans 8.0.2 ====
 +
 +O configurație de rulare trebuie specificată în secțiunea //​Configurations//​ din meniul contextual al proiectului (disponibil prin acțiunea click dreapta pe denumirea proiectului în panoul de prezentare //​Projects//​). Crearea unei configurații de rulare noi se face prin accesarea butonului //Add...//.
 +
 +{{ :​laboratoare:​laborator01:​05netbeans_project_configuration04.png?​nolink }}
 +
 +Pentru fiecare configurație de rulare trebuie specificată o denumire unică (//​Configuration Id//). Pentru ca proiectul să poată fi utilizat și pe alte platforme este necesar să NU fie selectată opțiunea //Keep private to this IDE instance//.
 +
 +{{ :​laboratoare:​laborator01:​05netbeans_project_configuration05.png?​nolink }}
 +
 +Este necesar să se indice scopurile asociate pentru fiecare acțiune corespunzătoare configurației de rulare, existând posibilitatea de a se preciza suplimentar și o serie de proprietăți.
 +
 +<note tip>​Sintaxa utilizată pentru o proprietate este ''​-D<​property_name>​=<​property_value>''​.</​note> ​
 +
 +{{ :​laboratoare:​laborator01:​05netbeans_project_configuration06.png?​nolink }}
 +
 +Accesarea unei acțiuni a proiectului se face din meniul contextual al acestuia, executându-se,​ de fiecare dată, scopurile care au fost specificate anterior.
 +
 +{{ :​laboratoare:​laborator01:​05netbeans_project_configuration07.png?​nolink }}
 +
 +===== =====
  
 **0**. Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​aipi2015/​Laborator01|]]. În urma acestei operații, directorul ''​Laborator01''​ va trebui să conțină subdirectorul ''​labtasks'',​ fișierele ''​README.md''​ și ''​LICENSE''​. <​code>​ **0**. Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​aipi2015/​Laborator01|]]. În urma acestei operații, directorul ''​Laborator01''​ va trebui să conțină subdirectorul ''​labtasks'',​ fișierele ''​README.md''​ și ''​LICENSE''​. <​code>​
Line 941: Line 979:
 <note tip>În interfața ''​Constants''​ din pachetul ''​ro.pub.cs.aipi.lab01.general'',​ trebuie să se modifice valoarea constantei ''​DATABASE_PASSWORD''​ care stochează parola de conectare pentru utilizatorul ''​root''​ la sistemul de gestiune al bazei de date.</​note>​ <note tip>În interfața ''​Constants''​ din pachetul ''​ro.pub.cs.aipi.lab01.general'',​ trebuie să se modifice valoarea constantei ''​DATABASE_PASSWORD''​ care stochează parola de conectare pentru utilizatorul ''​root''​ la sistemul de gestiune al bazei de date.</​note>​
  
-<note important>​Proiectul este organizat sub forma unei suite de teste unitare, corespunzătoare fiecărui exercițiu în parte. În principiu, fiecare test unitar este independent,​ însă având în vedere faptul că unele dintre acestea modifică starea bazei de date, este recomandat ca exercițiile să fie rezolvate în ordine. Pentru ca rezultatul testelor să fie același, structura și conținutul bazei de date sunt recreate de fiecare dată, curățându-se și rezultatul rulărilor anterioare (această operație poate dura o perioadă de timp mai îndelungată,​ în funcție de performanțele mașinii pe care se rulează). În directorul ''​input''​ sunt plasate fișierele de referință cu care se face comparația pentru rezultatul fiecărui test unitar.</​note>​+Proiectul este organizat sub forma unei suite de teste unitare, corespunzătoare fiecărui exercițiu în parte. În principiu, fiecare test unitar este independent,​ însă având în vedere faptul că unele dintre acestea modifică starea bazei de date, este recomandat ca exercițiile să fie rezolvate în ordine. ​ 
 + 
 +Pentru ca rezultatul testelor să fie același, structura și conținutul bazei de date sunt recreate de fiecare dată, curățându-se și rezultatul rulărilor anterioare (această operație poate dura o perioadă de timp mai îndelungată,​ în funcție de performanțele mașinii pe care se rulează). ​ 
 + 
 +În directorul ''​input''​ sunt plasate fișierele de referință cu care se face comparația pentru rezultatul fiecărui test unitar. ​În directorul ''​output''​ sunt plasate fișierele rezultate în urma rulării testelor unitare.  
 + 
 +<note important>​ 
 +În situația în care proiectul este rulat folosind utilitarul Maven, este necesar ca pentru scopul ''​test''​ să se specifice proprietatea ''​-Dtest=ro.pub.cs.lab01.main.AllTests'',​ pentru a se forța rularea suitei de teste unitare în detrimentul rulării fiecărui test unitar în parte. Aceasta asigură faptul că testele unitare vor fi executate în ordine, precum și realizarea operațiilor de încărcare / descărcare a bazei de date înainte de fiecare rulare. 
 +</​note>​
  
 **1**. Să se implementeze metoda ''​getTableNumberOfRows()''​ din clasa ''​DatabaseOperationsImplementation''​ a pachetului ''​ro.pub.cs.aipi.lab01.dataaccess'',​ ce determină numărul de înregistrări al unei tabele identificată prin denumire (transmisa ca parametru). <code java> **1**. Să se implementeze metoda ''​getTableNumberOfRows()''​ din clasa ''​DatabaseOperationsImplementation''​ a pachetului ''​ro.pub.cs.aipi.lab01.dataaccess'',​ ce determină numărul de înregistrări al unei tabele identificată prin denumire (transmisa ca parametru). <code java>
Line 1100: Line 1146:
 ===== Soluții ===== ===== Soluții =====
  
-TODO+[[https://​github.com/​aipi2015/​Laborator01/​tree/​master/​solutions/​eclipse/​01-BookStore-JDBC|Proiect Eclipse]]\\  
 +[[https://​github.com/​aipi2015/​Laborator01/​tree/​master/​solutions/​netbeans/​01-BookStore-JDBC|Proiect NetBeans]]
laboratoare/laborator01.1445185836.txt.gz · Last modified: 2015/10/18 19:30 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