Platform a online pentru aranjarea [617103]

UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRIC ˘A¸ SI
TEHNOLOGIA INFORMA ¸ TIEI
LUCRARE DE LICEN ¸ T ˘A
Platform˘ a online pentru aranjarea
persoanelor la mese în cadrul
evenimentelor
Coordonator ¸ stiin¸ tific:
Conf. Dr. Ing. Ovidiu
Constantin N OVACAbsolvent:
D˘ anu¸ t G ROZA
Lucrare depus˘ a conform cerin¸ telor pentru ob¸ tinerea
calific˘ arii de Inginer în Tehnologia Informa¸ tiei
în cadrul
Programului de Studiu Tehnologia Informa¸ tiei
Forma de Înv˘ a¸ t˘ amânt Zi
Oradea, 2018

iii
Cuprins
1 Introducere 1
1.1 Motivarea alegerii temei . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Tehnologii folosite 5
2.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 JavaEE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 EJB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3 Autentificarea EJB . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.4 JPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Wildfly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Wicket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.6 Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.7 SVG.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.8 Gradle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.9 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3 Prezentarea proiectului 11
3.1 Main Section 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.1 Subsection 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1.2 Subsection 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2 Main Section 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4 Concluzii 13
4.1 Main Section 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.1 Subsection 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.1.2 Subsection 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2 Main Section 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Bibliografie 15
List˘ a de abrevieri 17
List˘ a de figuri 19
List˘ a de tabele 21

1
Capitolul 1
Introducere
Lucrarea de fa¸ t˘ a are ca ¸ si scop prezentarea unei platforme online care va facilita aran-
jarea invita¸ tilor la mese în cadrul evenimentelor precum nun¸ ti, majorate, conferin¸ te
sau orice alt fel de eveniment. Aranjarea la mese se face prin vizualizarea planului
2D al meselor s ,i prin metoda de drag-and-drop al numelor invitat ,ilor la mese.
În primul rând, aplica¸ tia este destinat˘ a restaurantelor sau organizatorilor de eve-
nimente. Ace¸ stia vor putea sa i¸ si creeze un plan al meselor în sala în care va avea
evenimentul. Atât restaurantele, cât ¸ si organizatorii de evenimente vor avea posibi-
litatea de a crea evenimente pentru anumi¸ ti clien¸ ti sau chiar evenimente proprii. În
cadrul acestor evenimente, clien¸ tii vor avea posibilitatea s˘ a î¸ si aranjeze apoi invita-
¸ tii la mese. Listele cu aranjarea invita¸ tilor la mese vor putea fi desc˘ arcate în format
PDF atât de c˘ atre client, cât si de c˘ atre gazda evenimentului. Formatul poate fi, în
func¸ tie de preferin¸ te, listarea alfabetic˘ a a invita¸ tilor, sau listarea cartona¸ selor care se
vor pune pe fiecare mas˘ a, cu invita¸ tii repartiza¸ ti la acea mas˘ a.
În al doilea rând, aplica¸ tia este destinat˘ a, în mod evident, utilizatorului final,
adic˘ a acelor persoane care organizeaz˘ a un eveniment s ,i doresc o metod˘ a us ,oar˘ a s ,i
rapid˘ a prin care îs ,i pot aranja invitat ,ii la mese. În mod ini¸ tial, aplica¸ tia poate fi fo-
losit˘ a de to¸ ti cet˘ a¸ tenii români sau vorbitori de limba român˘ a deoarece interfa¸ ta apli-
ca¸ tiei este realizat˘ a în limba român˘ a, îns˘ a, din fericire, tehnologiile de interna¸ tionali-
zare introduse înc˘ a de la început în aplica¸ tie fac foarte u¸ soar˘ a ¸ si rapid˘ a posibilitatea
port˘ arii aplica¸ tiei într-o limb˘ a de circula¸ tie interna¸ tional˘ a.
În dezvoltarea acestei aplica¸ tii am folosit anumite tehnologii care fac ca dezvol-
tarea aplica¸ tiilor s˘ a fie mai rapid˘ a ¸ si rezolv˘ a probleme generale întampinate în majo-
ritatea aplica¸ tiilor sau introduc unelte care faciliteaz˘ a implementarea ¸ si dezvoltarea
eficient˘ a a aplica¸ tiilor. Dintre tehnologiile folosite le voi men¸ tiona pe cele mai impor-
tante. Cum este vorba de o aplica¸ tie web, vom avea nevoie de un server în primul
rând, pe care se va stoca partea de backend ¸ si baza de date, ¸ si, în al doilea rând, vom
avea nevoie de partea de frontend, adic˘ a interfa¸ ta aplica¸ tiei. Limbajul de programare
ales pe partea de server este Java, mai exact Java Enterprise Edition. Ca ¸ si server am
ales s˘ a folosesc Wildfly, un server open source dezvoltat ¸ si men¸ tinut de c˘ atre compa-
nia RedHat, dar care are si o versiune enterprise pl˘ atit˘ a. Pentru persisten¸ ta datelor
în baza de date am folosit PostgreSQL, având tot o licen¸ t˘ a de tip open source. Pentru
comunicarea dintre aplica¸ tie ¸ si baza de date, adic˘ a pentru conversia Java – SQL, SQL
– Java, am folosit libr˘ aria Hibernate. Interfa¸ ta aplica¸ tiei const˘ a în definitiv din cod
HTML, CSS ¸ si Javascript, la fel ca la oricare alt˘ a pagin˘ a web, ins˘ a am folosit ¸ si aici
anumite unelte care u¸ sureaz˘ a munca programatorului. De men¸ tionat este libr˘ aria
Wicket, dezvoltat˘ a de c˘ atre Apache Foundation, fiind ¸ si aceasta tot o libr˘ arie open
source. Wicket este o libr˘ arie scris˘ a în Java ¸ si folosit˘ a tot de c˘ atre aplica¸ tii Java, care
genereaz˘ a cod HTML ¸ si injecteaz˘ a datele din Java în HTML în mod transparent fa¸ t˘ a
de dezvoltatori. De men¸ tionat pe partea de frontend ar mai fi SVG.js, o libr˘ arie Ja-
vascript pe care am folosit-o la generarea imaginii SVG a configura¸ tiei meselor, ¸ si

