LUCRARE DE LICENȚĂ - profs.info.uaic.roalaiba/pub/absolvire/2016 vara/EmployeeManager.pdf ·...
Transcript of LUCRARE DE LICENȚĂ - profs.info.uaic.roalaiba/pub/absolvire/2016 vara/EmployeeManager.pdf ·...
UNIVERSITATEA “ALEXANDRU IOAN CUZA” IAȘI
FACULTATEA DE INFORMATICĂ
LUCRARE DE LICENȚĂ
EMPLOYEE MANAGER
Propusă de
Dumitriu I. Alexandru
Sesiunea:Iulie, 2016
Coordonator științific:
Asist. Dr. Vasile Alaiba
UNIVERSITATEA ALEXANDRU IOAN CUZA IAŞI FACULTATEA DE INFORMATICĂ
Employee Manager
Dumitriu I. Alexandru
Sesiunea: Iulie 2016
Coordonator științific:
Asist. Dr. Vasile Alaiba
DECLARAŢIE PRIVIND ORIGINALITATE ŞI RESPECTAREA
DREPTURILOR DE AUTOR
Prin prezenta declar că Lucrarea de licenţă cu titlul „Employee Manager” este scrisă
de mine şi nu a mai fost prezentată niciodată la o altă facultate sau instituţie de învăţământ
superior din ţară sau străinătate. De asemenea, declar că toate sursele utilizate, inclusiv
cele preluate de pe Internet, sunt indicate în lucrare, cu respectarea regulilor de evitare a
plagiatului:
toate fragmentele de text reproduse exact, chiar şi în traducere proprie din altă
limbă, sunt scrise între ghilimele şi deţin referinţa precisă a sursei;
reformularea în cuvinte proprii a textelor scrise de către alţi autori deţine referinţa
precisă;
codul sursă, imaginile etc. preluate din proiecte open-source sau alte surse sunt
utilizate cu respectarea drepturilor de autor şi deţin referinţe precise;
rezumarea ideilor altor autori precizează referinţa precisă la textul original.
Iaşi
Absolvent Dumitriu Alexandru
___________________________
DECLARAŢIE DE CONSIMŢĂMÂNT
Prin prezenta declar că sunt de acord ca Lucrarea de licență cu titlul „Employee
Manager”, codul sursă al programelor şi celelalte conţinuturi (grafice, multimedia, date de
test etc.) care însoţesc această lucrare să fie utilizate în cadrul Facultăţii de Informatică.
De asemenea, sunt de acord ca Facultatea de Informatică de la Universitatea
„Alexandru Ioan Cuza” Iași să utilizeze, modifice, reproducă şi să distribuie în scopuri
necomerciale programele-calculator, format executabil şi sursă, realizate de mine în
cadrul prezentei lucrări de licenţă.
Iaşi
Absolvent Dumitriu Alexandru
_________________________
Cuprins
1 Motivație ______________________________________________________________ 7
2 Contribuții _____________________________________________________________ 8
3 Tehnologii folosite în implementarea aplicației „Employee Manager” _____________ 9
3.1 Java ____________________________________________________________________ 9
3.2 Eclipse __________________________________________________________________ 9
3.3 Maven __________________________________________________________________ 9
3.4 Hibernate ______________________________________________________________ 10
3.5 Spring _________________________________________________________________ 10
3.6 Tomcat_________________________________________________________________ 10
3.7 PostgreSQL (+PgAdmin) ___________________________________________________ 11 3.7.1 Detalii tabele ___________________________________________________________________ 11
3.8 HTML+CSS ______________________________________________________________ 13
3.9 JavaScript (+AngularJS) ____________________________________________________ 14
3.10 Google reCAPTCHA _______________________________________________________ 15
4 Modularizarea proiectului _______________________________________________ 17
5 Setările de configurare __________________________________________________ 18
5.1 Configurări Maven _______________________________________________________ 18
5.2 Configurări bază de date __________________________________________________ 20
5.3 Configurări mail: _________________________________________________________ 22
6 Descriere aplicație ______________________________________________________ 24
6.1 Creare cont _____________________________________________________________ 24
6.2 Autentificare ____________________________________________________________ 26
6.3 Pagina principală _________________________________________________________ 27 6.3.1 Header ________________________________________________________________________ 27 6.3.2 Meniu lateral ___________________________________________________________________ 27 6.3.3 Conținut _______________________________________________________________________ 27
6.3.3.1 Pagina de profil _____________________________________________________________ 28 6.3.3.2 Evenimente ________________________________________________________________ 34 6.3.3.3 Mail ______________________________________________________________________ 37
Dumitriu Alexandru – Employee Manager
6
6.3.3.4 Proiecte ___________________________________________________________________ 38
7 Aplicații similare _______________________________________________________ 39
7.1 LinkedIn ________________________________________________________________ 39
8 Direcții de viitor ________________________________________________________ 40
8.1 Privilegii utilizatori _______________________________________________________ 40
8.2 Pagină dedicată comunicării cu clientul _______________________________________ 40
9 Concluzii ______________________________________________________________ 41
10 Bibliografie __________________________________________________________ 42
Dumitriu Alexandru – Employee Manager
7
1 Motivație
De-a lungul scurtei mele cariere în domeniul IT până în acest moment, am putut
observa în cadrul a două internship-uri, dar și la locul actual de muncă, cât de mult poate
influența organizarea dintr-o firmă productivitatea angajaților săi.
Așadar eu consider că este necesar ca pe intranet-ul fiecărei firme să acționeze un
sistem care să motiveze angajații săi să se ajute între ei, să faciliteze răspândirea anumitor
noutăți, dar și să ajute șefii să analizeze modul în care un angajat este perceput de colegii săi.
Proiectul meu „Employee Manager” își propune să facă exact acest lucru prin:
gestionare date angajați;
Fiecare utilizator va avea un set de detalii ce îi vor ajuta pe cei de la conducere
să-i contacteze și să-i recunoască (Ex: numar de telefon, imagine de profil).
sistem de rating;
Prin acest sistem, fiecare utilizator poate să voteze abilitățile colegilor săi.
Acest fapt ar putea cauza o mai buna comunicare între angajați, deoarece cei care vor
primi ajutor nu vor mai fi atât de reticenți în a-l cere, având posibilitatea de a îi
recompensa pentru ajutorul primit. Totodată, cei care ar fi în masură să ajute pe alții
sunt mai dornici să o facă știind că această activitate va fi remarcată nu doar de către
persoana ajutată, ci și de șefi.
prezența distincțiilor;
Fiecare utilizator va fi motivat să fie mai bun, fiind recompensat cu distincții
pentru fiecare faptă ce merita a fi remarcată.
organizarea evenimentelor și ale proiectelor;
Utilizatorii vor avea acces facil la informații esențiale legate de evenimentele
ce au loc în companie sau ce au legătură cu aceasta, dar și legate de proiectele care
sunt în desfășurare sau au fost la un moment dat.
e-mail intern;
Comunicarea între utilizatorii aplicației este încurajată prin acest sistem intern
în care-și pot transmite ușor nu doar mesaje, ci și imagini și alte tipuri de fișiere.
Dumitriu Alexandru – Employee Manager
8
2 Contribuții
O primă contribuție la realizarea aplicației Employee Manager o reprezintă etapa de
cercetare în vederea descoperirii diferitelor soluții care ar putea să sporească productivitatea
din cadrul unei companii.
Am început prin a mă întreba ce ar putea să mă motiveze, în calitate de angajat, să dau tot
ceea ce am mai bun. Apoi am continuat cu o mică intervievare a colegilor de la locul de
muncă pentru a vedea dacă și ei sunt de acord cu ideile mele.
Prima din soluțiile găsite a fost recompensarea angajaților cu distincții, apoi crearea unui
sistem prin care angajații își puteau vota abilitățile. De asemenea, am realizat că fiecare
angajat are nevoie de acces la o cantitate cât mai mare de informații, într-un mod cât mai facil.
Pentru aceasta, am dedicat atât un sistem de mailing intern cât și paginile în care sunt afișate
proiectele și evenimentele ce au legătură cu compania în care este implementată aplicația
Employee Manager. Nevoia angajaților de a oferi informații este totodată satisfăcută prin
permiterea tuturor utilizatorilor să adauge evenimente.
După ce aceste idei au prins rădăcini, am început sa mă gandesc la următorul aspect:
tehnologiile pe care urmează să le folosesc. Având în vedere ca în Java am cea mai multă
experiență, am ales să expun anumite servicii REST1 folosind acest limbaj. Însă, pentru
modulul WEB doream să lucrez cu o tehnologie nouă. Cercetând acest aspect inițial mă
îndreptasem spre o combinație de HTML și PHP, însă, după cercetarea limbajului JavaScript
și găsirea bibliotecii AngularJS, m-am răzgândit, alegându-le pe acestea.
Am realizat apoi că aceste două module pot fi independente ca și cod, comunicarea dintre
acestea realizându-se pe baza acelor servicii REST expuse.
După ce am început dezvoltarea acestei aplicații am căutat diverse biblioteci/API2-uri cu
licență liberă prin care aș putea să o îmbunătățesc. Pentru un plus de securitate, am folosit
reCAPTCHA oferit de către Google, pentru estetică am folosit Bootstrap, iar pentru o mai
ușoară comunicare cu utilizatorul, am mai folosit încă un API de la Google pentru afișarea
hărților, dar și o bibliotecă Javascript pentru afișarea graficelor.
Așadar, lucrarea reprezintă o soluție a unor probleme de natură organizatorică din cadrul
anumitor companii, realizarea cu succes a acesteia bazându-se atât pe elementele menţionate
mai sus, cât şi pe conceptele practice şi teoretice dobândite în facultate.
1 Representational State Transfer 2 Application programming interface
Dumitriu Alexandru – Employee Manager
9
3 Tehnologii folosite în implementarea aplicației „Employee
Manager”
3.1 Java „Java este un limbaj de programare orientat-obiect publicat în anul 1995 de către Sun
Microsystems”[1] .
Limbajul principal al modulelor ce se ocupă cu expunerea serviciilor REST sunt
implementate în Java deoarece acesta este limbajul în care am cea mai multă experiență și în
care doresc să-mi construiesc o carieră
Java s-a dovedit a fi sigur si practic, acest fapt este demonstrat pur și simplu
observând cât de larg este răspândit în momentul de față. Totodată, acest limbaj nu stagnează,
ci este îmbunătățit periodic. De exemplu în versiunea curentă 1.8, care este folosită și în
Employee Manager, s-au adăugat chiar și elemente ce țineau de programarea
funcțională(expresii Lambda) pe lângă multiple alte îmbunătățiri.
3.2 Eclipse Eclipse este un IDE3
folosit în programare în special pentru Java, dar se poate adapta și
pentru alte limbaje de programare.
Principalele componente sunt spațiul de lucru(workspace-ul) și un sistem extensibil de
plugin-uri prin care se poate personaliza și mai mult mediul.
3.3 Maven Este unul din cele mai utile instrumente care există în acest moment. Acesta ușurează
viața programatorilor datorită faptului că ajută la organizarea dependențelor, dar și la
construirea propriu-zisă a surselor.
Doar prin inserarea a câtorva linii într-un fișier xml este de ajuns pentru ca maven să-și
facă treaba (acesta descarcă automat din depozitul central sau dacă precizăm noi, dintr-o altă
locație, dependențele de care avem nevoie, și le salvează într-o memorie locală) .
3 Integrated Development Environment – Mediu de dezvoltare
Dumitriu Alexandru – Employee Manager
10
3.4 Hibernate Hibernate se ocupă cu persistența datelor într-o bază de date. Cu ajutorul acestui
ORM4 conectez baza de date la entitățile folosite în proiect. Astfel instanțele unor clase DTO5
sunt salvate automat în baza de date, care este specificată printr-un simplu fișier de
configurare.
În cadrul acestui proiect folosesc o versiune mai nouă de Hibernate ce-mi permite să
folosesc adnotări în clasele Java și nu sunt obligat să configurez totul din fișiere xml.
Acesta de asemenea suportă și o gamă destul de variată de configurări și extensii.
3.5 Spring Această bibliotecă oferă “suport pentru injectarea dependențelor, organizarea
tranzacțiilor, aplicații web, accesul la date, testare, etc.” [3] Pentru acest proiect nu folosesc
chiar tot ce poate oferi această bibliotecă însă anumite bucăți sunt destul de folositoare (ex:
injectarea dependențelor).
3.6 Tomcat
Figura 3.6—1 Tomcat Server
Este un server web dezvoltat și întreținut de către Apache Software Foundation.
Printre componentele sale se numără:
Catalina este un container servlet și implementează specificațiile impuse de “Sun
Microsystems”.
Coyote este o componentă “Connector” ce suportă protocolul HTTP ca și server web.
Acesta permite servletului să acționeze ca un server web ce oferă pagini http.
Jasper pentru motorul JSP;
Tomcat oferă totodată un mecanism de clusterizare, dar și alte caracteristici care îl fac să
fie unul din cele mai bune de pe piață atât ca viteză de procesare cât și siguranță și
scalabilitate.
4 Object/Relational Mapping -> Mapare Obiect/Relație
5 Data transfer objects -> Obiecte dedicate transferului datelor
Dumitriu Alexandru – Employee Manager
11
3.7 PostgreSQL (+PgAdmin) PostgreSQL este un ORDBMS6
dezvoltat de PostgreSQL Global Development Group,
ce se concentrează pe extensibilitate, dar și pe standardele de conformitate.
Ca și server principala sa calitate este stocarea datelor în siguranță și asigurarea
returnării acestora, când este necesar. L-am ales pe acesta în detrimentul altor ORDBMS-uri
deoarece mi s-a părut optim pentru proiectul meu, fiind ușor de configurat si oferind totodată
tot ceea ce aveam nevoie, acesta “implementând SQL:2001 , respectând principiile ACID
(atomicitate,consistență, izolare și durabilitate) și având suport pentru evitarea blocării
printr-un sistem bine definit de control multiversionat prin concurență” [7]. De asemenea
suportă proceduri și funcții stocate precum și triggere, view-uri, etc.
3.7.1 Detalii tabele
În această secțiune voi prezenta pe scurt câteva dintre tabelele cele mai importante
folosite de aplicația Employee Manager:
Figura 3.7—1 Tabela account
Pentru un mic plus de securitate, parola aleasă de utilizatori nu se salvează în clar ci se
aplică o funcție hash și rezultatul acesteia se introduce în baza de date. Chiar și serviciului rest
i se trimite doar hash-ul pentru a proteja pe cât posibil datele introduse de utilizatori.
Această tabelă este în strânsă legătură cu tabela Employee, aceasta fiind parțial
completată încă din formularul de înregistrare:
Figura 3.7—2 Tabela Employee
Tabela Avatar este cea în care se salvează poza de profil a fiecărui utilizator pe baza
id-ului acestuia:
Figura 3.7—3 Tabela Avatar
Coloana image are de fapt tipul BLOB în care se salveaza efectiv tot stream-ul de biți
din care este formată acea imagine, iar cea cuid-ul 9999 este una implicită care este folosită
pentru utilizatorii care nu au apucat să-și uploadeze o imagine proprie.
6 Object-Relational Database Management System -> Sistem de organizare al bazei de date obiect/relație
Dumitriu Alexandru – Employee Manager
12
Abilitățile fiecărui angajat sunt stocate în tabela Skills:
Figura 3.7—4 Tabela Skills
Iar voturile asupra acestora sunt legate prin tabela Skill_Evaluation:
de tabela Evaluation:
Figura 3.7—5 Tabela Skill_Evaluation
Figura 3.7—6 Tabela Evaluation
Salvarea proiectelor se face în tabela Project, la care coloana project_description a
fost modificată pentru a putea salva mai mult de 255 de caractere (limita maximă fiind acum
de 1000 de caractere):
Figura 3.7—7 Tabela Project
Event-urile se salvează în tabela Event:
Figura 3.7—8 Tabela Event
Distincțiile se salvează în tabela Achievement:
Figura 3.7—9 Tabela Achievement
Iar mail-urile în tabela email_send:
Figura 3.7—10 Tabela Email_send
Dumitriu Alexandru – Employee Manager
13
Pentru manipularea bazei de date am folosit pgAdmin III.
Figura 3.7—11 Interfața PgAdmin III
Așadar pgAdmin III este o interfață grafică ce ne permite să relaționăm cu baza de
date cu usurință, putând să facem diverse operații complexe prin simpla apăsare a unui buton.
3.8 HTML+CSS HTML7 este un limbaj de marcare utilizat pentru crearea paginilor web ce pot fi afișate
într-un browser” [5]. Acesta trebuie să respecte specificațiile impuse de World Wide Web
Consortium.
Așadar HTML-ul se folosește de etichete pentru a oferi indicații de afișare a unui
anumit document, acestea fiind procesate de browser și afișate corespunzător.
Pentru a stiliza și mai mult aceste documente am folosit atât CSS8-uri, dar și diferite
biblioteci ce sunt gratis și ne faciliteaza munca (Ex:Bootstrap).
7 HyperText Markup Language -> Limbaj de marcare HyperText 8 Cascading Style Sheets
Dumitriu Alexandru – Employee Manager
14
3.9 JavaScript (+AngularJS) “JavaScript este un limbaj de programare orientat obiect folosit mai ales pentru
introducerea unor funcționalități în paginile web, codul Javascript al acestora fiind rulat de
către browser” [9]. Acest limbaj mi se pare foarte atractiv și practic de aceea am ales să fac
modulul WEB utilizându-l împreună cu alte cateva biblioteci. În afara modalităților AJAX
(cereri http asincrone ce nu necesită reîncărcarea întregii pagini ci doar a unei secțiuni) mă
mai folosesc și de o bibliotecă specializată pe aplicații web pe o singură pagină și anume
AngularJS.
Figura 3.9—1 Funcționalități AngularJS [6]
Acestă bibliotecă adaptează și extinde HTML-ul tradițional pentru a prezenta conținut
dinamic prin “two-way data binding”9 care permite sincronizare dinamică între model si view
(toate schimbările din pagina web (ex:formulare) sunt văzute aproape instant în controllerele
din spate, dar și invers).
AngularJS implementează pattern-ul MVC10 pentru a separa prezentarea, logica și
datele propriu-zise. Specific Angular-ului este și cuvântul cheie “scope” ce arată când este
validă o anumită “asociere”.
În Angular se folosesc tipuri de variabile Javascript,metode și directive. O directivă
Angular este de forma ng-[NumeDirectivă]. Câteva din directivele folosite în acest proiect
sunt:
Ng-model: aceasta leagă view-ul de model. Am folosit-o mai ales prin
formulare pentru ușurința cu care se trimit datele în controller-ul din spate,
unde sunt procesate în funcție de necesitate. Dacă nu există o variabilă în spate
de care să se lege atunci se va crea una nouă.
Ng-repeat: aceasta repetă randarea unui anumit element sau set de elemente
pentru fiecare componontă a unei colecții. De exmplu am folosit această
directivă pentru a randa event-urile în pagină la care am adaugat condiția ca să
se afișeze doar un anumit număr din acestea:
Ng-show: aceasta afișează un element doar dacă condiția introdusă este
satisfăcută;
Ng-hide: opusul a ng-show, Ng-click, ng-controller, ng-app, etc.;
9 two-way data binding ->legare date in ambele sensuri(view<->model) 10 model-view-controller
Dumitriu Alexandru – Employee Manager
15
3.10 Google reCAPTCHA
Deși în mod normal această aplicație ar trebui să ruleze doar pe intranetul unei
firme/organizații, pentru un plus de securitate s-a utilizat și un „captcha” pentru a preveni
crearea conturilor de către așa zișii “roboți”.
Dupa ce am cercetat mai multe tipuri disponibile în acest moment pe piață, am ales
să folosesc unul oferit de către google atât datorită apectului plăcut, minimalist, cât si
datorită gradului de securitate oferit de către aceștia.
Figura 3.10—1 Google reCAPTCHA
Deoarece aplicația rulează pe localhost apare și o mică avertizare cu roșu, însă acest
lucru este irelevant, având în vedere faptul că își păstreaza funcționalitatea.
Acesta este mult mai atractiv pentru utilizatori față de cele în care trebuie să
introduci textul afișat într-o imagine.
Așadar după ce utilizatorul bifează căsuța din dreptul textului “I’m not a robot”, i se
va afișa o mică fereastră în care trebuie să selecteze imagini ce conțin anumite elemente
apoi să apese pe butonașul “Verify”.
Figura 3.10—2 reCAPTCHA ferestre de verificare
Dumitriu Alexandru – Employee Manager
16
Acesta mai verifică și pe baza altor criterii, de exemplu dacă utilizatorul este conectat
pe un cont de Gmail nu i se va afișa tot timpul această fereastră ci va primi aprobarea direct,
la fel și dacă a trecut o dată de testul reCAPTCHA, în viitorul apropiat nu va mai fi testat din
nou.
În cazul în care utilizatorul alege imaginile potrivite, căsuța se va completa cu o bifă verde:
Figura 3.10—3 reCAPTCHA verificare cu succes
În cazul în care acesta greșeste, i se vor oferi alte modalități de a dovedi că este
utilizator uman:
Figura 3.10—4 reCAPTCHA diferite metode de verificare
Dumitriu Alexandru – Employee Manager
17
4 Modularizarea proiectului
Pentru acest proiect funcționalitățile sunt împărțite astfel încât codul de pe modulul
WEB sa fie independent de modulele Java în care se efectuează efectiv comunicarea directă
cu baza de date
Comunicarea dintre aceste două componente se face prin intermediul unor servicii
REST.
Proiectele ce se ocupă efectiv cu expunerea serviciilor sunt cele scrise în Java:
Figura 3.10—1 Module Java
Iar partea de WEB este formată din modulul următor:
Figura 3.10—2 Modulul WEB
Am ales să separ în acest fel deoarece având în vedere viteza cu care această industrie
evoluează, tehnologiile folosite pe partea de web, deși în momentul de față sunt destul de noi,
la un moment dat pot să devină demodate/impractice în comparație cu ceea ce o sa apară pe
piață.
Așadar dacă se dorește schimbarea unei componente nu e necesar să se reînceapă de
la 0, modulele fiind complet independente.
Dumitriu Alexandru – Employee Manager
18
5 Setările de configurare
5.1 Configurări Maven
Pentru a putea folosi Maven este nevoie de fișierul intitulat pom.xml. În primul rând
în acesta se definesc id-ul, numele, versiunea, modul în care se doreste împachetarea (în
exemplul de mai jos este pom, dar pentru modulul WEB este de tipul war).
Figura 5.1—1 Exemplu configurări atribute pom.xml
Datorită separării în module a fost necesară folosirea a 5 fișiere de acest gen, fiecare
însă fiind legate între ele. Principalul se află în employee-manager-root, iar celelalte fac
referință la acesta prin:
Figura 5.1—2 Exemplu conectare cu pom-ul părinte
Tot în aceste fișiere se definesc un set de proprietăți de genul:
Figura 5.1—3 Exemplu proprietăți pom.xml
Dumitriu Alexandru – Employee Manager
19
Acestea pot fi referențiate mai jos astfel încât dacă la un moment dat se dorește de
exemplu folosirea unei alte versiuni jdk, nu trebuie modificat în 100 de locuri ci este de ajuns
modificarea unei singure linii din acest fișier.
O altă entitate ce se configurează în acest fișier sunt dependențele fiecărui modul în
parte. Acestea pot fi interne, adică un alt modul ce aparține aplicației Employee Manager:
Figura 5.1—4 Exemplu dependență internă
Dar pot fi și externe, iar în acest caz maven-ul se ocupă cu descărcarea și organizarea
dependenței respective:
Figura 5.1—5 Exemplu dependență externă
Totodată, se permite excluderea elementelor nedorite din anumite dependențe:
Figura 5.1—6 Exemplu excludere din dependență
Pe lângă acestea se mai pot configura diferite elemente, de exemplu cum se face build-
ul, profilul, modulele prezente,etc.
O altă caracteristică foarte importantă a acestor fișiere este faptul că pom-urile copil
pot moșteni proprietăți de la părinte. De exemplu se poate omite precizarea unei versiuni în
cazul în care aceasta este precizată în părinte.
Figura 5.1—7 Exemplu preluare versiune de la părinte
Dumitriu Alexandru – Employee Manager
20
Există totuși cazuri în care se dorește folosirea unei alte versiuni față de cea din
părinte. Nu este nici o problemă deoarece dacă se precizează și aici, atunci aceasta va
suprascrie pe cea din părinte.
Un alt element care se poate preciza acestor dependențe este momentul în care
avem nevoie de ele, prin atributul scope.
Figura 5.1—8 Exemplu setare scope
De exemplu, în cazul prezentat mai sus, această dependență este procesată doar în
etapa de testare a aplicației Employee Manager. Acest aspect cauzeaza o creștere
semnificantă a performanței.
5.2 Configurări bază de date
Figura 5.2—1 Fișiere de configurare BD
În aceste două fișiere se definesc o serie de bean-uri, adică obiecte ce sunt
instanțiate, asamblate și manageriate de către containerul Spring IoC11:
Figura 5.2—2 Spring Container[3]
11 Inversion of Control
Dumitriu Alexandru – Employee Manager
21
Configurațiile din metadata pot fi reprezentate atât în XML, cât și în adnotări Java.
Așadar unul din aceste bean-uri din fișierul employee-manager-db-config.xml este
următorul:
Figura 5.2—3 BD -> Configurare DataSource
Dupa cum puteți observa se precizează diferite proprietăți prin care să poată să comunice cu
serverul PosgreSQL și anume: uitilizator, parolă, driver, adresă, etc.
Pe lângă acesta, se mai definește și o listă de proprietăți:
Figura 5.2—4 Proprietăți hibernate
Acestea oferă hibernate-ului detalii cu privire la modul în care se dorește ca acesta să
acționeze.
De exemplu proprietatea “hibernate.show_sql” îi indică faptul că se dorește ca toate
operațiunile ce se fac în baza de date să se afișeze în consolă.
O altă proprietate interesantă este „hibernate.hbm2ddl.auto”. În momentul de față
este setat pe update, deci trebuie să facă doar actualizarea bazei de date și implicit tabelelor
acesteia. O altă valoare ce s-a mai folosit de-a lungul dezvoltării acestei aplicații este create-
drop: aceasta șterge tabelele și le crează din nou, fiind utilă atunci când au avut loc
schimbări în structura tabelelor, însă dezavantajul este că se pierd datele din aceste tabele.
În fișierul “employee-manager-model-config.xml” pentru ca bean-ul și lista de
propietăți enunțate mai sus să fie disponibile trebuie mai întâi ca fișierul ce le conține să fie
importat prin:
Dumitriu Alexandru – Employee Manager
22
Figura 5.2—5 Import proprietăți
Apoi se pot folosi în crearea bean-ului „entityManagerFactory”:
Figura 5.2—6 EntityManagerFactory
Așadar pe langă clasa de bază si id-ul, se precizează atât dataSource-ul și proprietățile
jpa definite mai sus, dar și pachetul în care am clasele DTO cu adnotările Hibernate.
5.3 Configurări mail:
Pentru a putea trimite un mail din aplicația Employee Manager a fost necesar ca mai
întâi în fișierul pom.xml să se adăuge urmatoarea dependență:
Figura 5.3—1 Dependență javax.mail
Apoi în fișierul employee-manager-services-config.xml se creează bean-ul “mailSender”
ce asociază detaliile unui cont Gmail, dar și alte proprietăți cu clasa “JavaMailSenderImpl”:
Figura 5.3—2 Proprietăți mail
Dumitriu Alexandru – Employee Manager
23
Acesta fiind folosit mai apoi în crearea următorului bean, prin care se leagă clasa
„Mail”de aceste proprietăți:
Figura 5.3—3 Conectare proprietăți mail
Însă, se pare că aceste configurări nu sunt suficiente. Atunci când se încearcă
trimiterea primului mail folosind configurările de mai sus, Gmail-ul nu va permite acest lucru,
având un sistem de Securitate ce împiedică accesul unor aplicații nesigure la anumite servicii,
cum ar fi cel de autentificare.
Figura 5.3—4 Gmail -> mesaj de avertizare
Din fericire cei de la Google au implementat și o metodă prin care se poate dezactiva
această măsură de securitate în plus din setările contului.
Figura 5.3—5 Gmail -> setări de securitate
După toate aceste configurări, serviciul de mail poate fi folosit cu success.
Dumitriu Alexandru – Employee Manager
24
6 Descriere aplicație
6.1 Creare cont
Pentru ca utilizatorii să se poată autentifica în aplicația Employee Manager este
nevoie ca mai întâi să-și facă un cont. Acesta este scopul următorului formular:
Figura 6.1—1 Formular creare cont
Acesta conține doar câmpuri obligatorii ce reprezintă informațiile de bază pe care
oricare angajat ar trebui să le aibă atunci când se autentifică pentru prima dată. Pentru un
Dumitriu Alexandru – Employee Manager
25
plus de securitate s-a adăugat și google reCAPTCHA pentru a împiedica accesul asa-zișilor
roboți.
Fiecare câmp conține validări, care, dacă nu sunt respectate vor menține starea
butonului Register inactivă. Imediat ce un câmp a fost alterat, i se vor oferi utilizatorului
indicații cu privire la modul în care acesta trebuie completat.
Validări:
Deoarece toate câmpurile sunt obligatorii, în cazul în care utilizatorul îl va lăsa
necompletat, următorul mesaj de avertizare va fi afișat:
Deoarece nu există încă o modalitate de a valida toate tipurile de email-uri
existente, acest câmp verifică existența unui „@” precedat si urmat de cel
puțin o literă. În caz contrar următorul mesaj va fi afișat:
Numărul de telefon introdus trebuie să conțină între 10 si 14 cifre, orice altă
combinație introduse cauzând apariția următorului mesaj de avertizare:
Parola trebuie să aibă minimum 6 caractere:
Confirmarea parolei trebuie să corespundă cu cea introdusă mai sus:
Dumitriu Alexandru – Employee Manager
26
6.2 Autentificare
După ce utilizatorul și-a creat un cont, acesta poate accesa Employee Manager
autentificându-se prin următorul formular:
Figura 6.2—1 Formular Autentificare
Și acesta conține diverse validări ca și formularul de înregistrare.
Figura 6.2—2 Exemplu validare
Dacă combinația uitilizator-parolă nu este validă se va afișa un mesaj mai general
pentru a nu ajuta eventualul atacator să afle dacă acel cont chiar există sau alte informații ce
l-ar putea ajuta:
Figura 6.2—3 Combinație uitilizator-parolă incorectă
În cazul în care utilizatorul introduce de mai mult de 3 ori consecutiv o combinație
uitilizator-parolă incorectă atunci va fi nevoit să treacă și de testul “captcha” explicat mai
sus:
Figura 6.2—4 reCAPTCHA pe formularul de autentificare
Dumitriu Alexandru – Employee Manager
27
6.3 Pagina principală
După autentificare utilizatorul va fi redirectat spre pagina de profil a aplicației
Employee Manager.
De la acest punct site-ul este împartit în 3 secțiuni:
6.3.1 Header
Figura 6.3—1 Header Employee Manager
Acesta va fi afișat în partea de sus a paginii. În momentul în care utilizatorul va
poziționa cursorul deasupra numelui, o mică fereastră va apărea din care se va putea
deconecta:
Figura 6.3—2 Pop-up deconectare
6.3.2 Meniu lateral
Figura 6.3—3 Meniu
Acest meniu este plasat în partea stângă și ne ajută la navigarea între diferitele pagini
ale aplicației Employee Manager.
6.3.3 Conținut
În funcție de opțiunea selectată din meniu în partea central-dreaptă se vor afișa
diverse informații ce sunt prezentate în cele ce urmează.
Dumitriu Alexandru – Employee Manager
28
6.3.3.1 Pagina de profil
Aceasta e pagina în care sunt prezente diferite detalii aferente uitilizatorului
autentificat. În primul rând i se afișează o imagine de profil:
Figura 6.3—4 Imagine de profil
Dacă nu a uploadat nici o altă poză, atunci i se va afișa o poză generică ca în
Figura 6.3—5, pe care o poate schimba prin apăsarea butonului atașat.
Apoi este afișat un formular în care sunt prezente atât detaliile introduse la crearea
contului, cât si detalii suplimentare:
Figura 6.3—6 Detalii utilizator
Dumitriu Alexandru – Employee Manager
29
Inițial câmpurile nu pot fi modificate, însă dacă angajatul dorește să facă acest lucru
este suficientă apăsarea butonului Edit, câmpurile devenind editabile:
Figura 6.3—7 Detalii utilizator editabile
Pentru anularea modificărilor se apasă butonul “Cancel”, iar dacă se dorește salvarea
acestora, utilizatorul trebuie să apese pe butonul “Save”. Un scurt mesaj se va afișa pentru
câteva secunde pentru a anunța utilizatorul dacă operațiunea s-a executat cu succes:
Figura 6.3—8 Mesaj de notificare la salvarea detaliilor
Dumitriu Alexandru – Employee Manager
30
O alta secțiune a paginii „My Profile” este cea de Distincții. Pentru că fiecare angajat
ar trebui sa fie motivat să dea tot ce e mai bun, în unele firme se încurajează acest aspect
prin oferirea anumitor distincții/premii.
Deoarece un angajat poate să aibă un numar mare de distincții, am decis ca inițial să
afișez doar două dintre ele:
Figura 6.3—9 Distincții
Prin apăsarea butonului “Show More” se vor afișa încă două, până ce sunt afișate
toate aferente acestui angajat. Dacă sunt afișate toate distincșiile, butonașul „Show More”
nu și-ar mai avea rostul, așa că nu va mai fi afișat în pagină:
Figura 6.3—10 Comportament buton "Show More"
Prin apăsarea butonul “Add achievement” un mic formular va fi afișat dedesubt:
Figura 6.3—11 Adăugare distincție
Dumitriu Alexandru – Employee Manager
31
După ce se introduc datele, va apărea și butonul „Save”, care nu va putea însă fi
apăsat decât dacă informațiile introduse sunt valide. Câmpul “Description” are o limita de
1000 de caractere, pentru eventualele cazuri în care este nevoie de o descriere mai pe larg.
Figura 6.3—12 Limita extinsă a câmpului "Description"
Aceste distincții au un efect psihologic destul de mare și ar trebui sa se dea cât mai
des și pentru motive variate. De exemplu pentru cele mai multe ore suplimentare în această
săptămână sau pentru că a ajutat juniorii din firmă și a fost cel mai lăudat de către aceștia,
etc.
Urmează apoi două secțiuni strâns legate între ele, Skills si Evaluation:
Fiecare angajat are anumite abilități, așadar acestea ar trebui sa apară pe pagina de
profil a acestuia. În aplicația Employee Manager afișarea acestora se face în așa fel încât să
motiveze lucrul în echipă și socializarea cât mai mult în compania care implementează acest
sistem. Am făcut puțină cercetare asupra acestui aspect și m-am gândit în final să fac ceva
asemănător cu LinkedIn, astfel angajatii ce utilizeaza aplicația să-și poată vota abilitățile
reciproc în funcție de activitatea prestată.
Rezultatul final este următorul:
Figura 6.3—13 Îndeletniciri angajat
Așadar, abilitățile ce apar în partea stângă au ca și corespondent o notă de la 1 la 5
reprezentată prin steluțe. Nota finală se calculează pur și simplu făcând media tuturor
notelor primite de la colegi pe o abilitate.
Pentru a aduce un plus acestui sistem, notele finale sunt afișate și sub forma unui
grafic folosind o bibliotecă Javascript.
Dumitriu Alexandru – Employee Manager
32
Figura 6.3—14 Grafic îndeletniciri angajat
Adăugarea unei alte abilități se face prin apăsarea butonul “Add Skill”, un mic
formular fiind afișat dedesubt:
Figura 6.3—15 Adăugare îndeletnicire
Opțional, se poate adăuga si o descriere a unei abilități, însă aceasta nu va fi afișată în
grafic. La apăsarea butonului „Save” noua abilitate va fi adăugată și va putea fi votată
imediat de către colegi.
După cum puteți observa nu se afișează nicăieri în aplicație angajatul care a votat,
deci se pastreaza anonimitatea votului. Acest lucru este necesar pentru a nu influența
veridicitatea votului. Dacă nu ar fi fost așa, acest sistem nu doar că nu ar mai fi evidențiat
adevarata valoare a unei abilități, ci ar putea chiar și stârni dispute între angajați dacă unul
din aceștia consideră că nota primită este sub ceea ce merită.
Ultima secțiune din această pagină se folosește pentru a vota îndeletnicirile colegilor:
Dumitriu Alexandru – Employee Manager
33
Figura 6.3—16 Evaluare angajat
Utilizatorul trebuie sa selecteze numele colegului a cărui skill dorește să-l voteze apoi
să apăse pe butonul „Give Evaluation”.
Așa cum se vede în Figura 6.3—18, se vor afișa toate abilitățile angajatului selectat,
acestea putând fi votate cu note de la 1 la 5.
Trebuie să mai precizez faptul că acest formular implementează și un sistem anti
trișat. Un utilizator nu poate să-și voteze propriile abilități, și am luat în considerare și
eventualele persoane care ar dori să crească sau să scadă rating-ul altora, votând de mai
multe ori una din abilitățile unui anumit angajat. Pentru a împiedica acest lucru, notele
oferite vor suprascrie notele mai vechi date de către același angajat aceleiași abilități ale
colegului. Asta poate fi un avantaj și pentru că la un moment dat ne putem răzgandi:
De exemplu un coleg m-a ajutat mai demult să repar o bucățică de cod JavaScript ce
avea o problemă cu un grad de dificultate ridicat. La acel moment am crezut că el cunoaște
foarte bine această tehnologie și am decis să-i dau nota maxima acestei abilități. Totuși, pe
parcurs tot același coleg a integrat pe mai multe fișiere JavaScript pe care lucrasem și eu, o
sumedenie de BUG-uri. Așadar, m-am răzgândit cu privire la nota pe care ar merita-o asa că
mai votez o dată cu o altă notă, ce va suprascrie nota mea inițială.
Figura 6.3—17 Evaluare îndeletniciri angajat
Dumitriu Alexandru – Employee Manager
34
6.3.3.2 Evenimente
În fiecare companie există periodic anumite evenimente la care pot participa
angajatii. Acestea pot fi atât interne cât și externe, la care este nevoie de invitație, sau au
intrarea liberă.
Așadar, această aplicație oferă o modalitate prin care angajații să poată fi la curent cu
evenimentele ce au legătură cu compania.
Figura 6.3—19 Detalii de bază eveniment
Având în vedere că majoritatea evenimentelor sunt promovate prin filmulețe, am
considerat că este necesar să putem atașa și noi unul în descrierea acestuia:
Figura 6.3—20 Filmuleț de prezentare eveniment
Dumitriu Alexandru – Employee Manager
35
Pentru adăugarea filmulețelor, se permit link-uri youtube variate. De exemplu merge
atât inserarea unui filmuleț dintr-un playlist ce are link-ul în felul următor:
https://www.youtube.com/watch?v=VbQGMnioKWQ&index=5&list=LLFrlkwukvO_L7E7LX4a
5xCA” , dar și link-uri de genul „https://www.youtube.com/watch?v=gMbPVEsaH90” sau
embedded ca în exemplul din Figura 6.3—21.
Fiecare event poate avea și o anumită locație atașată:
Figura 6.3—22 Coordonate eveniment
Pentru a ajuta utilizatorul să găsească mai ușor locația evenimentului, aplicația
Employee Manager se folosește de “Google Maps API”. Așadar la apăsarea butonului “Show
Directions” se va afișa:
Figura 6.3—23 Afișare drum până la destinație
Coordonatele pot fi atât sub forma unei adrese, ca în exemplul de mai sus, dar
și sub forma unor coordonate geografice latitudine,longitudine. Cu cât adresa este mai
precisă cu atât locația căutată va fi detectată mai cu o marjă de eroare mai mică.
Pe hartă va fi așadar afișat drumul pănă la această locație, punctul de pornire
putând fi detectat din browser, atâta timp cât nu este blocată detectarea locației. Traseul
este în mod mașină, aceasta fiind cea mai folosită metodă de deplasare.
Dumitriu Alexandru – Employee Manager
36
Harta, la fel ca pe Google Maps permite atât scroll-ul, cât și zoom-ul, și chiar și
celebrul Street View.
Aceste evenimente sunt limitate inițial la două pe pagină, însă prin apăsarea butonul
“Show More” alte două vor fi afișate, până la afișarea tuturora, butonașul dispărând în acest
punct.
Prin apăsarea butonului “Add Event” de la începutul paginii se adaugă un nou
eveniment:
Figura 6.3—24 Formular adăugare eveniment
În aplicația Employee Manager fiecare utilizator are dreptul să adauge un eveniment,
acesta devenind accesibil tuturor colegilor. Nu s-a restricționat acest drept, deoarece s-a
considerat că fiecare utilizator poate dispune de o informație ce merită transmisă mai
departe.
Dumitriu Alexandru – Employee Manager
37
6.3.3.3 Mail
Această aplicație conține și o modalitate prin care angajații să transmită informații între
ei într-un mod rapid și eficient printr-o pagină destinată trimiterii mail-urilor.
Aceasta conține câmpuri obligatorii pe care orice mail ar trebui să le conțină (destinatar,
subiect, mesaj):
Figura 6.3—25 Câmpuri obligatorii mail
Putem totodata trimite și imagini prin câmpul:
Figura 6.3—26 Câmp imagine
Pe lângă acesta există și posibilitatea trimiterii altor tipuri de fișiere:
Figura 6.3—27 Câmp atașament
Primele 3 tipuri sunt mandatorii, iar celelalte două sunt opționale. După ce informațiile
au fost inserate, este suficientă apăsarea butonului si mail-ul va fi trimis.
Dumitriu Alexandru – Employee Manager
38
6.3.3.4 Proiecte
Fiecare companie din IT trebuie să aibă un set de proiecte la care a lucrat sau lucrează în
acest moment, așadar este necesară o pagină prin care pot fi adăugate și vizionate ușor toate
proiectele companiei respective.
Figura 6.3—28 Proiecte
Deoarece un angajat poate fi interesat doar de un singur proiect, acesta nu ar trebui să fie
obligat să vizualizeze detaliile tuturor celorlalte proiecte. Așa cum se vede în imaginea de mai
sus, pe pagina de proiecte se afișează inițial doar titlul, dar în cazul în care se dorește
vizualizarea completă, prin apăsarea butonului Show Details vor fi afișate detalii
suplimentare (descriere, data de început, data de sfârșit, status):
Figura 6.3—29 Detalii proiect
Orice proiect poate fi editat, iar modificările vor fi reținute în baza de date la apăsarea
butonului “Save”.
Utilizatorul are totodată și posibilitatea de a adăuga un nou proiect prin apăsarea
butonului “Add Project”.
Dumitriu Alexandru – Employee Manager
39
7 Aplicații similare
7.1 LinkedIn
Una din aplicațiile asemănătoare existente pe piață în acest moment este LinkedIn.
Aceasta e o platforma de socializare, care spre deosebire de facebook, twitter sau Instagram,
este orientată spre mediul de afaceri.
Figura 7.1—1 LinkedIn
Acesta permite utilizatorilor sa-și facă un profil pe baza căruia poți fi contactat în
vederea obținerii unei slujbe, sau dacă-ți faci cont din postura de angajator, îți va permite să
cauți potențialii candidați.
LinkedIn implementează un sistem de „endorsement” prin care abilitățile tale pot fi
recomandate de către prietenii tăi.
Unul din dezavantajele acestei aplicații este acela că este una publică, iar pentru a
avea un sistem de gestiune al angajaților corespunzător, acesta ar trebui să ruleze doar pe
intranet-ul companiei.
Un alt dezavantaj este că spre deosebire de aplicația mea, unde poți efectiv să dai o
notă ablităților unui coleg, pe linkedIn poti doar să le recomanzi.
Un alt avantaj al aplicației mele este acela că tratează si evenimentele din companie,
dar și proiectele pe care le manageriază.
Dumitriu Alexandru – Employee Manager
40
8 Direcții de viitor
8.1 Privilegii utilizatori
Una din îmbunătățirile pe care le poate suferi aplicația Employee Manager este adaugarea
unui sistem de privilegii ale utilizatorilor.
Prin acesta ar putea să existe utilizatori care să fie simpli angajați care să nu aibă
posibilitatea să adauge de exemplu evenimente sau proiecte, dar și utilizatori care să aibă
acest privilegiu.
Un alt tip de utilizator ar trebui sa fie admin-ul. Acesta ar trebui să aibă acces la o pagină
suplimentară care să-i arate informații confidențiale pentru restul utilizatorilor. De exemplu
acesta ar trebui să poată nu doar să vizualizeze media notelor primite de un anumit utilizator
asupra unei îndeletniciri, ci să poată vedea efectiv de la cine a primit voturile, precum și ce
voturi a oferit și cui. Analizând toate acestea, el ar putea să afle tot felul de informații despre
angajați, putând acționa în consecință pentru un o mai bună organizare în firmă.
Totodată, un admin ar putea să detecteze acele voturi nepotrivite care ar trebui să-i dea de
gândit asupra persoanei care a dat acel vot.
De exemplu să zicem că anumiți angajați au aproximativ 50 de note de 4 sau 5 (pe o scară
de la 1 la 5) pe anumite ablități. Admin-ul observă însă că aceștia au primit însă si cate o notă
de 1 pe aceleași îndeletniciri de la un singur angajat. Având în vedere această discrepanță,
câteva semne de întrebare ar putea sp apără în legatură cu persoana care a oferit aceste voturi.
8.2 Pagină dedicată comunicării cu clientul
O altă posibilă îmbunătățire a acestei aplicații ar putea fi crearea unei pagini pentru clienți
în care aceștia ar putea atât să primească informații utile, dar și să le ofere.
Ar putea să existe o secțiune în care clienții să comunice direct cu angajații, în care să
poată să-și prezinte anumite idei noi, ce ar dori să fie implementate, sau în care să anunțe ce
schimbări ar dori să se facă pe proiectul aflat în derulare.
Astfel, s-ar ușura comunicarea între client și companie, putându-se ajunge la un consens
mai ușor în privința anumitor chestiuni, iar fiecare utilizator ce are drepturile necesare va
putea fi la curent cu toate noutățile.
Dumitriu Alexandru – Employee Manager
41
9 Concluzii
Având în vedere cele prezentate mai sus, cred că aplicația Employee Manager este
capabilă să crească productivitatea din compania în care ar fi implementată prin diferitele
sisteme pe care le implementează:
Motivația angajaților de a se ajuta reciproc și efectiv comunicarea și
socializarea între colegi ar trebui să fie îmbunătățită prin sistemul de votare al
ablităților;
Analizarea de către admini a diferitelor calități sau defecte ale angajaților,
ajutându-i să ia anumite decizii în privința acestora;
Comunicarea între angajați ar fi de asemenea ușurată prin sistemul de mail
intern prin care se pot transmite atât mesaje, cât și imagini sau alte atașamente.
Altă sursă de motivare a angajaților ar putea fi răsplătirea acestora cu distincții;
Utilizatorii au acces ușor la informații, aceștia putând oricând să vadă
evenimentele care au avut loc, sau care vor avea loc în companie, precum și
proiectele la care se lucrează sau s-a lucrat la un anumit moment în aceasta.
Utilizatorii au posibilitatea să ofere informații colegilor, putând să adauge
evenimente sau proiecte, care sunt publice.
Un alt beneficiu al aplicației este că în cazul în care s-ar dori doar schimbarea
modulului WEB nu este nevoie să se schimbe și partea de comunicare cu baza de date,
serviciile REST încă putând fi folosite fară probleme.
Dumitriu Alexandru – Employee Manager
42
10 Bibliografie
[1] Oracle Corporation, What is Java technology and why do I need it?
https://java.com/en/download/faq/whatis_java.xml
[2] Tech Target, Tomcat
http://searchsoa.techtarget.com/definition/Tomcat
[3] TutorialsPoint, Spring - IoC Containers
http://www.tutorialspoint.com/spring/spring_ioc_containers.htm
[4] Google Inc., reCAPTCHA
https://developers.google.com/recaptcha/
[5] W3schools, HTML Introduction
http://www.w3schools.com/html/html_intro.asp
[6] Dan Wahlin, AngularJS in 60 Minutes
http://fastandfluid.com/publicdownloads/AngularJSIn60MinutesIsh_DanWahlin_May
2013.pdf
[7] Wikipedia, PostgreSQL
https://en.wikipedia.org/wiki/PostgreSQL
[8] Cristian Frăsinaru, Curs practic de Java
http://web.info.uvt.ro/~iordan/P_III/Cristian_Frasinaru-Curs_practic_de_Java.pdf
[9] About Tech, What Is JavaScript?
http://javascript.about.com/od/reference/p/javascript.htm