Programul de studii: [607785]
Programul de studii:
Informatică aplicată
Lucrare de licență
Optimizarea fluxurilor informaționale
într-o clinică medicală
Autor:
Coordonator științific:Berescu Andreea-Lavinia
Prof. Dr. Bocu Dorin
Brașov, 2019
Cuprins
1 Introducere 3
1.1 Motivația alegerii temei . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Structura lucrării . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 T ehnologiile utilizate 4
2.1 T ehnologii utilizate în procesul de dezvoltare . . . . . . . . . . . . . . 4
2.1.1 Apache Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 T ehnologii folosite la nivel de backend . . . . . . . . . . . . . . . . . . 7
2.2.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.2 Spring Framework . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.3 Spring Boot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.4 Servicii REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.5 PostrgeSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.6 Java Persistence API (JPA) . . . . . . . . . . . . . . . . . . . . . 16
2.2.7 Hibernate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 T ehnologii folosite la nivel de frontend . . . . . . . . . . . . . . . . . . 19
1
2.3.1 T ypescript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.2 Angular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.3 Angular Material . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.3.4 Hypertext Markup Language (HTML) . . . . . . . . . . . . . . 20
2.3.5 Cascading Style Sheets (CSS) . . . . . . . . . . . . . . . . . . . 20
3 Arhitectura aplicației 21
4 Prezentarea aplicației 22
5 Concluzii și direcții de dezvoltare 23
2
Capitolul 1
Introducere
1.1 Motivația alegerii temei
1.2 Structura lucrării
3
Capitolul 2
T ehnologiile utilizate
2.1 T ehnologii utilizate în procesul de dezvoltare
2.1.1 Apache Maven
Cuvântul „Maven” provine din limba idiș (un dialect sudic al limbii germane) și are
înțelesul de „acumulator de cunoștiințe” , astfel putem deduce ce este de fapt Maven:
un instrument care deține toate informațiile necesare descrierii procesului de build al
proiectului software și caracterizării dependințelor acestuia. Maven poate gestiona
construirea, raportarea și documentarea proiectului.
Maven[1] face parte din fundația Apache Software și este scris în limbajul Java.
Proiectele sunt caracterizate printr-unul sau mai multe fișiere XML (Extensible Mar-
kup Language), denumite POM-uri (Project Object Model). Fișierul POM principal
conține informații despre dependințele proiectului, modulele externe, directoarele și
plug-in-urile necesare.
Un Project Object Model (POM) oferă toate configurațiile pentru un singur proiect.
Configurația generală acoperă numele proiectului, proprietarul acestuia și dependin-
țele acestuia de alte proiecte. Se pot configura, de asemenea, fazele procesului de
build, care sunt implementate de plug-in-uri. De exemplu, se poate configura plug-
in-ul compilatorului pentru a folosi Java versiunea 1.5 pentru compilare. Proiectele
mai mari ar trebui împărțite în mai multe module sau subproiecte, fiecare având pro-
1https:/ /en.wikipedia.org/wiki/Apache_Maven
4
Figura 2.1: Exemplu minimal de fișier pom.xml1
priul POM. Se poate scrie un POM rădăcină prin care se pot compila toate modulele
cu o singură comandă. POM-urile pot moșteni, de asemenea, configurația de la alte
POM-uri. T oate POM-urile moștenesc de la Super POM în mod implicit. Super POM
oferă configurația implictă, cum ar fi directoarele sursă sau plug-in-urile implicite.
Maven descarcă dinamic bibliotecile Java și plug-in-urile Maven din unul sau mai
multe repository-uri și le stochează în cache-ul local, acest lucru fiind cel mai im-
portant avantaj al său. De asemenea, Maven dispune de obiective predefinite pentru
efectuarea unor sarcini bine definite, cum ar fi compilarea codului sursă, recompilarea
sa, instalarea, curățarea dependințelor și multe alte. Maven este construit folosind o
arhitectură bazată pe plug-in-uri care îi permite să utilizeze orice aplicație controlată
prin intrarea standard. Astfel, i se permite oricui să scrie plug-in-uri cu instrumente
de build (de exemplu, compilatoare) pentru oricare alt limbaj, însă suportul și utiliza-
rea altor limbaje, cu excepția limbajului Java, sunt minime.
Structura directorului unui proiect Maven este următoarea:
5
•project home – Conține fișierul pom.xml și toate celelalte subdirectoare;
•src/main/java – Conține codul sursă scris în limbajul Java al proiectului;
•src/main/resources – Conține resursele proiectului, cum ar fi fișierele pentru
proprietăți;
•src/test/java – Conține codul sursă scris în limbajul Java al testelor proiectului
(teste JUnit sau T estNG, de exemplu);
•src/test/resources – Conține resursele necesare pentru testarea proiectului.
Figura 2.2: Structura directorului unui proiect Maven2
Ciclul de viață al unui build reprezintă o listă de faze pentru a da o ordine execu-
ției programului. Spre exemplu, ciclul de viață implicit cuprinde următoarele etape:
validare, compilare, testare, împachetare, verificare, instalare, implementare.
2https:/ /www.dineshonjava.com/maven-directory-structure/
6
2.2 T ehnologii folosite la nivel de backend
2.2.1 Java
Limbajul de programare Java[2], dezvoltat la Sun Microsystems sub îndrumarea
lui James Gosling și a lui Bill Joy, a fost proiectat să fie un limbaj de programare inde-
pendent de mașină care să fie suficient de sigur pentru a traversa rețelele și suficient
de puternic pentru a înlocui codul executabil nativ.
Java este un limbaj de programare atât compilat, cât și interpretat. Codul sursă
Java ete transformat în simple instrucțiuni binare, asemănătoare codului mașinii
obișnuite cu microprocesoare. Codul binar compilat este executat de un interpretor
Java în timpul rulării aplicației. Datorită faptului că interpretorul Java poate fi
executat ca o aplicație independentă, coduul sursă Java este implicit portabil. Astfel,
o aplicație scrisă în limbajul Java poate rula pe orice platformă care deține un Java
runtime enviroment.
Figura 2.3: Java runtime enviroment3
3Patrick Niemeyer & Daniel Leuck. Learning Java, 4th EdiƟon
7
Au fost cinci obiective principale în crearea limbajului de programare Java:
• T rebuie să fie simplu, obiect orientat și familiar;
• T rebuie să fie robust și sigur;
• T rebuie să fie neutru din punct de vedere al arhitecturii și portabil;
• T rebuie să execute cu performanțe ridicate;
• T rebuie interpretat, împărțit pe fire de execuție și dinamic.
Unitatea fundamentală a codului Java este clasa. Ca și în alte limbaje de progra-
mare obiect orientate, clasele sunt componente ale aplicațiilor care dețin cod și date
executabile. Clasele compilate Java sunt distribuite într-un format universal binar
care conține cod binar Java și alte informații despre clasă.
Sintaxa Java[3] este în mare măsură influențată de limbajul C++. Spre deose-
bire de C++, care combină sintaxa pentru programare structurală, generică și obiect
orientată, Java a fost construit aproape exclusiv ca un limbaj orientat pe obiecte. T ot
codul este scris în interiorul clasei și fiecare element de date este un obiect, cu ex-
cepția tipurilor de date primitive (numere întregi, numere reale, valori booleene și
caractere), care nu sunt obiecte din motive de performanță.
Fișierele sursă trebuie să fie denumite după clasa publică pe care o conțin, adă-
ugând sufixul .java, de exemplu HelloWorldApp.java. Acesta trebuie mai întâi să fie
compilat în cod binar, folosind un compilator Java, producând un fișier numit Hel-
loWorldApp.class. Numai atunci aplicația poate fi executată. Fișierul sursă Java poate
conține numai o clasă publică, dar poate conține mai multe clase cu alt mod decât
modificatorul de acces public și orice număr de clase publice interioare.
Ultima versiune apărută este Java 12, lansată în Martie 2019.
2.2.2 Spring Framework
Framework-ul Spring[4] este un cadru de aplicații open source care urmărește
facilitarea dezvoltării J2EE4. Spring își propune să ajute la structurarea întregii apli-
cații într-o manieră consecventă și productivă, trăgând împreună cadrele unice de
cea mai bună calitate pentru a crea o arhitectură coerentă.
4Java 2 Platform, Enterprise Edition este un set de specificații, care extind Java SE 8 cu specificații
pentru caracteristicile întreprinderii, cum ar fi programarea distribuiă și serviciile web.[5]
8
Framework-ul Spring este cel mai popular cadru de dezvoltare a aplicațiilor
pentru întreprinderile Java. Milioane de dezvoltatori din întreaga lume folosesc
Framework-ul Spring pentru a crea coduri de înaltă performanță, ușor de verificat
și reutilizabile. Acest cadru poate fi utilizat în dezvoltarea oricărei aplicații Java, dar
există extensii pentru construirea aplicațiilor web pe platforma Java EE.
Când vine vorba de dimensiune și transparență, Framework-ul Spring exceleză:
versiunea de bază a cadrului fiind de aproximativ 2 MB.
T ehnologia cu care Spring se afirmă este injectarea dependințelor (DI) a Inversiunii
de Control. Inversiunea de Control (IoC) este un concept general și poate fi exprimat
în mai multe moduri. Injectarea dependințelor este doar un exemplu concret de IoC.
Într-o aplicație Java complexă, clasele ar trebui să fie cât mai independente posibil
unele de altele pentru a crește posibilitatea de reutilizare și testare a lor. Injectarea
dependințelor ajută la formarea unei uniuni a acestor clase și, în același timp, să le
mențină independente.
Conceptul de injectare a dependințelor poate fi explicat astfel: partea de depen-
dință se poate interpreta printr-o asociere între două clase (de exemplu, clasa A de-
pinde de clasa B), iar injectarea presupune ca o clasă să fie introdusă în ală clasă de
către IoC (clasa B va fi injectată în clasa A). Injectarea dependințelor se poate face
prin transmitere ca parametru către constructor a unui obiect de tipul clasei care se
dorește a fi injectată sau folosind metode de setare după ce obiectul a fost instanțiat.
Pe lângă injectarea dependințelor, o altă componentă cheie ale Framework-ului
Spring este cadrul de programare orientat pe aspecte (Aspect Oriented Program-
ming – AOP). Funcțiile care acoperă mai multe puncte ale unei aplicații sunt numite
preocupări transversale, ele sunt conceptula separate de logica aplicației. Există di-
verse exemple de aspecte: logging, tranzacțiile declarative, securitatea, cache-ul.
Unitatea-cheie a modularitășii în programarea orientată pe obiect este clasa, în timp
ce în programarea orientată pe aspect unitatea de modularitate este aspectul. Mo-
dulul AOP al Framework-ului Spring oferă o implementare de programare orientată
spre aspect, care permite definirea unor interceptoare de metode și repere punctu-
ale pentru a decupla cu ușurință codul care implementează funcționalitatea care ar
trebui separată.
Framework-ul Spring are o arhitectură stratificată[6] care conține mai multe mo-
dule. T oate modulele sunt construite pe partea superioară a containerlui principal.
Aceste module oferă tot ceea ce un dezvoltator ar putea avea nevoie pentru a fi uti-
lizat în dezvoltarea aplicațiilor pentru întreprinderi. Arhitectura modulară permite
9
integrarea cu alte cadre fără prea multe bătăi de cap.
Figura 2.4: Arhitectura Framework-ului Spring5
• Modulul Core – Oferă caracteristica injectării dependințelor (DI). Acest modul
conține BeanFactory, o implementare a modelului de fabrică care creează
bean-ul conform configurațiilor furnizate de dezvoltator într-un fișier XML.
• Modulul AOP – Modulul de programare orientat pe aspecte permite dezvol-
tatorilor să definească interceptoare de metode și repere punctuale pentru a
menține preocupările în afară. Este configurat la timpul de execuție, astfel în-
cât etapa de compilare este sărită. Ea vizează gestionarea tranzacțiilor decla-
rative, care este mai ușor de întreținut.
• Modulul DAO : Acesta oferă un strat de abstracție la sarcina de a crea o con-
exiune la baza de date sau de a o elibera. De asemenea, menține o ierarhie a
unor excepții semnificative care să înlocuiască codurile de eroare complicate
5https:/ /dzone.com/articles/spring-framework-architecture
10
de la furnizorii de baze de date specifice. Utilizează AOP pentru a gestiona
tranzacțiile. T ranzacțiile pot fi, de asemena gestionate programatic.
• Modulul ORM : Spring nu oferă propria implementare ORM, dar oferă integra-
rea instrumentelor de mapare obiect relaționale (cum ar fi Hibernate)
• Modulul JEE : Oferă, de asemenea, suport pentru JMX6, JCA7, EJB8și JMS9.
• Modulul Web : Spring vine cu un cadru MVC (Model-View-Controller) care fa-
cilitează dezvoltarea de aplicații web.
2.2.3 Spring Boot
Spring Boot[11] nu este un framework, este o modalitate de a ușura crearea
unei aplicații independente, utilizând configurații minime sau deloc. Este abordarea
dezvoltării unei aplicații bazate pe Spring, cu o configurație mult mai mică. Oferă se-
tări implicite pentru configurarea codului și adnotării pentru a lansa rapid proiectele
Spring. Spring Boot utilizează proiecte Spring existente.
Spring Boot[12] aduce un mare plus dezvoltării aplicațiilor Spring. Principalele
caracteristici aduse de Spring Boot sunt:
• Configurația automată – Spring Boot furnizează automat configurație pentru
funcționalitatea aplicației;
• Dependințe de start – Spring Boot se asigură că toate bibliotecile necesare
funcționalității aplicației sunt adăugate în procesul de build;
• Interfața de linie de comandă – această caracteristică opțională a aplicației
Spring Boot permite scrierea aplicațiilor complete folosind doar codul aplicației,
nu este nevoie de tradiționala metodă de build;
• Actuatorul – oferă o perspectivă asupra a ceea ce se întâmplă în interiorul unei
aplicații Spring Boot în execuție.
6Java Management Extensions este o tehnologie Java conceputa pentru managementul și moni-
torizarea de aplicații, obiecte sistem, dispozitive etc.[7]
7Java EE Connector Architecture este o soluție tehnologică bazată pe Java pentru conectarea ser-
verelor de aplicații și a sistemelor informatice pentru întreprinderi[8]
8Enterprise JavaBeans este unul dintre mai multe API-uri Java pentru construirea modulară a
software-ului întreprinderii.[9]
9API-ul Java Message Service (JMS) este un API middleware orientat pe mesaje Java pentru trimi-
terea de mesaje între doi sau mai mulți clienți.[10]
11
Principalele avantaje ale utilizării Spring Boot:
• Spring Boot reduce timpul de dezvoltare și crește productivitatea.
• Evită scrierea multor coduri, adnotări și configurari XML.
• Oferă serveere HTTP încorporate, cum ar fi T omcat, pentru a dezvolta și testa
aplicațiile web foarte ușor.
• Acesta oferă intrumentului CLI (Command Line Interface) pentru a dezvolta și
testa aplicațiile de tip Spring Boot (Java sau Groovy) din linie de comandă foarte
ușor și rapid.
• Spring Boot oferă o mulțime de plug-in-uri pentru a dezvolta și testa aplicațiile
Spring foarte ușor folosind instrumente de construire precum Maven și Gradle.
• Acesta oferă o mulțime de plug-in-uri pentru a lucra cu bazele de date încor-
porate și în memorie.
2.2.4 Servicii REST
T ransferul de date reprezentativ (REST)[13] este un stil arhitectural software care
definește un set de constrângeri utilizate pentru crearea serviciilor Web. Serviciile
Web modelate conform stilului arhitectural REST , denumite RESTful Web Services
(RWS), asigură interoperabilitatea între sistemele informatice de pe Internet. RWS
permit sistemelor solicitante să acceseze și să manipuleze reprezentările textuale
ale resurselor Web utilizând un set uniform și predefinit de operațiuni simple, bine
definite. În stilul arhitectural REST[14], datele și funcționalitatea sunt considerate
resurse și sunt accesate utilizând identificatori de resurse uniforme (URI). Stilul ar-
hitectural REST constrânge arhitectura la o arhitectură de tip cleint/server și este
proiectat să utilizeze un protocol de comunicație fără stare. de obicei HTTP . În stilul
arhitecturii REST , clienții și serverele fac schimb de reprezentări ale resurselor utili-
zând o interfață și un protocol standardizate.
Constrângerile stilului arhitectural REST afectează următoarele proprietăți arhi-
tecturale:
10https:/ /medium.com/@sagar.mane006/understanding-rest-representational-state-transfer-
85256b9424aa
12
Figura 2.5: Arhitectura Serviciilor Web REST10
• performanța în interacțiunile componentelor, fiind factorul dominant în perfor-
manța percepută de utilizator și eficiența rețelei;
• scalabilitatea care permite suportul unui număr mare de componente și inte-
racțiuni între ele;
• simplitatea unei interfețe uniforme;
• modificabilitatea componentelor pentru a satisface nevoile în schimbare (chiar
și în timp ce aplicația rulează);
• vizibilitatea comunicării între componente de către agenții de servicii;
• portabilitatea componentelor prin mutarea codului de program cu datele;
• fiabilitatea rezistenței la defecțiuni la nivel de sistem în prezența unoor defec-
țiuni în componente, conectori sau date.
13
REST este un model arhitectural care se bazează pe HTTP utilizând cererile și răspun-
surile protocolului, ceea ce înseamnă că serviciile REST pot fi consumate de aproape
orice dispozitiv sau aplicație online.
În arhitectura bazată pe REST , totul este o resursă. O resursă este accesată
printr-o interfață comună bazată pe metodele standard HTTP . Într-o arhitectură
REST , există un server tipic REST care asigură accesul la resurse și clienți REST care
accesează sau modifică resursele. Fiecare resursă ar trebui să suporte operatiile
standard HTTP (GET , POST , PUT , DELETE). Resursele sunt identificate prin ID-uri
globale – URI-uri.
Un RESTful Web Service se bazează pe metodele HTTP și pe conceptele arhi-
tecturii REST . Acesta definește tipic un URI de bază pentru resurse și tipurile MIME
(Multipurpose Internet Mail Extensions) suportate (XML, T ext, JSON, etc) și setul de
operații HTTP . Acese metode standard sunt:
• GET – definește un acces la citirea unei resurse, fără efecte secundare. Resursa
nu este niciodată alterată în urma unei cerei GET;
• POST – creează o nouă resursă, trebuie să fie idempotentă;
• PUT – actualizează resursa existentă sau creează o nouă resursă;
• DELETE – șterge o resursă; operația trebuie să fie idempotentă, o repetare a
cererii nu trebuie să producă efecte suplimentare primei cereri.
Utilizarea unui API (Application programming interface) care respectă constrân-
gerile arhitecturii REST va face ca arhitectura aplicației să fie mai curată, făcând mai
ușoară adăugarea de funcții și remedierea erorilor în timp ce proiectul progresează.
În Java, suportul pentru arhitectura REST este reprezentat de Java API pentru
RESTful Web Services (JAX-RS)[15]. JAX-RS utilizează adnotări pentru a simplifica
dezvoltarea și implementarea serviciilor web.
Cele mai importante adnotări JAX-RS sunt:
• @Path – folosit pentru a specifica calea relativă a clasei. Putem obține URI-ul
unei servicii web prin scanarea valorii adnotării căii;
• @GET ,@PUT ,@POST ,@DELETE și @HEAD – folosite pentru a specifica tipul
cererii HTTP pentru o metodă;
14
• @Produces ,@Consumes – folosite pentru a specifica tipul cererii și al răspun-
sului;
• @PathParam – utilizat pentru legarea parametrului metodei la valoarea path-
ului prin parsarea acestuia.
2.2.5 PostrgeSQL
PostgreSQL[16], cunoscut și sub numele de Postregs, este un sistem de gestio-
nare a bazelor de date relaționale open source care subliniază extensibilitatea și res-
pectarea standardelor tehnice. PostreSQL prezintă tranzacții cu proprietățiile ACID
(Atomicitate, Consistență, Izolare, Durabilitate), view-uri actualizabile automat, tri-
ggere, chei străine și proceduri stocate.
PostgreSQL gestionează concurența prin controlul concurenței cu mai multe ver-
siuni (MVCC), care dă fiecărei tranzacții o copie actuală a stării curente a bazei de date,
permițând modificări fără a afecta alte tranzacții. Acest lucru elimină în mare măsură
nevoia de blocări de citire și asigură că baza de date menține principiile ACID. Pos-
tgreSQL oferă trei niveluri de izolare a tranzacțiilor: Read Committed, Repeatable
Read și Serializable. Deoarece PostgreSQL este imun la așa zisele „citiri murdare” ,
solicitând un nivel de izolare a tranzacțiilor Read Uncommitted, el oferă nivelul Read
Committed în schimb. PostrgreSQL suportă serializarea completă prin metoda SSI
(Serializable Snapshot Isolation).
Sistemul de gestiune a bazelor de date PostgreSql, recunoaște un număr foarte
mare de tipuri de date dintre care amintim tipurile de date primitive: Integer, Nu-
meric, String, Boolean, tipurile de date structurate: Date/Time, Array, Range, UUID
precum și documente, de exemplu JSON și XML. De asemenea PostgreSql permite
utilizatorului să proiecteze și să implementeze cu ușurință tipuri de date proprii.
PostgreSql asigură interfețe pentru toate limbajele de programare importante
cum ar fi Java, C, Perl, Python T cl și PHP . De asemenea, sistemul de gestiune Pos-
tgreSql rulează pe toate sistemele de operare importante, se poate lucra atât în sis-
temele UNIX cât și pe alte platforme, de exemplu Microsoft Windows, devenind unul
dintre cele mai populare sisteme de gestiune a bazelor de date ales atât de progra-
matori cât și de organizații.
PostgreSql[17] este foarte apreciat deoarece vine cu multe caracteristici menite
să ajute dezvoltatorii să construiască aplicații, caracterisitici pe care administratorii
le folosesc pentru a proteja integritatea datelor, și de asemenea ajută la gestiunea
15
datelor indiferent de cât de mare sau de mic este setul de date. Adesea bazele de date
relaționale nu reprezintă soluția adecvată pentru modelarea unor scenarii complexe,
însă PostgreSql asigură facilități puternice care permit un design de software mai
complex decât ar fi posibil cu o bază de date relațională. Un alt avantaj cu care vine
PostgreSql, în afara faptului că este open source, este și foarte extensibil, deoarece
se pot defini propriile tipuri de date, se pot defini funcții personalizate, sau putem
scrie cod în diferite limbaje de programare fără a fi nevoie de o recompilare a bazei
de date.
2.2.6 Java Persistence API (JPA)
Java Persistence API (JPA)[18] este standardul Java pentru maparea obiecelor
Java într-o bază de date relațională. Maparea obiectelor Java către tabelele bazei
de date și invers se numește mapare obiect-relațională (ORM). JPA este o posibilă
abordare a ORM. Prin intermediul JPA, se pot stoca, actualiza și prelua date din baze
de date relaționale prin intermediul obiectelor Java și invers.
JPA este o specificație și sunt disponibile câteva implementări ale acesteia. Im-
plementările populare sunt Hibernate, EclipseLink și Apache OpenJPA. Implementa-
rea de referință a JPA este EclipseLink. JPA permite lucrul direct cu obiecte, eliminând
instrucțiunile SQL.
Figura 2.6: Arhitectura ORM11
11https:/ /www.tutorialspoint.com/jpa/jpa_orm_components.htm
16
Maparea între obiectele Java și tabelele bazei de date este definită prin interme-
diul metadatelor de persistență. Furnizorul JPA va utiliza informațiile despre metada-
tele de persistență pentru a efectua operațiile corecte ale bazei de date. Metadatele
JPA sunt definite de obicei prin adnotări în clasa Java. Ca alternativă, metadatele pot
fi definite prin XML sau printr-o combinație a celor două. O configurație XML supras-
crie adnotările.
Câteva dintre principalele adnotări JPA sunt:
• @Entity – permite ca o clasă Java, care în mod implicit nu este considerată ca
fiind persistentă și eligibilă pentru serviciile JPA, să poată fi recunoscută de JPA.
Utilizând această adnotare o clasă simplă Java va deveni o entitate;
• @T able – permite ca numele tabelului să fie altul față de numele entiății co-
respunzătoare. În mod implicit numele entității este și numele tabelului;
• @Column – permite ca numele coloanei să fie altul față de numele proprietății
corespunzătoare;
• @Id – specifică care dintre coloanele entității va reprezenta id-ul tabelului care
să servească drept cheie primară;
2.2.7 Hibernate
Hibernate ORM[19] este un instrument de mapare obiect-relațional pentru lim-
bajul de programare Java. Acesta oferă un cadru pentru maparea unui model obiect-
orientat într-o bază de date relațională. Hibernate se ocupă de problemele de nepo-
trivire a impedanței obiect-relaționale prin înlocuirea accesului direct la baza de date,
cu funcții de manipulare a obiectelor de nivel înalt.
Funcția principală a acestei tehnologii este maparea de la clase Java la tabele de
baze de date și maparea de la tipurile de date Java la tipurile de date SQL. Hiber-
nate oferă, de asemenea, facilități de interogare și de recuperare a datelor. Acesta
generează apeluri SQL, ușurând munca dezvoltatorului.
Maparea claselor Java în tabelele de baze de date este implementată prin con-
figurarea unui fișier XML sau prin utilizarea adnotărilor Java. Când se utilizează un
fișier XML, Hibernate poate genera cod sursă schelet pentru clasele de persistență.
12https:/ /docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html
17
Figura 2.7: Arhitectura Hibernate12
Atunci când se utilizează adnotări, acest cod sursă schelet este auxiliar. Hibernate
poate folosi fișierul XML sau adnotările Java pentru a menține schema bazei de date.
Hibernate oferă și posibilitatea de a organiza relații de „one-to-many” sau „many-
to-many” între clase. În plus față de gestionarea asociațiilor între obiecte, Hibernate
poate gestiona asociații reflexive în care un obiect are o relație „one-to-many” cu alte
instanțe ale tipului de clasă.
Hibernate acceptă maparea tipurilor de valori personalizate. Acest lucru face po-
sibile următoarele scenarii:
• Înlocuirea tipului standard SQL atunci când se face o mapare a unei coloane la
o proprietate;
• Maparea enumurilor în coloane ca și cum ar fi proprități obișnuite;
• Maparea unei singure proprietăți în mai multe coloane.
Hibernate[20], ca soluție ORM, se află între stratul de acces al datelor al aplicației
Java și baza de date relațională, așa cum se poate observa în figura 2.7. Aplicația
Java utilizează API-urile Hibernate pentru a încărca, stoca, interoga datele din baza
de date.
Ca furnizor JPA, Hibernate implementează specificațiile Java persistance API, iar
18
asocierea dintre interfețele JPA și implementările specifice Hibernate poate fi vizua-
lizată în următoarea diagramă:
Figura 2.8: Legătura dintre interfețele JPA și implementările Hibernate13
2.3 T ehnologii folosite la nivel de frontend
2.3.1 Typescript
T ypeScript[21] este un limbaj de programare open source dezvoltat și întreținut
de Microsoft. T ypeScript este proiectat pentru dezvoltarea de aplicații de mari di-
mensiuni și se compilează în cod JavaScript. Deoarece T ypeScript este un superset al
limbajului JavaScript, programele JavaScript existente sunt, de asemenea, programe
T ypeScript. Acest limbaj poate fi utilizat pentru a dezvolta aplicații JavaScript atât
pentru partea de client, cât și pentru partea de server utilizând Node.js.
T ypeScript provine din deficiențele limbajului JavaScript pentru dezvoltarea de
aplicații la scară largă atât în cadrul Microsoft, cât și în cadrul clienților lor externi.
Provocările legate de codul complex JavaScript au condus la cererea de instrumente
personalizate pentru a ușura dezvolttarea componentelor în limbajul respectiv.
13https:/ /docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html
19
Principalele obiective ale T ypeScript-ului sunt acelea că oferă un sistem de tip
opțional pentru JavaScript, având în vedere și numele său. Important este că tipu-
rile sunt complet opționale, codul JavaScript .js putând fi redenumit la un fișier .ts,
iar T ypeScript-ul va oferi, în continuare, un .js valabil, echivalent cu fișierul JavaScript
original. Astfel T ypeScript este strict o suprasetare a JavaScriptului cu verificarea op-
țională a tipului.
Unul dintre avantajele cu care vine T ypeScript-ul este acela ca semnalează o po-
sibilă eroare în sintaxă în timpul compilării (de exemplu, în momentul salvării), și nu
doar în timpul execuției (în momentul utilizării aplicației).
În plus față de analiza tipului, T ypeScript adaugă la JavaScript, următoarele ca-
racteristici: interfețe, genericitate, spații de lucru, verificări de null și modificatori de
acces.
2.3.2 Angular
2.3.3 Angular Material
2.3.4 Hypertext Markup Language (HTML)
2.3.5 Cascading Style Sheets (CSS)
20
Capitolul 3
Arhitectura aplicației
21
Capitolul 4
Prezentarea aplicației
22
Capitolul 5
Concluzii și direcții de dezvoltare
23
Bibliografie
[1] https:/ /en.wikipedia.org/wiki/Apache_Maven
[2] Patrick Niemeyer & Daniel Leuck. Learning Java, 4th EdiƟon
[3] https:/ /en.wikipedia.org/wiki/Java_(programming_language)
[4] https:/ /www.tutorialspoint.com/spring/spring_overview.htm
[5] https:/ /en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition
[6] https:/ /dzone.com/articles/spring-framework-architecture
[7] https:/ /ro.wikipedia.org/wiki/Java_Management_Extensions
[8] https:/ /en.wikipedia.org/wiki/Java_EE_Connector_Architecture
[9] https:/ /en.wikipedia.org/wiki/Enterprise_JavaBeans
[10] https:/ /en.wikipedia.org/wiki/Java_Message_Service
[11] https:/ /docs.spring.io/spring-boot/docs/current/reference/html/
[12] Craig Walls. Spring Boot in acƟon
[13] https:/ /en.wikipedia.org/wiki/Representational_state_transfer
[14] https:/ /docs.oracle.com/javaee/6/tutorial/doc/gijqy.html
[15] https:/ /www.journaldev.com/9170/restful-web-services-tutorial-java
[16] https:/ /en.wikipedia.org/wiki/PostgreSQL
[17] https:/ /www.postgresql.org
[18] https:/ /www.tutorialspoint.com/jpa/jpa_orm_components.htm
24
[19] https:/ /en.wikipedia.org/wiki/Hibernate_(framework)
[20] https:/ /docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate
_User_Guide.html
[21] https:/ /en.wikipedia.org/wiki/Microsoft_T ypeScript
[22] https:/ /angular.io/
25
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Programul de studii: [607785] (ID: 607785)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