2 Capitolul 1. Introducere
libr˘ aria Bootstrap folosit˘ a pentru a crea pagini web care se scaleaz˘ a vizual automat
pentru telefoanele mobile inteligente. O alt˘ a unealt˘ a folosit˘ a, care nu afecteaz˘ a di-
rect codul surs˘ a al programului, îns˘ a care cred c˘ a ar trebui men¸ tionat˘ a, este Gradle.
Aceasta este o unealt˘ a de automatizare open source scris˘ a in limbajul Groovy. În
aplica¸ tia mea am folosit-o la gestionarea dependin¸ telor ¸ si exportarea aplica¸ tiei într-o
arhiv˘ a WAR. A¸ s mai dori s˘ a adaug la aceast˘ a list˘ a ¸ si unealta Git. Aceasta este deo-
bicei folosit˘ a la controlul versiunii fi¸ sierelor surs˘ a când se lucreaz˘ a în echip˘ a, îns˘ a în
cazul meu fiind doar o persoan˘ a care modific˘ a fi¸ sierele surs˘ a, l-am folosit pentru a
avea un backup al aplica¸ tiei în cazul în care se pierd datele de pe calculator, cât ¸ si
pentru a avea un istoric al modific˘ arilor.
1.1 Motivarea alegerii temei
Tema proiectului meu este denumit˘ a “Platform˘ a online pentru aranjarea persoanelor
la mese în cadrul evenimentelor” ¸ si, dup˘ a cum se poate vedea ¸ si din titlu, proiectul
const˘ a dintr-o platform˘ a prin care utilizatorii îs ,i pot aranja invitat ,ii unui anumit eve-
niment la mesele disponibile din sal˘ a. Am denumit acest proiect o platfom˘ a online
s,i nu doar un website, deoarece arhitectura proiectului este creat˘ a în as ,a fel încât
informat ,iile furnizate pe fiecare pagin˘ a sunt dinamice în funct ,ie de utilizatorul au-
tentificat. Tot în funct ,ie de utilizator sunt stabilite s ,i permisiunile de acces la fiecare
pagin˘ a, dar vom vorbi despre acest lucru în capitolele urm˘ atoare.
O sa încep prin a v˘ a explica de unde a ap˘ arut ideea de a dezvolta aceast˘ a plat-
form˘ a online. Ca s˘ a v˘ a explic de unde a ap˘ arut aceast˘ a idee, o s˘ a încep într-un mod
romantic, adic˘ a cu o nunt˘ a. ¸ Si nu m˘ a refer aici la nunta mea, ci mai exact la nunta
fratelui meu. ¸ Stim cu to¸ tii c˘ a organizarea unei nun¸ ti nu este un lucru atât de simplu,
ci presupune mult˘ a organizare si aranjamente f˘ acute pentru a ie¸ si totul perfect. De-
sigur c˘ a mirii se vor ocupa de multe dintre lucrurile care ¸ tin de nunta lor, îns˘ a totu¸ si
acesta este un eveniment unic in via¸ t˘ a, ¸ si, din punctul meu de vedere, ar trebui ca
lucrurile care pot fi rezolvate ¸ si de alte persoane, s˘ a nu ocupe din timpul mirilor, de-
oarece ei ar trebui s˘ a se bucure de aceast˘ a perioad˘ a din via¸ ta lor. A¸ sadar s˘ a revenim
la acest exemplu concret. La momentul respectiv încercam s˘ a ii ajut ¸ si eu pe cât posi-
bil cu organizarea nun¸ tii. Am primit deci sarcina de a m˘ a ocupa, pe lânga altele, de
organizarea meselor, a persoanelor la mese ¸ si de primirea invita¸ tilor ¸ si conducerea
lor la mese în ziua nun¸ tii. Problemele au ap˘ arut din prisma faptului c˘ a num˘ arul de
invita¸ ti se ridica undeva în jur la 400 de persoane. Prima problem˘ a ar fi aranjarea
fiec˘ arui invitat la mas˘ a. În zona noastr˘ a, cel pu¸ tin, aranjarea la mese se face de cele
mai multe ori de c˘ atre miri, în cazul unei nun¸ ti, sau de c˘ atre s˘ arbatorit, în cazul unui
majorat. Prima ¸ si cea mai simpl˘ a op¸ tiune este s˘ a faci un aranjament în Excel, care
poate fi apoi printat, îns˘ a pentru 400 de persoane acest lucru este pu¸ tin cam dificil,
deoarece trebuie s˘ a ai în minte ¸ si structura meselor ¸ si num˘ arul de locuri la fiecare
mas˘ a când faci aranjamentele. În plus, în cazul în care dore¸ sti s˘ a faci o modificare
ulterioar˘ a, trebuie s˘ a ai grij˘ a s˘ a nu încurci locurile deja repartizate. Pentru a rezolva
aceast˘ a problem˘ a cu aranjarea invita¸ tilor am c˘ autat un software specializat pentru
acest lucru. Printr-o simpl˘ a c˘ autare pe internet am reu¸ sit s˘ a aflu c˘ a nu exist˘ a un ast-
fel de software dezvoltat în limba român˘ a, a¸ sa c˘ a a trebuit s˘ a cump˘ ar o licen¸ t˘ a pentru
un software extern. A doua problem˘ a ar fi primirea invita¸ tilor. În cazul listelor prin-
tate, poate dura câteva zeci de secunde sau chiar minute pân˘ a g˘ ase¸ sti numele unui
invitat printre sute de persoane, ceea ce e cam incomod dac˘ a sunt câteva zeci de
persoane care mai a¸ steapt˘ a la coad˘ a, a¸ sa c˘ a atunci am improvizat o aplica¸ tie mobil˘ a
Android cu posibilitate de search pentru numele sau prenumele unei persoane, sau

1.1. Motivarea alegerii temei 3
c˘ autare dup˘ a num˘ arul mesei. Proiectul curent urm˘ are¸ ste s˘ a rezolve aceste probleme
printr-o interfa¸ t˘ a cât mai simpl˘ a, astfel încât orice persoan˘ a s˘ a poat˘ a folosi aplica¸ tia,
chiar dac˘ a nu are cuno¸ stin¸ te avansate în utilizarea computerelor.

5
Capitolul 2
Tehnologii folosite
2.1 Java
Java este un limbaj de programare de nivel înalt concurent, orientat pe obiecte, pro-
iectat de c˘ atre James Gosling. Scopul acestui limbaj a fost compilarea o singur˘ a dat˘ a
a codului surs˘ a ¸ si apoi rularea pe orice dispozitiv. Java este derivat din limbajul C si
C++, îns˘ a ofer˘ a mai pu¸ tine func¸ tionalit˘ a¸ ti de nivel sc˘ azut decât acestea dou˘ a. [3] [9]
Limbajul Java a fost creat cu urm˘ atoarele scopuri în minte: [9]
1. Trebuie s˘ a fie simplu, orientat pe obiecte ¸ si familiar.
2. Trebuie s˘ a fie robust ¸ si securizat.
3. Trebuie s˘ a fie neutru din punct de vedere arhitectural ¸ si portabil.
4. Trebuie s˘ a aib˘ a o performan¸ t˘ a ridicat˘ a.
5. Trebuie s˘ a fie interpretat, cu fire de execu¸ tie ¸ si dinamic.
A¸ sa arat˘ a exemplul clasic “Hello World” implementat în Java:
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Prima dat˘ a declar˘ am o clas˘ a numit˘ a “HelloWorld” cu ajutorul cuvântului cheie
class. Orice cod scris în Java trebuie s˘ a fac˘ a parte dintr-o clas˘ a. Apoi declar˘ am o
metod˘ a care apar¸ tine acestei clase, numit˘ a main. Cuvântul “main” este un cuvânt
rezervat în Java ¸ si este folosit la denumirea metodei principale a programului. O
metod˘ a denumit˘ a “main” trebuie s˘ a fie public˘ a ¸ si static˘ a ¸ si trebuie s˘ a aib˘ a ca ¸ si pa-
rametrii un tablou de tipul String, denumit prin conven¸ tie “args”, care va con¸ tine
parametrii trimi¸ si din consol˘ a la rularea aplica¸ tiei. Variabila “args” se mai poate ini-
¸ tializa în Java ¸ si sub forma “String…”. Metoda “main” reprezint˘ a punctul de intrare
al aplica¸ tiei, de aici se va începe execu¸ tia codului. Pe urm˘ atoarea linie observ˘ am
invocarea metodei “System.out.println” care va printa în consola implicit˘ a textul pe
care îl trimitem ca ¸ si parametru, adic˘ a în cazul nostru “Hello World!”.
2.1.1 JavaEE
JavaEE este o extensie a limbajului Java care con¸ tine func¸ tionalit˘ a¸ ti în plus, cum ar
fi rularea programelor distribuite sau servicii web. Aplica¸ tiile JavaEE rulate pot fi
microservicii sau chiar servere de aplica¸ tii, care gestioneaz˘ a tranzac¸ tii, asigur˘ a secu-
ritate, scalabilitate, concuren¸ t˘ a ¸ si managementul componentelor pe care le execut˘ a.

6 Capitolul 2. Tehnologii folosite
JavaEE este folosit în: comer¸ t electronic, contabilitate, sisteme informa¸ tionale ban-
care. [8] JavaEE are anumite componente în plus fat ,˘ a de Java, care sunt necesare
în dezvoltarea aplicat ,iilor web. În dezvoltarea propriei aplicat ,ii am folosit aceste
componente disponibile în JavaEE s ,i anume Enterprise Java Beans în implementa-
rea serverului, autentificarea gestionat˘ a de container s ,i JPA, despre care voi vorbi în
continuare.
2.1.2 EJB
Denumirea EJB provine de la prescurtarea în englez˘ a de la Enterprise Java Beans care
face parte din JavaEE s ,i const˘ a într-o arhitectur˘ a creat˘ a pentru a dezvolta aplicat ,ii
robuste, scalabile s ,i performante. O aplicat ,ie EJB poate fi lansat˘ a pe orice server care
implementeaz˘ a specificat ,iile standard JavaEE. [4]
EJB este împ˘ art ,it în trei categorii s ,i anume: [4]
1. Session Bean. Session Bean este o component˘ a care stocheaz˘ a date pentru un
anumit utilizator pentru o singur˘ a sesiune. Aceast˘ a component˘ a poate fi sta-
teful sau stateless. O component˘ a stateful îs ,i p˘ astreaz˘ a starea conversat ,ionala
cu clientul, pe când o component˘ a stateless este folosit˘ a pentru operat ,iuni in-
dependente. [12] [13] Componenta Session Bean nu utilizeaz˘ a as ,a multe re-
surse ca s ,i componentele Entity Bean. O component˘ a Session Bean este dis-
trus˘ a atunci când sesiunea utilizatorului se termin˘ a.
2. Entity Bean. O component˘ a Entity Bean reprezint˘ a stocare de date persistent˘ a.
Datele utilizatorilor pot fi salvate într-o baz˘ a de date cu ajutorul acestei com-
ponente s ,i pot apoi s˘ a fie recuperate din baza de date.
3. Message Driven Bean. Dup˘ a cum îi spune s ,i numele, o component˘ a Message
Driven Bean este folosit˘ a la trimiterea mesajelor. În aplicat ,ia curent˘ a nu am
avut nevoie s˘ a folosesc aceast˘ a component˘ a.
Printre beneficiile folosirii arhitecturii EJB în implementarea aplicat ,iilor se nu-
m˘ ar˘ a: [4]
Simplificarea dezvolt˘ arii în aplicat ,iile de scar˘ a larg˘ a.
Serverul de aplicat ,ie EJB ofer˘ a servicii la nivel de sistem cum ar fi manage-
mentul tranzact ,iilor, înregistrarea erorilor, echilibrarea înc˘ arc˘ arii serverului,
mecanisme de persistent ,˘ a a datelor s ,i multe altele. Dezvoltatorii trebuie s˘ a
se concentreze doar pe implementarea propriu zis˘ a a aplicat ,iei.
Containerul EJB se ocup˘ a cu crearea s ,i distrugerea instant ,elor EJB, astfel dezvol-
tatorul nu trebuie s˘ a îs ,i fac˘ a probleme cu distrugerea obiectelor dup˘ a ce nu mai
are nevoie de ele.
2.1.3 Autentificarea EJB
Înainte s˘ a vorbesc despre autentificarea EJB, as ,dori s˘ a clarific c˘ at ,iva termeni pe care
îi voi folosi referitor la autentificare s ,i la securitatea datelor, s ,i anume:
Autentificarea este procesul prin care se verific˘ a faptul c˘ a utilizatorul care ac-
ceseaz˘ a aplicat ,ia este autentic.
Autorizarea este procesul prin care se verific˘ a daca utilizatorul autentificat are
drepturi de acces la o anumit˘ a resurs˘ a sau informat ,ie.

2.1. Java 7
Utilizatorul este acea persoan˘ a care acceseaz˘ a aplicat ,ia.
Un grup de utilizatori reprezint˘ a nis ,te utilizatori care fac parte dintr-un grup
care are acces la anumite resurse, de exemplu grupul de administratori ai sis-
temului.
Rolurile utilizatorilor reprezint˘ a permisiunea pe care o are un utilizator de a
accesa o resurs˘ a.
Containerul EJB ofer˘ a anumite unelte pentru securizarea componentelor EJB,
care includ atât autentificarea cât s ,i autorizarea utilizatorilor. Componentele EJB
au dou˘ a metode prin care pot fi securizate s ,i anume:
1. Securitate declarativ˘ a. Este de preferat s˘ a fie folosit˘ a aceast˘ a metod˘ a de securi-
tate. Aceast˘ a metod˘ a exprim˘ a cerint ,ele de securitate ale unei componente prin
folosirea anotat ,iilor. Prezent ,a unei anotat ,ii pentru o metod˘ a dintr-o clas˘ a EJB
este tot ceea ce este necesar pentru protect ,ia acelei metode s ,i, în unele cazuri,
pentru autentificare. Tot prin aceast˘ a metod˘ a declarativ˘ a dezvoltatorul poate
crea roluri pentru utilizatori care le vor da drepturile de acces la resursele ser-
verului. Când se acceseaz˘ a o metod˘ a protejat˘ a cu o anotat ,ie de securitate, sis-
temul va cere automat autentificarea utilizatorului. Acestuia i se va cere un
nume s ,i o parol˘ a care vor fi comparate cu datele dintr-o baz˘ a de date. Dac˘ a
utilizatorul este g˘ asit s ,i parola este valid˘ a, rolurile pe care le are utilizatorul
vor fi comparate cu rolurile necesare acces˘ arii acelei metode securizate. Dac˘ a
utilizatorul este autentificat s ,i are rolurile necesare pentru a accesa metoda,
informat ,iile vor fi returnate utilizatorului. [14]
2. Securitate programatic˘ a. Prin aceast˘ a metod˘ a de securitate se adaug˘ a cod în
interiorul unei metode care va accesa identitatea utilizatorului care dores ,te
s˘ a acceseze informat ,iile s ,i va folosi aceast˘ a identitate pentru a lua decizii de
securitate. Aceast˘ a metod˘ a de securitate este folositoare atunci când metoda
declarativ˘ a nu poate fi folosit˘ a pentru a implementa modelul specific de secu-
ritate a aplicat ,iei respective.În general, managementul securit˘ at ,ii ar trebui s˘ a
fie implementat în as ,a fel încât s˘ a fie transparent pentru metodele aplicat ,iei.
[14]
2.1.4 JPA
JPA este o interfat ,˘ a care specific˘ a managementul datelor relat ,ionale în aplicat ,ii Ja-
vaEE. JPA foloses ,te entit˘ at ,i pentru a specifica datele persistente. O entitate per-
sistent˘ a este o clas˘ a Java a c˘ arei stare este salvat˘ a într-o baz˘ a de date relat ,ional˘ a.
Instant ,e din aceste entit˘ at ,i corespund rândurilor individuale din tabele. Entit˘ at ,ile au
deobicei relat ,ii cu alte entit˘ at ,i, care sunt reprezentate prin metadate. Aceste entit˘ at ,i
s,i relat ,ii metadata pot fi specificate la nivel de clas˘ a prin folosirea anotat ,iilor sau într-
un fis ,ier separat XML denumit descriptor care este distribuit cu aplicat ,ia. Totodat˘ a
JPA defines ,te s ,i un limbaj de interogare specific denumit Java Persistence Query
Language sau, pe scurt, JPQL. JPQL este un limbaj de interogare independent de
platform˘ a, orientat pe obiecte. JPQL este folosit la interogarea entit˘ at ,ilor stocate în
baza de date. Interog˘ arile sunt asem˘ an˘ atoare cu SQL ca s ,i sintax˘ a, dar opereaz˘ a cu
obiectele entit˘ at ,i, s,i nu direct cu tabelele din baza de date. [6] [7]

8 Capitolul 2. Tehnologii folosite
2.2 Wildfly
Ca s ,i server în implementarea aplicat ,iei am ales s˘ a folosesc Wildfly deoarece, în pri-
mul rând, este un server open source, iar în al doilea rând am mai lucrat cu acest
server s ,i sunt familiar cu uneltele pe care le ofer˘ a s ,i configurat ,iile necesare.
Wildfly a fost cunoscut în trecut ca s ,i JBoss, el fiind un server de aplicat ,ie dezvol-
tat de compania Red Hat. Wildfly este scris în Java s ,i implementeaz˘ a specificat ,iile
JavaEE. Poate rula pe mai multe sisteme de operare. Este un server gratuit, open-
source, cu o licent ,˘ a de tip LGPL. [15]
TABELA 2.1: Comparat ,ie între diferite servere de aplicat ,ii pentru
Java. [10]
Server Companie Edit ,ie Ultima lansare Compatibilitate JavaEE Servlet JSP HTTP/2 Licent ,˘ a
GlassFish GlassFish Community 5.0.0 2017-09-21 8 complet 3.1 2.3 NU Gratuit CDDL, GPL
Jetty Eclipse Foundation 9.3.3 2015-08-27 7 part ,ial 3.1 2.3 DA Gratuit Apache 2.0, EPL
Tomcat Apache Software Foundation 9.0.8 2018-05-03 8 part ,ial 4.0 2.3 DA Gratuit Apache v2
Wildfly Red Hat 12.0.0.Final 2018-02-28 7 complet, 8 previzualizare 4.0 2.3 DA Gratuit LGPL
2.3 PostgreSQL
PostgreSQL sau Postgres este o baz˘ a de date obiect-relat ,ional˘ a care pune accent pe
extensibilitate s ,i conformitatea cu standarde. Fiind un server de baze de date, prin-
cipalele funct ,ii ale acestuia sunt acelea de a stoca date în mod securizat s ,i s˘ a re-
turneze datele respective ca s ,i r˘ aspuns la cererile altor aplicat ,ii software. Poate s˘ a
sust ,in˘ a o capacitate de lucru de la aplicat ,ii simple care ruleaz˘ a pe un singur com-
puter, pân˘ a la aplicat ,ii web cu mult ,i utilizatori concurent ,i. Pe sistemul de operare
macOS Server PostgreSQL este baza de date implicit˘ a. Totodat˘ a este disponibil˘ a
s,i pentru sistemele de operare Microsoft Windows sau Linux. PostgreSQL suport˘ a
declans ,atoare(triggers), chei str˘ aine, funct ,ii s,i proceduri stocate, s ,i alte extensii. Din
punct de vedere legal este dezvoltat de PostgreSQL Global Development Group s ,i
are o licent ,˘ a de tip open-source gratuit˘ a. [11]
PostgreSQL se conformeaz˘ a standardului ACID s ,i este tranzact ,ional˘ a. Standar-
dul ACID provine de la init ,ialele în englez˘ a Atomicity, Consistency, Isolation, Du-
rability, s ,i reprezint˘ a faptul c˘ a tranzact ,iile unei baze de date trebuie s˘ a garanteze
valididatea chiar s ,i în cazul unor fenomene precum erori de sistem, c˘ aderi de ten-
siune sau alte erori care duc la incapacitarea sistemului. [11] [1]
PostgreSQL are inclus replicare binar˘ a bazat˘ a pe trimiterea modific˘ arilor la no-
durile replicate în mod asincron, cu posibilitatea de a executa interog˘ ari read-only
asupra acestor noduri replicate. Acest lucru permite împ˘ art ,irea traficului care doar
cites ,te datele la mai multe noduri. Aplicat ,iile mai vechi care permiteau acest tip
de scalabilitate se bazau pe ad˘ augarea declans ,atoarelor(triggers) pe nodul principal,
înc˘ arcând-ul în acest fel cu mai multe operat ,iuni de procesare. PostgreSQL include
s,i replicare sincron˘ a care asigur˘ a faptul c˘ a, pentru fiecare tranzact ,ie de scriere, no-
dul principal as ,teapt˘ a pân˘ a cel put ,in o replic˘ a a înregistrat datele. Poate exista o
combinat ,ie de servere asincrone s ,i sincrone în as ,teptare. Replicare sincron˘ a multi-
master nu este inclus˘ a la momentul curent în nucleul PostgreSQL. [11]
PostgreSQL ofer˘ a suport nativ pentru indexare. Indexarea în Postgres are urm˘ a-
toarele caracteristici: [11]
Indecs ,i expresie pot fi creat ,i cu un index al unui rezultat a unei expresii sau
funct ,ii, în loc de o valoare simpl˘ a a unei coloane.

2.4. Hibernate 9
Indecs ,i part ,iali, care indexeaz˘ a doar o parte a unei tabele, pot fi creat ,i ad˘ au-
gând o clauz˘ a WHERE la sfârs ,itul comenzii CREATE INDEX.
Planificatorul este capabil s˘ a foloseasc˘ a mai mult ,i indecs ,i împreun˘ a pentru a
satisface interog˘ ari complexe.
Indexarea k-NN(nearest neighbors-cel mai apropiat vecin) asigur˘ a o c˘ autare
eficient˘ a a celei mai apropiate valori de aceea specificat˘ a, f˘ ar˘ a o c˘ autare exha-
ustiv˘ a. Este folositoare pentru g˘ asirea cuvintelor similare sau a locat ,iilor cu
ajutorul datelor geospat ,iale.
De la PostgreSQL 9.2 încoace este posibil˘ a scanarea bazat˘ a pe indecs ,i, care
poate înc˘ arca datele direct din indecs ,i, f˘ ar˘ a a mai fi nevoie s˘ a apeleze la tabela
principal˘ a.
2.4 Hibernate
Hibernate este o unealt˘ a pentru limbajul Java pentru maparea obiect-relat ,ie. Ofer˘ a
posibilitatea de a mapa un model orientat pe obiecte la o baz˘ a de date relat ,ional˘ a.
Hibernate este gratuit având o licent ,˘ a de tip open-source GNU LGPL 2.1. Principala
atribut ,ie a uneltei Hibernate este de a mapa clase Java la tabele din baza de date s ,i
maparea tipurilor de date din Java la tipurile de date SQL. Hibernate ofer˘ a deaseme-
nea s ,i facilit˘ at ,i de interogare. Genereaz˘ a interog˘ ari SQL s ,i elibereaz˘ a dezvoltatorul
de necesitatea de conversie manual˘ a a rezultatelor interog˘ arilor. Maparea claselor
Java la tabele se poate face cu ajutorul anotat ,iilor la nivel de clas˘ a. Aceste anotat ,ii
pot fi folosite pentru a t ,ine baza de date la curent cu modific˘ arile structurale ale
claselor. Hibernate ofer˘ a s ,i unelte pentru a specifica relat ,iile one-to-many sau many-
to-many între clase. În plus fat ,˘ a de aceste relat ,ii, Hibernate ofer˘ a s ,i unelte pentru
specificarea relat ,iilor reflexive atunci când un obiect are o relat ,ie one-to-many cu
alte instant ,e ale aceluias ,i tip de clas˘ a. [5]
Hibernate suport˘ a maparea tipurilor de date specificate de client. Acest lucru fac
posibile urm˘ atoarele scenarii: [5]
Înlocuirea tipului SQL implicit când se mapeaz˘ a o coloan˘ a la o proprietate.
Maparea Enum-urilor Java la coloane ca s ,i cum ar fi propriet˘ at ,i obis ,nuite.
Maparea unei singure propriet˘ at ,i la mai multe coloane.
Hibernate poate fi folosit atât în aplicat ,ii Java individuale, cât s ,i în aplicat ,ii Ja-
vaEE care folosesc servlet-uri s ,i EJB-uri. Poate fi integrat s ,i în alte limbaje de pro-
gramare. De exemplu, Adobe a integrat Hibernate în versiunea 9 a platformei de
dezvoltare web ColdFusion, care ruleaz˘ a pe servere de aplicat ,ie JavaEE. Din 2010
Hibernate a devenit o implementare certificat˘ a a specificat ,iilor JPA fiind în confor-
mitate cu standardul JSR 317. [5]
2.5 Wicket
Apache Wicket, sau simplu Wicket, este un framework web de categorie us ,oar˘ a ba-
zat pe componente pentru limbajul de programare Java, similar ca s ,i concept cu
JavaServer Faces(JSF). Init ,ial a fost scris de c˘ atre Jonathan Locke in 2004. A devenit
un proiect Apache în iunie 2007. [2]

10 Capitolul 2. Tehnologii folosite
Modelele tradit ,ionale model-view-controller(MVC) funct ,ioneaz˘ a pe baz˘ a de ce-
reri s ,i pagini întregi. Fiecare cerere este atribuit˘ a unei metode dintr-un obiect contro-
ller, care apoi genereaz˘ a r˘ aspunsul în întregime, deobicei prin luarea datelor dintr-
un model pentru a popula un view scris într-un limbaj special de marcare. Acest
lucru ment ,ine fluxul de control al aplicat ,iei simplu s ,i clar, îns˘ a poate face reutiliza-
rea codului dificil˘ a. Wicket, în schimb, este creat asem˘ an˘ ator framework-urilor GUI
cum ar fi Swing. Aplicat ,iile Wicket sunt arbori de componente care folosesc metode
delegate pentru a react ,iona cererilor HTTP în acelas ,i fel în care componentele Swing
react ,ioneaz˘ a la evenimente de la mouse sau tastatur˘ a. Wicket este categorizat ca s ,i
un framework bazat pe componente. [2]
Wicket foloses ,te XHTML ca s ,i s,ablon. Fiecare component˘ a este legat˘ a de un
element numit în XHTML s ,i devine responsabil pentru randarea acelui element în
forma final˘ a. O pagin˘ a este componenta cea mai de sus s ,i este legat˘ a de exact un
s,ablon XHTML. Folosing o etichet˘ a special˘ a, un grup de componente individuale
poate fi abstractizat într-o singur˘ a component˘ a numit˘ a panou, care poate fi apoi re-
folosit˘ a în alte pagini sau chiar alte panouri. Fiecare component˘ a este sust ,inut˘ a de
modelul s˘ au, care reprezint˘ a starea componentei. Wicket nu are cunos ,tint ,˘ a de fap-
tul cum componentele s ,i modelele interact ,ioneaz˘ a între ele, care sunt tratate ca s ,i
obiecte opace serializate automat s ,i persistate între cereri. Modelele mai complexe
pot fi f˘ acute detas ,abile s ,i pot oferi cârlige prin care îs ,i aranjeaz˘ a propria stocare s ,i
restaurare la începutul s ,i sfârs ,itul fiec˘ arui ciclu de cerere. Wicket nu impune niciun
strat specific de persistent ,˘ a, as ,a c˘ a aplicat ,iile folosesc deobicei o combinat ,ie dintre
Hibernate, EJB-uri sau obiecte simple Java ca s ,i modele. În Wicket, toat˘ a starea la
nivel de server este gestionat˘ a automat. Nu ar trebui sa folosit ,i niciodat˘ a un obiect
HttpSession pentru a stoca starea. Ci, în schimb, starea este asociat˘ a cu componen-
tele. Fiecare pagin˘ a de pe server det ,ine o ierarhie imbricat˘ a de componente stateful,
unde fiecare component˘ a este, în definitiv, un obiect Java. [2]
Wicket este bazat pe simplitate. Wicket nu are fis ,iere de configurat ,ie care trebuie
înv˘ at ,ate. Este este o libr˘ arie simpl˘ a de clase care are o abordare consistent˘ a asupra
structurii componetelor. [2]
2.6 Bootstrap
2.7 SVG.js
2.8 Gradle
2.9 Git

11
Capitolul 3
Prezentarea proiectului
3.1 Main Section 1
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam ultricies lacinia
euismod. Nam tempus risus in dolor rhoncus in interdum enim tincidunt. Donec
vel nunc neque. In condimentum ullamcorper quam non consequat. Fusce sagittis
tempor feugiat. Fusce magna erat, molestie eu convallis ut, tempus sed arcu. Qu-
isque molestie, ante a tincidunt ullamcorper, sapien enim dignissim lacus, in semper
nibh erat lobortis purus. Integer dapibus ligula ac risus convallis pellentesque.
3.1.1 Subsection 1
Nunc posuere quam at lectus tristique eu ultrices augue venenatis. Vestibulum ante
ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam erat
volutpat. Vivamus sodales tortor eget quam adipiscing in vulputate ante ullamcor-
per. Sed eros ante, lacinia et sollicitudin et, aliquam sit amet augue. In hac habitasse
platea dictumst.
3.1.2 Subsection 2
Morbi rutrum odio eget arcu adipiscing sodales. Aenean et purus a est pulvinar pe-
llentesque. Cras in elit neque, quis varius elit. Phasellus fringilla, nibh eu tempus
venenatis, dolor elit posuere quam, quis adipiscing urna leo nec orci. Sed nec nulla
auctor odio aliquet consequat. Ut nec nulla in ante ullamcorper aliquam at sed dolor.
Phasellus fermentum magna in augue gravida cursus. Cras sed pretium lorem. Pe-
llentesque eget ornare odio. Proin accumsan, massa viverra cursus pharetra, ipsum
nisi lobortis velit, a malesuada dolor lorem eu neque.
3.2 Main Section 2
Sed ullamcorper quam eu nisl interdum at interdum enim egestas. Aliquam placerat
justo sed lectus lobortis ut porta nisl porttitor. Vestibulum mi dolor, lacinia molestie
gravida at, tempus vitae ligula. Donec eget quam sapien, in viverra eros. Donec pe-
llentesque justo a massa fringilla non vestibulum metus vestibulum. Vestibulum in
orci quis felis tempor lacinia. Vivamus ornare ultrices facilisis. Ut hendrerit volutpat
vulputate. Morbi condimentum venenatis augue, id porta ipsum vulputate in. Cu-
rabitur luctus tempus justo. Vestibulum risus lectus, adipiscing nec condimentum
quis, condimentum nec nisl. Aliquam dictum sagittis velit sed iaculis. Morbi tristi-
que augue sit amet nulla pulvinar id facilisis ligula mollis. Nam elit libero, tincidunt
ut aliquam at, molestie in quam. Aenean rhoncus vehicula hendrerit.

13
Capitolul 4
Concluzii
4.1 Main Section 1
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam ultricies lacinia
euismod. Nam tempus risus in dolor rhoncus in interdum enim tincidunt. Donec
vel nunc neque. In condimentum ullamcorper quam non consequat. Fusce sagittis
tempor feugiat. Fusce magna erat, molestie eu convallis ut, tempus sed arcu. Qu-
isque molestie, ante a tincidunt ullamcorper, sapien enim dignissim lacus, in semper
nibh erat lobortis purus. Integer dapibus ligula ac risus convallis pellentesque.
4.1.1 Subsection 1
Nunc posuere quam at lectus tristique eu ultrices augue venenatis. Vestibulum ante
ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam erat
volutpat. Vivamus sodales tortor eget quam adipiscing in vulputate ante ullamcor-
per. Sed eros ante, lacinia et sollicitudin et, aliquam sit amet augue. In hac habitasse
platea dictumst.
4.1.2 Subsection 2
Morbi rutrum odio eget arcu adipiscing sodales. Aenean et purus a est pulvinar pe-
llentesque. Cras in elit neque, quis varius elit. Phasellus fringilla, nibh eu tempus
venenatis, dolor elit posuere quam, quis adipiscing urna leo nec orci. Sed nec nulla
auctor odio aliquet consequat. Ut nec nulla in ante ullamcorper aliquam at sed dolor.
Phasellus fermentum magna in augue gravida cursus. Cras sed pretium lorem. Pe-
llentesque eget ornare odio. Proin accumsan, massa viverra cursus pharetra, ipsum
nisi lobortis velit, a malesuada dolor lorem eu neque.
4.2 Main Section 2
Sed ullamcorper quam eu nisl interdum at interdum enim egestas. Aliquam placerat
justo sed lectus lobortis ut porta nisl porttitor. Vestibulum mi dolor, lacinia molestie
gravida at, tempus vitae ligula. Donec eget quam sapien, in viverra eros. Donec pe-
llentesque justo a massa fringilla non vestibulum metus vestibulum. Vestibulum in
orci quis felis tempor lacinia. Vivamus ornare ultrices facilisis. Ut hendrerit volutpat
vulputate. Morbi condimentum venenatis augue, id porta ipsum vulputate in. Cu-
rabitur luctus tempus justo. Vestibulum risus lectus, adipiscing nec condimentum
quis, condimentum nec nisl. Aliquam dictum sagittis velit sed iaculis. Morbi tristi-
que augue sit amet nulla pulvinar id facilisis ligula mollis. Nam elit libero, tincidunt
ut aliquam at, molestie in quam. Aenean rhoncus vehicula hendrerit.

15
Bibliografie
[1] ACID .URL: https://en.wikipedia.org/wiki/ACID . Consultat la 16.05.2018.
[2] Apache Wicket .URL: https : / / en . wikipedia . org / wiki / Apache _ Wicket . Con-
sultat la 16.05.2018.
[3] James Gosling; Bill Joy; Guy Steele; Gilad Bracha; Alex Buckley. The Java Lan-
guage Specification . 2014. URL: https://docs.oracle.com/javase/specs/jls/
se8/jls8.pdf .
[4] Enterprise Java Beans .URL: https : / / www . tutorialspoint . com / ejb / ejb _
quick_guide.htm . Consultat la 05.05.2018.
[5] Hibernate .URL: https : / / en . wikipedia . org / wiki / Hibernate _ (framework) .
Consultat la 16.05.2018.
[6] Java Persistence API .URL: https://en.wikipedia.org/wiki/Java_Persistence_
API. Consultat la 05.05.2018.
[7] Java Persistence Query Language .URL: https://en.wikipedia.org/wiki/Java_
Persistence_Query_Language . Consultat la 05.05.2018.
[8] Java Platform, Enterprise Edition .URL: https://en.wikipedia.org/wiki/Java_
Platform, _Enterprise_Edition . Consultat la 13.04.2018.
[9] Java (programming language) .URL: https : / / en . wikipedia . org / wiki / Java _
(programming_language) . Consultat la 13.04.2018.
[10] List˘ a cu servere de aplicat ,ie.URL: https : / / en . wikipedia . org / wiki / List _ of _
application_servers#Java . Consultat la 16.05.2018.
[11] PostgreSQL .URL: https://en.wikipedia.org/wiki/PostgreSQL . Consultat la
16.05.2018.
[12] Stateful EJB .URL: https : / / www . tutorialspoint . com / ejb / ejb _ stateful _
beans.htm . Consultat la 05.05.2018.
[13] Stateless EJB .URL: https : / / www . tutorialspoint . com / ejb / ejb _ stateless _
beans.htm . Consultat la 05.05.2018.
[14] The Java EE 6 Tutorial .URL: https : / / docs . oracle . com / javaee / 6 / tutorial /
doc/bnbyl.html . Consultat la 05.05.2018.
[15] WildFly .URL: https : / / en . wikipedia . org / wiki / WildFly . Consultat la
16.05.2018.

17
List˘ a de abrevieri
JEE(sau) JavaEE J avaEnterprise Edition
HTML H yper TextMarkup Language
CSS C ascading Style Sheet
SVG S calable Vector Graphics
WAR W ebApplication Resource (sau) Web application ARchive
EJB E nterprise JavaBeans
API A pplication Programming Interface
JPA J avaPersistence API
SQL S tructured Query Language
JPQL J avaPersistence Query Language
GUI G raphical UserInterface
HTTP H yper textTransfer Protocol
XHTML EX tensible Hyper TextMarkup Language

19
List˘ a de figuri

21
List˘ a de tabele
2.1 Comparat ,ie între diferite servere de aplicat ,ii pentru Java. . . . . . . . . 8

Similar Posts