Sistem Informatic Privind Activitatea Grupului Agricover
INTRODUCERE
În cadrul acestei lucrări de licență am dorit să explorez lucrul cu bazele de date și să realizez o aplicație pentru a facilita munca depusă de Grupul Agricover în ceea ce privește relația acestuia cu clienții și serviciile online oferite pentru aceștia.
Această lucrare de licență este structurată în trei capitole, pornind de la aspecte teoretice din literatura de specialitate și finalizându-se cu o parte practică, aceasta fiind reprezentată de o aplicație informatică.
Mediul de lucru utilizat a fost Eclipse, unde am aplicat noțiuni de Java. Java reprezintă baza pentru multe dintre tipurile de aplicații în rețea, fiind standardul global pentru dezvoltarea și implementarea de aplicații mobile, jocuri, conținut pe web și software la nivel de companie. Lucrând în acest mod am aflat avatajele și dezavantajele limbajului Java, și în principiu cât de util este pentru implementarea aplicațiilor.
În primul capitol, am prezentat câteva elemente și noțiuni teoretice legate de sistemul informațional și respectiv sistemul informatic. Dezvoltarea tehnologiilor informaționale și a comunicațiilor a presupus apariția unor noi concepte și metodologii în cadrul informaticii economice, fapt ce a dus la aparitia sistemului informatic. Tot în acest capitol am analizat activitatea Grupui Agricover și în concordanță cu aceasta am realizat o prezentare a activității ce va fi informatizată, mai exact descrierea pe scurt a aplicației propuse.
În cel de-al doilea capitol, am adunat informații despre tehnologiile informatice pe care le-am uitilizat în creearea aplicației personale. Astfel, am abordat aspecte teoretice ce fac referire la instrumentele utilizate, și anume: mediul de dezvoltare Eclipse, în care am utilizat noțiuni de Java, de Sql, Html și CSS.
În cel de-al treilea capitol, am realizat analiza și proiectarea aplicației informatice și am evidențiat avatajele principale în ceea ce privește utilitatea aplicației create pentru Grupul Agricover. Astfel, am început prin prezentarea bazei de date utilizată în conceperea aplicației pentru ca apoi să proiectez bazei de date și să mapez tabelele în clase java în interiorul pachetului “model”. De asemenea am rrealizat metodele DAO din interiorul pachetului “dao” utilizate în cadrul tranzacțiilor la nivelul bazei de date, cât și proiectarea serviciilor pentru fiecare categorie în parte în cadrul pachetului “service” prin intermediul anotațiilor.
Ultimul capitol face referire la realizarea și implementarea aplicației informatice pentru Grupul Agricover, aplicație ce va facilita munca depusă de angajați și mai ales cea a clienților. Aceată aplicație este concepută pentru a veni în ajutorul fermierilor și a Grupului Agricover și reprezintă clar un avantaj din punct de vedere economic, deoarece majoritatea acțiunilor se pot declanșa automat, sistemul beneficiind de multe automatizări și calcule prin simpla accesare cu un user și o parolă.
În concluzie, consider că aplicația realizată și modul de lucru în acest program, m-au ajutat să descopăr avatajele și dezavantajele limbajului Java, și în principiu cât de util este pentru implementarea aplicațiilor.
CAPITOLUL I- REPERE ECONOMICE ÎN CADRUL GRUPULUI AGRICOVER
1.1. Aspecte teoretice privind sistemele informatice
Dezvoltarea cercetării științifice are la bază drept trăsătură caracteristică modul prin care unei științe i se poate aplica metoda altei științe. Dezvoltarea tehnologiilor informaționale și a comunicațiilor a presupus apariția unor noi concepte și metodologii în cadrul informaticii economice. Astfel, a apărut noțiunea de sistem informatic (coord. Ghilic Micu B., 2012, p.11).
„Sistemul informațional cuprinde ansamblul informațiilor, fluxurilor și circuitelor informaționale, precum și totalitatea mijloacelor, metodelor și tehnicilor, prin care se asigură prelucrarea datelor necesare sistemului decizional. El asigură legătura între sistemul decizional și sistemul operațional. De asemenea, sistemul informațional asigură gestiunea tuturor informațiilor din cadrul unui sistem economic, folosind toate metodele și procedeele de care dispune.”(Onete B.,2000 ,p.16).
Conform definiției din dicționarul explicativ al limbii române, un sistem informațional reprezintă ansamblul de procedee și mijloace de colectare, prelucrare și transmitere a informației necesare procesului de conducere a întreprinderilor, instituțiilor, ministerelor etc.
Sistemul informațional cuprinde circuitele și fluxurile informaționale, la care putem adăuga metodele și tehnicile de prelucrare a informațiilor. În ceea ce privește sistemul informatic, acesta este o componentă a sistemului informațional, mai exact, o parte a acestuia care “ preia și rezolvă sarcinile de culegere, prelucrare, transmitere, stocare și prezentare a datelor, cu ajutorul sistemelor de calcul.” (O Brian L., 1998, p. 114).
Sistemele informatice în activitatea economică pot constitui elemente de studiu esențiale în administrarea afacerilor și management, ele putând să răspundă la probleme legate de administrarea hardware-ului, software-ului, a datelor, dar și a rețelelor informatice într-un mod strategic pentru succesul afacerilor. Importanța sistemelor informatice constă în buna întelegere de către toți membrii dintr-o organizație a necesității adaptării la societatea informațională globală. Astfel, putem afirma că sistemele informatice devin din ce în ce mai importante în ceea ce privește succesul în afaceri, fiind tot mai mult o componentă vitală pentru o organizație sau un întreprinzător (coord. Surcel T.,2001, p.53).
Sistemul infomatic, parte a sistemului informațional, permite realizarea operațiilor de culegere, transmitere, stocare și prelucrare a datelor. De asemenea, prin intermediul acestuia, informațiile obținute prin intermediul mijloacelor tehnologiei informațiilor, sunt difuzate aceste date. Astfel, sistemul informatic al unei firme este conceput astfel încât să corespundă diferitelor grupuri de utilizatori, și anume: factori de conducere la nivelul conducerii strategice, operative și tactice; angajații ce se ocupă de procesul culegerii și prelucrării datelor; personalul ce lucrează în cadrul cercetărilor științifice și proiectării noilor produse și tehnologii. Conform acestei clasificari a utilizatorilor, putem afirma că există patru subsiteme ale sistemului informatic: sistemul conducerii strategice, sistemul conducerii curente, sistemul de gestiune a cunoașterii și sistemul operațional (Stanciu V., 1999,p.12).
Pentru a înțelege complet noțiunea de sistem informatic, vom urmări principalele componente:
Informația- resursă de bază deținută de indivizi și organizații, vitală în cadrul societății moderne;
Sistemul informațional- ansamblul format din indivizi ce colectează, transformă și diseminează informația prin intermediul unei colecții de proceduri și resurse materiale și financiare;
Sistemul informațional managerial- sistem informațional proiectat în scopul furnizării informațiilor la nivelul conducerii pentru a facilita procesul decizional;
Utilizatorul- în general reprezentând individul dintr-o orgnizație ce utilizează sistemul informațional sau informația produsă de acesta;
Utilizatorul managerial- utilizator ce folosește sistemul informațional în scopul obținerii alternativelor decizionale și fundamentării deciziilor (coord. Ghilic Micu B., 2012, p.13).
Din punct de vedere al caracteristicilor, putem repera două definitorii: a) structura sistemului- ce reprezintă ansamblul relațiilor dintre compoententele sistemului, dar și a relațiilor dintre componente și mediu; b) starea sistemului- definită ca ansamblul caracteristicilor sistemului intr-un anumit moment dat ( Ionescu S., Lungu I., Munteanu M., Velicanu M., 2003, p. 35).
În ceea ce privește clasificarea sistemelor, putem menționa, pe baza criteriilor de clasificare, următoarele tipuri de sisteme:
După natura lor: sisteme naturale și sisteme elaborate;
După modul de funcționare: sisteme deschise și sisteme închise;
După comportamentul lor: sisteme deterministe și sisteme probabilistice (coord. Ghilic Micu B., 2012, p.20).
Din punct de vedere al costurilor, sistemele informatice sunt construcții complexe, ce se realizează pe parcursul a mai multor ani și necesită fonduri foarte mari, echipe de analiști, designer, programatori și personal de testare, implementare și mentenanță, achiziționare de echipamente, diverse instrumente necesare, personal calificat, etc. (Ivan I., Noșca Gh., Capisizu S., 2005, p.11) .
În ceea ce privește integrarea aplicațiilor informatice putem afirma că aceasta este o activitate ce “reunește oameni, echipamente, programe, dar și practici manageriale. Integrarea aplicațiilor este abordare strategică de a lega mai multe sisteme informatice, la nivel de informații și servicii, astfel încât sistemele să fie capabile să facă schimb de informații și să asigure o funcționare a proceselor în timp real.”(Lungu I., Bologă A.R., Diaconiță V., Bâra A., Botha I., 2007, p.10 ).
1.2.Prezentarea Grupului Agricover
Compania Agricover s-a extins în domeniul agribusiness-ului începând cu procesarea semințelor oleaginoase pentru ulei, depozitarea și comerțul cu cereale și oleaginoase. Încă de la început compania a avut succes prin faptul că a facut legătura între marii procesatori și fermieri, oferind siguranță ambelor părți. Firma a luat naștere în urma fuziunii dintre S.C. Comcereal Buzău S.A. și S.C. Ulvex S.A. Buzău, în anul 2000. Prin diversificarea produselor și serviciilor în domeniul agricol a reușit de-a lungul timpului să își păstreze relațiile de parteneriat cu furnizorii săi, dar în același timp să își fidelizeze și clienții. În present, sediul central al Grupului Agricover, se afla în Voluntari, județul Ilfov, Clădirea Cubic Center pe bulevardul Pipera nr 1B, la etajul 6, iar adresa electronică este www.agricover.ro .
Misiunea companiei este aceea de a contribui la crearea unui climat de siguranță pentru partenerii săi. De asemenea, Grupul consideră că pentru câștigarea piețelor și a încrederii clienților trebuie să acorde o atenție sporită în ceea ce privește calitatea produselor oferite și bineînțeles, construirea unei echipe profesioniste, competitive, ce poate să raspundă așteptărilor partenerilor lor.
Pentru început, compania șapte silozuri de o capacitate de cca 300.000 tone. În prima etapă și-a înființat una dintre diviziile sale, mai exact Divizia de Semințe. Între anii 2001-2005, au apărut și divizia de Achiziți și cea de Investiții. Reușind să modernizeze rafinăria de ulei de la fabrica din Buzău, Agricover a înființat Stația de condiționare de semințe de la Râmnicu Sărat și Stația de procesare a semințelor la Scânteia (jud. Ialomița). De asemenea, au realizat un program amplu de investiții în cadrul secției de rafinare a uleiului. Referitor la creșterea organică, compania s-a implicat în lansarea mărcii de ulei Ulvex și extinderea distribuției la nivel national și au reușit să obțină în acest fel certificarea ISO 9001 pentru fabrica de ulei de la Buzău.
O nouă stație de procesare a semințelor a fost pusă în funcțiune la Mirosi, în județul Argeș, în anul 2006. Tot în acest an au achiziționat firma Suntory Agrochemical (actual Agricover SRL) – unul din principalii distribuitori de produse pentru protecția plantelor din România. Principalul obiectiv de îndeplinit al companiei în acest an a fost atingerea unei cote de piață de 17%. Prin realizarea acestuia , Agricover a ajuns pe locul 2 pe piața de ulei din România.
În 2007, compania a decis orientarea afacerilor către agribusiness și a renunțat astfel la fabrica de ulei din Buzău. Conform noului obiectiv stabiliti, în anul 2008 lansează pe piața serviciilor financiare adresate agriculturii Agricover Credit IFN, reprezentând o altă divizie în cadrul companiei ce presupune oferirea de împurmuturi clienților săi. De asemenea, se continua și programul de investiții pentru modernizarea și creșterea capacităților de depozitare și procesare și astfel compania se lansează și pe piața din Bulgaria ca distribuitor de inputuri pentru fermierii locali.
În următorul an, Agricover se asociază cu Danish Agricultural Advisory Service, ce cuprindea două entități specializate în consultanță pentru agricultură – AgroAdvice și FEDAR (Fundația Europeana de Dezvoltare Agricolă și Rurală), fapt ce avea să îi aducă multe avantaje în următorii ani.
Anul 2010 a fost pentru Agricover un an prosper ce a adus lansarea a noi linii de business și anume: distribuția de motorină ce presupune asigurarea necesarului de motorină pentru fermele vegetale și animale și Agricover Livestock ce oferă procesatorilor din domeniu, un flux constant cu materie primă constituită din animale cum ar fi vacile și porcii.
Anul 2011 reprezintă pentru Agricover un nou an de profitabilitate și extindere datorită faptului că se înființează o nouă companie asociată și anume Agricover Broker de Asigurare SRL, ce are ca scop să ofere clientilor Grupului o soluție perfectă de asigurare a culturilor agricole și a bunurilor (clădiri, silozuri, utilaje, tractoare, stocuri de marfă).
În prezent, Grupul Agricover este format din patru companii private cu capital românesc și anume Agricover SA, Agricover SRL, Agricover Credit IFN și mai nou din 2009 Agricover Bulgaria.
Din punct de vedere financiar, Grupul Agricover a încheiat anul fiscal 2013 cu o cifră de afaceri de 1 miliard de lei, fiind în creștere cu 5% față de anul precedent. Liniile de business Agricover Livestock, Agricover Credit IFN și Agricover Bulgaria au contribuit cu circa 80 de milioane de lei la această creștere. O contribuție la această creștere a avut-o și vânzarea de motorină, care a crescut cu 28% în acest an față de 2012. De asemenea, Grupul este lider pe piața distribuției de inputuri, fapt datorat creșterii numărului de clienți și restructurării portofoliului de produse ce sunt în conformitate cu strategia companiei și cu nevoile clienților.
În ceea ce privește diviziile, Grupul Agricover deține următoarele divizii: Distribuție, Cereale, Silozuri, Logistică, Credit, Asigurări, Livestock, Ferme și Bulgaria.
Divizia de Distribuție promovează pachetele tehnologice și de asemenea oferă clienților semințe certificate, îngrășămintele necesare pentru obținerea unor recolte profitabile și de calitate superioară, produse de uz fitosanitar și motorină. Prin pachetele tehnologice Grupul urmărește să crească productivitatea recoltelor și veniturile fermierilor și în același timp să ajute la dezvoltarea sistemului de management agricol, încurajând ideea de agricultură durabilă.
Agricover Cereale achiziționează și comercializează toate tipurile de culturi agricole esențiale pentru economia țării: grâu, orz, orzoaică, rapiță, porumb, floarea soarelui, și soia. Agricover susține fermierii încă de la înființarea culturilor și le oferă acestora pachete de pre-finanțare. Pe de altă parte, Grupul devine client, prin achiziționarea recoltelor obținute, fapt ce conferă fermierilor o piață de desfacere sigură.
Agricover Silozuri se ocupă de serviciile de condiționare, preluare și depozitare a cerealelor și a produselor oleaginoase în mai multe locații (32)- silozuri și baze de recepție- situate în 9 județe din sudul României. În ceea ce privește capacitatea totală de depozitare, Agricover ocupă locul al doilea în țară (peste 700.000 tone).
Ativitatea din divizia Agricover Logistică este complet integrată în procesul de distribuție inputuri, achiziție recolte și transport produse agricole. Aceasta oferă următoarele servicii: transportul recoltelor de la clientul fermier la siloz și de la silozuri la procesatori și livrarea inputurilor la termen, direct la fermă. Prin promtitudinea privind îndeplinirea cerințelor logistice ale fermierilor, compania este recunoscută peste tot, iar cei 140 de parteneri transportatori sunt direct responsabili pentru acest lucru.
Agricover Credit IFN este o altă divizie a Grupului ce oferă credite de capital de lucru atât pentru finanțarea necesarului de exploatare pentru culturile agricole, cât și pentru zootehnie și industria procesatoare. Agricover Credit IFN dispune de un capital social subscris de 49,4 milioane RON și funcționează după regulile impuse de Banca Națională a României.
Divizia Broker de Asigurări are capacitatea de a înțelege riscurile ce pot apărea în activitățile agricole. Astfel Grupul Agricover susține afacerea clienților, prin asigurare și asistență pe o anumită perioadă de timp, prevăzută în contractul de asigurare.
Agricover Livestock este ce mai nouă linie de afaceri și are în vedere furnizarea de materie primă de care este nevoie în industria procesatoare a cărnii pe de o parte, iar pe de altă parte satisfacerea nevoilor clienților fermieri cu activitate în zootehnie.
Divizia specializată în producție vegetală din principalele culturi agricole este reprezentată de Agricover Ferme. Grupul deține două ferme ce se află situate în județele Argeș și Ialomița, cuprinzând o suprafață totală de 3000 de ha. Prin intermediul acesteia, Agricover a demarat proces complex de dezvoltare a fermelor, în cadrul acestui program continuându-se cu extinderea suprafețelor și dotarea tehnică cu utilaje agricole performante.
În ceea ce privește divizia pentru Bulgaria, Grupul oferă fermierilor întreg portofoliul de produse necesare unei recolte profitabile. Astfel, garanția calității produselor oferite și implicării companiei în satisfacerea nevoilor și cerințelor clienților are la baza parteneriatele puternice cu furnizorii renumiți de inputuri pentru agricultura.
În ceea ce privește organizarea, Grupul Agricover este format din următoarele departamente: logistică, vânzare, contabilitate, creditcontroling, IT, resurse umane și marketing, departamente ce corespund fiecărei divizii în parte.
Referitor la departamentul IT din cadrul Grupului, putem meționa faptul că utilizează un sistem informatic modern și anume WinMentor. Acesta oferă o soluție integrată, eficientă și flexibilă pentru gestionarea afacerilor și este un sistem specific organizațiior cu profil de comerț en-gros și en-detail și de producție agricolă.
Grupul Agricover acoperă întreg terioriul României prin specialiștii în depozitarea și recepția cerealelor și suportul personalului, prin experți în ceea ce privește achizițiile și nu în ultimul rând prin forța de vânzări specializată, având peste 600 de angajați. Aceștia își desfăsoară activitatea în 45 de puncte de lucru și anume: un sediu central, 2 sedii regionale, 9 depozite regionale de inputuri și de asemenea 33 de baze de recepție și silozuri. Forța de vânzare este distribuită corespunzător, compania folosind organizarea pe regiuni, împarțind întreaga țara în 9 sectoare regionale, cum este ilustrat în anexa 1.
1.3. Prezentarea activițății ce va fi informatizată
“Conceptul de informație reprezintă o noțiune de maximă generalitate care semnifică o comunicare , o veste, o știre, un mesaj, un semnal,etc. despre evenimente , fapte, stări, obiecte, despre forme de manifestare a realității care ne înconjoară. Informația reprezintă cantitatea de noutate adusă de un mesaj din lumea reală și este furnizată de altcineva. Informația, energia și materia sunt cei mai importanți factori ai economiei moderne pe lângă pământ, capital și forță de muncă.” (Orzan Gh., 2001, p. 9).
Prin sistem informatic, înțelegem un ansamblu structurat și corelat de reguli și proceduri și mijloace care permit aplicarea de metode organismului respectiv în scopul de a realiza obliectivele predefinite, măsurabile între anumite limite. Sitemul informatic este o componentă a sistemului informațional, mai exact acea parte care preia și rezvolvă sarcinile de culegere, prelucrare, transmitere și stocare a datelor cu ajutorul sistemelor de calcul (Orzan Gh., 2001, p. 40).
Pornind de la noțiunea de informație și cea de sistem informatic, în ceea ce privește acest subcapitol, am luat în considerare prezentarea unei aplicații ce doresc să o implementez în scopul îmbunătățirii desfășurării activităților cu clienții a Grupului Agricover.
Aplicația este destinată utilizării de către fermieri și cuprinde o interfață prin care utilizatorul poate accesa mai multe procedee și metode necesare în activitatea pe care acesta o desfășoară. Aceasta presupune asigurarea comenzilor online pentru produsele și serviciile Agricover, fermierul având acces la baza de date cu prețurile aferente, dar și alte facilități.
Propunerea mea în ceea ce privește aplicația presupune gruparea facilitaților în funcție de fiecare divizie a Grupului în parte, utilizatorul putând accesa din contul propriu, tot ce are nevoie pentru efectuarea vânzării/ cumpărării, și nu numai. Astfel, principalele funcționalități care vor asigura flexiblitatea și un mod de lucru organizat în activitatea Grupului Agricover, sunt următoarele:
Posibilitatea de cumpărare și comandă online a produselor și serviciilor Agricover;
Vizualizarea ofertelor promoționale propuse de Grupul Agricover;
Posibilitatea de vânzare a recoltei la un preț avantajos, transportul fiind asigurat la cerere;
Posibilitatea închirierii utilajelor și echipamentelor agricole pe care le pune la dispoziție Grupul Agricover;
Facilitarea obținerii unui credit din cadrul diviziei Credit IFN, utilizatorul putând vizualiza toate calculele aferente (suma maximă, dobânda, rata, etc.), dar și situația contului său în orice moment;
Aplicația poate calcula producția simulând procesele în funcție de diferiți factori (naturali și artificiali) folosind un algoritm bazat pe istoric (anii precedenți de recoltă), suprafața agricolă deținută de fermier, dar și în funcție de utilizarea diferitelor tipuri de semințe, fertilizatori, erbicide, echipamente și utilaje agricole;
De asemenea, aplicația va cuprinde și o rubrică specială în care fermierul va putea scrie Grupului opiniile și sugestiile, neclaritățile, dar și probleme sau mulțumirile pe care le are în ceea ce privește activitatea Agricover. Astfel, clientul va putea primi răspunsuri oricând, echipa Agricover fiind mereu pregătită să comunice cu acesta.
În ceea ce privește modalitățile prin care voi realiza această aplicație, am luat în considerare limbajul de programare Java, Microsoft Sql Server implentate în mediul de dezvoltare Eclipse, tehnologii informatice ce vor fi prezentate în capitolul ce urmează.
CAPITOLUL II- PREZENTAREA TEHNOLOGIEI INFORMATICE UTILIZATE
În acest capitol am abordat aspecte teoretice ce fac referile la tehnologia informatică utilizată pentru realizarea aplicației. Astfel, am folosit mediul de dezvoltare Eclipse, în care am utilizat noțiuni de Java, de Sql, Html și CSS.
Mediul de dezvoltare Eclipse este o comunitate Open Source ce ne ajută în conceperea unei platforme de dezvoltare a diverselor aplicații și este alcătuită din medii de rulare, framework-uri și anumite unelte necesare pentru crearea și întreținerea de aplicații. Dintre limbajele de programare pentru care acest program oferă suport se pot enumera: C, C++, Java, etc. și de asemenea dezvoltarea de aplicații web ce folosesc limbaje precum PHP sau pagini bazate pe JSP. (Anon., [Online], disponibil la adresa http://www.eed.usv.ro /~alexg/laboratoare/rc2/ Utilizare_Eclipse.html, accesat la data de 9 iulie 2014).
Eclipse este un mediu de dezvoltare integrat (IDE) care facilitează scrierea programelor. Astfel, putem enumera următoarele aspecte pozitive ale acestui program:
– Un proiect reușit, de anvergură, foarte bine dezvoltat
– Este o platformă în sine, iar uneltele folosite pentru dezvoltare sunt adăugate ca extensii
– Cross platform (scris în Java)
– Același GUI pentru o varietate de limbaje (folosirea mai multor perspective)
– Multe IDE-uri comerciale se bazează pe aceste mediu de dezvoltare, Eclipse (dezvoltate de Adobe, Freescale, IBM, etc.) (Frăsinaru C., 2009, p.58).
2.1. Prezentarea tehnologiei Java
În ceea ce privește platform de lucru Java, aceasta este o colecție de obiecte care interacționează cu alte obiecte invocându-și unul altuia metodele. Fiecare obiect este de un anumit tip și acel tip este definit de o clasă sau o interfață.
Clasa este un template ce descrie tipurile de stare și comportament pe care le suportă obiectele de tipul clasei.
Obiect poate fi considerat în momentul rulării când JVM (Java Virtual Machine) Acela ce întâlnește cuvântul cheie "new" și va folosi clasa potrivită pentru a crea un obiect care este o instanță a acelei clase. Acel obiect va avea propria stare și acces la toate comportamentele definite de clasa sa.
Starea (variabilele de instanță) presupune ca fiecare obiect( instanța a unei clase) va avea propriul set de variabile de instanță unic după cum e definit în clasă. Luate per ansamblu, starea unui obiect este alcătuită din valorile atribuite variabilelor de instanță ale unui obiect.
Conceptul de comportament (sau metoda) intervine atunci când un programator creează o clasă, creează metode pentru acea clasă. Practic, metodele sunt locul unde e păstrată logica clasei. De asemenea, metodele pot fi considerate locul unde se realizează munca adevărată, unde sunt manipulate datele și unde se execută algoritmii.
În ceea ce privește noțiunile folosite de programare orientată obiect, acestea au fost: abstractizarea, incapsularea, moștenirea și polimorfismul.
Programarea orientate obiect este o tehnică ce a apărut în anii ’60 și s-a impus în anii ’90, dovedindu-se benefică pentru realizarea sistemelor software de mare complexitate (Roșca I. Gh., Ghilic-Micu B., Cocianu C., Stoica M., Uscatu C., Mircea M., 2007, p. 193).
În ceea ce urmează voi define aceste aspecte teorectice, după cum urmează:
Primul lucru ce îl putem face pentru a ne ușura munca este găsirea unui model ce simplifică realitatea, separând astfel detaliile în detalii ce ne interesează și detalii care nu ne ajută pentru rezolvarea problemei. Acest proces de grupare a datelor și a metodelor de prelurare specific rezolvării unei problem se numește abstractizare. Abstractizarea, identifică trăsăturile caracteristice esențiale ale unui obiect, care îl deosebesc de toate celelalte feluri de obiecte (Smeureanu I, Dardala M., 2002, p.10).
“Incapsularea reprezintă proprietatea de opacitate a obiectelor cu privire la structura lor internă și la modul de implementare a metodelor. Ea este legată de securitatea programării, furnizând un mecanism ce asigură accesul controlat la starea și funcționalitatea obiectelor. Se evită astfel modificări ale atributelor obiectelor și transformări ale acestora care pot să le deterioreze.” Practic, incapsularea este principiul conform căruia o entitate software (în particular, un obiect) trebuie să aibă interfața complet separată de implementare. Toate datele și codul implementării trebuie sa fie complet ascunse (hidden) în spatele interfeței (Roșca I. Gh., Ghilic-Micu B., Cocianu C., Stoica M., Uscatu C., Mircea M., 2007, p. 196).
Mecanismul de derivare ne permite să creăm ușor noi clase, ce preiau caracteristicile unor clase de bază, ce au fost deja definite. Derivarea are ca scop reutilizarea soft-ului, prin intermediul unor funcții deja scrise pentru clasele ce există și se elimină redundanța descrierilor, doar în cazul în care clasele au elemente comune. Este vorba practic despre moștenire. Moștenirea se folosește pnetru reutilizarea codului și folosirea polimorfismului. Nu există moștenire multiplă, ceea ce înseamnă că o clasă extinde o singură clasă, dar poate implementa mai multe interfețe. Moștenirea în Java se realizează prin extinderea claselor și implementarea de interfețe (Smeureanu I, Dardala M., 2002, p.108).
Polimorfismul reprezintă abilitatea unui obiect de a lua mai multe forme. De exemplu, o referință către clasa părinte este folosită de clasa copil.
Java este standardul global pentru dezvoltarea și implementarea de aplicații mobile, jocuri, conținut pe web și software la nivel de companie, și semnifică astfel baza pentru multe dintre aplicațiile în rețea. Prin intermediul acestui limbaj de programare se pot implementa eficient aplicații deoarece pune la dispoziție instrumente complexe cu performanțe ridicate. De asemenea, această platformă asigură portabilitatea aplicațiilor chiar și în mediile de calcul cu o compatibilitate redusă.
În principiu, platforma java prezintă atât avantaje cât și dezavantaje. În ceea ce urmează voi prezenta câteva dintre importantele funcții ale platformei, dar și avantajele acesteia, toate descrise de compania international Oracle.
Platforma Java este una independentă, avatajul său principal fiind că aceasta rulează pe majoritatea sistemelor de operare și a platformelor existente. Acest lucru implică o altă funcție importantă și anume că oferă performanțe ridicate. Pentru a putea fi independentă, platforma Java trebuie sa fie unul dintre cele mai rapide medii de programare. În plus, și optimizările integrate pentru medii multi-fir îi conferă rapiditate.
Un alt avantaj al acestui mediu de lucru este faptul că Java este un limbaj de programare ușor de învățat și se potrivește atât pentru dezvoltatorii începători cât și pentru cei experimentați.De asemenea, limbajul Java este bazat pe anumite standarde și evoluează împreună cu tehnologiile conexe prin Java Community Process, un mecanism de dezvoltare a specificațiilor tehnice pentru Java.
Printre avantaje se numără și utilizarea prioritară la scară globală a acestei platform, Java fiind cea mai populară platform la nivel mondial, oferind astfel un ecosistem foarte atractiv pentru dezvoltatori.
În ceea ce privește mediul de execuție, Java oferă o gamă largă de medii de execuție, ce sunt consectente și care permit o implementare fiabilă. De asemenea, o altă funcție importantă, ce poate fi transformată în avantaj este aceea că platforma Java este optimizată pentru integrare, îndeplinind cerințele cheie, cum ar fi procesorul integrat, gestionarea alimentării, impactul redus asupra mediului. Platforma permite obținerea unor performanțe îmbunătățite pentru dispozitivele ce dispun de resurse limitate( Bloch J., 2007, p. 67).
Java oferă performanțe de excepție și aplicații portabile., atingând performanțe maxime, reușind să asigure simultan portabilitatea pe o gamă largă de procesoare și sisteme de operare integrate. Un alt avantaj este considerat faptul că acest mediu de lucru este un model de securitate testat și oferă un mediu de aplicații avansat dar în același timp este și extrem de sigur, ceea ce îl face să fie perfect pentru aplicațiile în rețea. (Oracle România, disponibil online la adresa http://www.oracle.com/ro/technologies/java/features/index.html , accesat la 8 mai 2014) .
Limbajul de programare Java a fost folosit la dezvoltarea unor tehnologii dedicare rezolvării unor probleme din cele mai diverse domenii. Tehnologiile acestea au fost grupate în așa numitele platforme de lucru, și reprezintă seturi de librării scrise în limbajul Java, precum și alte programe utilitare diverse, ce sunt folosite pentru dezvoltarea de aplicații sau component destinate unei anumite categorii de utilizatori (Frăsinaru C., 2009, p.12).
Modificatorii de acces reprezintă cuvinte rezervate ce controlează accesul celorlalte clase la membrii unei clase. Pentru variabilele și metodele unei clase putem enumera următorii specificatori de acces: public, protected, private și cel implicit (la nivel de pachet) (Gavrilă G., 2004, p. 16).
Interfața presupune un contract pentru ceea ce face o clasa, fără a comunica mai multe detalii despre cum va face. Termenul de interfață se referă la o colecție de metode, fără a fi implementate și fără declarații de constant.
În ceea ce privește termenul de colecție, aceasta este un obiect ce grupează mai multe elemente într-o singură unitate. Prin intermediul acestor colecții putem avea acces la diferite tipuri de date precum stive, mulțimi matematice, vectori, liste înlănțuite, tabele de dispersie, etc. O colecție este folosită atât pentru memorarea și manipularea datelor, dar, de asemenea și pentru transmiterea unor informații de la o metodă la alta. (Frăsinaru C., 2009, p.58).
Din interfața “Colecții” pot fi derivate direct două interfețe pentru tipurile abstracte și anume: Set – folosită pentru mulțimi de elemente distincte și List – utlizată pentru secvențe de elemente, în care fiecare element are un succesor și un predecesor și este de asemenea localizabil prin poziția sa în listă.
Tipurile de date se împart în două categorii în limbajul Java: tipuri primitive și tipuri referință. Acest limbaj pornește de la premiza că ”orice este un obiect”, astfel că tipurile de date ar trebui să fie de fapt definite de clase și, de asemenea, toate variabilele ar trebui să memoreze instanțe ale acestor clase (obiecte). Acest principiu este perfect corect, însă, pentru usurință în programare, mai există și așa numitele tipuri primitive de date, care sunt cele uzuale : aritmetice – întregi: byte (1 octet), short (2), int (4), long (8) – și reale: float (4 octeți), double (8); caracter: char (2 octeți); logice: boolean (true și false). (Frăsinaru C., 2009, p.21)
În ceea ce privește tehnologia JDBC, aceasta este o tehnologie prin care putem accesa baza de date în java. Practic, aceasta este o aplicație de programare a unei interfețe pentru limbajul Java care definește modul în care un client poate accesa o bază de date (Hornick M., Marcadé E., Venkayala S., 2007, disponibil la adresa: http://www. sciencedirect.com/science/article/pii/B9780123704528500335, accesat pe 9 iulie 2014).
Un alt instrument folositor pentru dezvoltatorii Java este și ajută la generarea modelelor prin hibernate pentru diverse entități cum ar fi fișierele de cartografiere și codul de adnotare. Unul dintre cele mai comune cazuri de utilizare este “ingineria inversă” ce generează modelul de clasă Hibernate, fișierul de mapare Hbm sau codul de adnotare din tabelele bazei de date. ( http://www.mkyong.com/hibernate/how-to-install-hibernate-tools-in-eclipse-ide, online, accesat la 9 mai 2014).
O altă platformă este Spring, o platformă cu sursă deschisă pentru simplificarea scrierii aplicațiilor în limnajul Java. Este folosit în principal pentru plaforma Java EE, dar există cazuri în care Spring poate fi utilizat pe orice aplicație Java, fiind văzut în comunitatea programatorilor ca o alternativă a modelului Enterpise JavaBeans.
Java Servlet Pages (JSP) este o tehnologie ce permite dezvoltatorilor web să elaboreze rapid și ușor, pagini Web dinamice ce sunt folosite ca o pârghie pentru sistemele de afaceri de success. Din familia tehnologiilor java, tehnoogia JSP permite dezvoltarea rapidă a aplicațiilor web-based, ce sunt independente de platform. Tehnologia JSP separă interfața de utilizator și permite designerilor să schimbe aspectul general al paginii fără a modifica dinamic conținutul (Oracle, [Online], disponibil la http://www.oracle.com/technetwork/java/overview-138580.html, accesat la 10 mai 2014).
În ceea ce privește excepția, aceasta reprezintă un eveniment ce se produce în timpul execuției unui program și are ca și consecință provocarea întreruperii cursului normal al execuției.
Ce presupune o validare? Referitor la acest aspect, putem afirma că validarea datelor de intrare primite de la user pentru a menține integritatea datelor este o parte foarte importantă a aplicației logice. Validarea datelor poate avea loc la diferite niveluri chiar și la cele mai simple aplicații, și în special la cele dezvoltate. Un exemplu concret de validare este Java Beans Validation ( Anon., http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html, online accesat la 9 mai 2014).
2.2. Prezentarea tehnologiei MySQL. Limbajele Html și CSS
Bazele de date fac parte din viața de zi cu zi a oamenilor, uneori fără ca aceștia să fie conștienți de acest lucru. De la aplicațiile obișnuite, spre exemplu baze de date pentru companiile de asigurare, domeniul de activitate al bazelor de date poate cuprinde si aplicații ce stochează imagini reale în baza de date pentru recunoaștere. Acestea fiind zise, este clar că utilizarea bazelor de date este omniprezentă și în continuă creștere. Motivele pentru care am ales să lucrez cu MySQL, în favoarea celorlalte produse disponibile, respectiv cele oferite de Oracle, Microsoft SQL Server, PostgreSQL, sau Informix, sunt reprezentate de faptul că documentația este bine realizată, rulează pe mai multe platforme și este foarte stabil. În cazul aplicațiilor Web, MySQL a demonstrat de-a lungul timpului faptul că surclasează celelalte produse, putând satisface fără probleme cerințele de viteză la Internet, fiind cel mai popular tip de bază de date open source.
MySQL cunoaște mai multe tipuri de date- ceea ce înseamnă, în general, categoriile în care variabilele pot fi reprezentate. Astfel, acestea pot fi: variabile numerice, variabile tip caracter, variabile de timp.
Variabilele numerice, pot fi considerate numerele, cum ar fi 48 sau 193.62. MySQL înțelege numerele specificate ca numere întregi (fără partea fracționară) sau ca valori virgulă-mobile (cu o parte fracționară). Numerele întregi pot fi specficate în format zecimal sau hexazecimal. Un număr întreg constă într-o secvență de cifre. Un întreg specificat în formă hexazecimală poate fi scris ca “0 x”, urmat de una sau mai multe cifre hexazecimale (Dubois P., 1999, p. 70)
MySQL înțelege de asemenea și notațiile științifice. Acest lucru este indicat de apariția imediată unui număr întreg sau număr în virgulă mobilă cu "e" sau "E", un semn de caracter ("+" sau "-)", precum și un exponent întreg. 1.34E +12 și 43.27e-1 sunt numere de notație științifică legală. Pe de altă parte, 1.34E12 nu este legal, deoarece semnul de caracter lipsește înainte de exponent. Numerele pot fi precedate de semnul minus ("-") pentru a indica o valoare negativă.
În ceea ce privește variabilele de tip caracter, știm că șirurile de caracter sunt variabile cum ar fi “Madison” sau “pacientul arată o îmbunătățire”. Se pot folosi astfel fie ghilimele simple fie cele duble pentru a înconjura o variabilă de tip șir de caractere. În contexul de “string” , constantele hexazecimale pot fi utilizate pentru a specifica variabile de tip caracter. Sintaxa este aceeași cum a fost descrisă anterior pentru variabilele numerice, singura excepție fiind că perechile de cifre hexazecimale sunt interpretate ca fiind coduri ASCII și sunt transformate în caractere. De exemplu, atunci când este interpretat ca un șir, 0x616263 este de fapt "abc" (Dubois P., 1999, p. 68).
Referitor la variabilele temporare, putem enumera variabila data“1999-06-17” sau varabila ceas “12:30”. MySQL înțelege de asemenea și variabilele combinate data/time cum ar fi “1999-06-17 12:30”. Un aspect important este acela că MySQL reprezintă datele în ordinea an-lună-zi. Acest lucru surprinde de multe ori nou-veniți la MySQL, deși acest format este standardul ANSI SQL. Puteți afișa valori de dată orice mod doriți, folosind funcția DATE_FORMAT, dar formatul de afișare implicit enumeră primul an, iar valorile de intrare trebuie să fie specificate în primul an
În ceea ce privește valorile NULL acestea sunt de genul "typeless". În general, acesta este folosit pentru a însemna "fără valoare", "valoarea necunoscut", "valoare lipsă", "în afara domeniului", "nici unul dintre cele de mai sus," și așa mai departe. Putem introduce valori NULL în tabele, le prelua de la mese, și testa dacă sau nu o valoare este NULL. Nu se poate efectua media aritmetică pe valori NULL (Dacă se încearcă, rezultatul este NULL) (Dubois P., 1999, p. 70).
Limbajul Html ( HyperText Markup Language) este o aplicație SGML (Standard Generalized Markup Language, adică limbajul standard generalizat de marcare) și este specializată pentru hipertext și adaptat la Web. Paginile web scrise în acest limbaj, permite utilizatorilor să producă pagini care includ texte, grafică și indicatori (legături) la alte pagini Web. Html este un limbaj de marcare, ce descrie cum anume trebuie formatate textele. Precizăm că limbajele de marcare conțin comenzi explicite pentru formatare.De asemenea, acest limbaj are și un foarte mare avataj: este simplu de scris pentru un program de navigare care să interpreteze comenzile de marcare (Orzan Gh., 2001, p. 160).
CSS este limbajul ce ne ajută la descrierea și prezentarea de pagini Web, inclusiv culori, layout, și fonturi. Acesta permite adaptarea prezentării în diferite tipuri de dispozitive, cum ar fi ecrane mari, ecrane mici sau imprimante. CSS este un limbaj independent de limbajul Html și poate fi folosit împreuna cu orice alt limbaj de marcare bazat pe XML. Prin separarea limbajului CSS de Html se pot menține site-uri mult mai ușor, file în stil acțiune pe mai multe pagini, și pagini personalizate pentru diferite medii. Se face referire practic la separarea structurii (sau conținutului) de prezentarea efectivă (W3C, 2013, [Online], disponibil la adresa http://www.w3.org/standards/webdesign/htmlcss, accesat la 11 iunie 2014).
CAPITOLUL III- ANALIZA ȘI PROIECTAREA APLICAȚIEI INFORMATICE
3.1. Analiza sistemului informatic
În cele ce urmează, voi realiza analizei bazei de date și voi demonstra utilitatea aplicației realizată pentru Grupul Agricover, prin faptul că facilitează munca depusă de angajați și mai ales cea a clienților. Aceată aplicație este concepută pentru a veni în ajutorul fermierilor și a Grupului Agricover și reprezintă clar un avantaj din punct de vedere economic, deoarece majoritatea acțiunilor se pot declanșa automat, sistemul beneficiind de multe automatizări și calcule prin simpla accesare cu un user și o parolă ce sunt furnizate automat clienților în momentul în care aceștia încheie un contract cu Grupul Agricover, sau la cerere în cadrul formularului dipsonibil pe site. În cazul angajaților, aceștia primesc credențialele la angajare, având automat acces la aplicație, iar in funcție de divizie și nivel, drepturi de administrator sau user obișnuit.
Astfel, acest subcapitol cuprinde prezentarea bazei de date utilizată în conceperea aplicației. Observăm din schema conceptuală că baza de date conține 9 tabele, împreună cu relațiile dintre acestea. Principalele entițăți utilizate în analiza sistemului informatic luat în considerare sunt: user, persoana, funcție, produs, credit, contract, contractDetail, sol, producție. Am ales să analizez aceste elemente deoarece am considerat că sunt elementele cheie pe care se bazează aplicația mea.
În cele ce urmează, vom analiza structura bazei de date relaționale și conținutul tabelelor, pentru fiecare entitate în parte, strucurată sub forma unui obiect.
Tabela persoană reprezintă modul în care fiecare individ este introdus în baza de date, diferența între angajat și client realizându-se pe baza unui discriminator de tip boolean care în cazul în care are valoarea false, nu permite completarea câmpului funcție_id ce face legătura cu tabela funcție, mandatorie pentru a fi angajat al firmei. Acest lucru se realizează prin intermediul folosirii restricțiilor. Tabela conține câmpurile: id(pk), nume, prenume, adresa, telefon, angajat, precum și funcție_id(fk), fiecare având tipul descris în figura 3.1.1.
Tabela funcție stochează date referitoare la denumirea și descrierea funcției, precum și salariul minim, respectiv salariul maxim de încadrare, inserate în câmpurile de mai sus, indexate în funcție de id-ul funcției ce este cheie primară, legându-se de tabela angajat printr-o relație de tip 1:1.
Tabela user conține toate informațiile necesare accesului în sistem, fiind legată printr-o relatie de tip 1:1 cu tabela angajat, prin intermediul câmpului persoană_id. Diferența tipului de acces se realizează prin câmpul tip, ce indică dacă user-ul este administrator sau user, având valorile 1 sau 0. Tabela este formată din câmpurile: id(pk), username, parolă, tip, email și persoană_id.
Tabela credit conține toate informațiile despre creditele acordate de către divizia Credit IFN, atât clienților fermieri, cât și angajaților grupului Agricover. Aceasta cuprinde câmpurile id(pk), sumă, sumă_rămasă, stare și persoană_id(fk). Se poate observa că orice contract are neapărat o persoană pe numele căreia este făcut, dar nu orice persoană are neapărat un credit deschis.
Tabela contract stochează date referitoare la persoana ce a încheiat un contract de cumpărare de produse, vânzare de produse, sau închiriere de utilaje, suma totală și data semnării, fiind identificate printr-un id unic(pk), detaliile contractului fiind trecute in tabela detail, prezentată mai jos. Între tabela contract și tabela persoană se evidențiază o legătură de tip 1:M, o persoană putând încheia mai multe contracte.
Tabela contractDetail este o tabelă ce conține date detaliate privind contractele, având un id unic pentru fiecare detaliu in parte, detaliu ce conține un id de legatură către un produs, precum și cantitatea acestui produs. Conține câmpurile: id(pk), cantitate, contract_id(fk) și produs_id(fk).
Tabela produs este o entitate ce conține date referitoare la fiecare produs în parte, legându-se de tabela contract prin intermediul tabelei contractDetail, prin care se leagă printr-o relație de tip
1:M. Aceasta conține câmpurile: id(pk), denumire, pret, descriere, stoc și extra. Câmpul extra este nenul în cazul fertilizatorilor și a îngrășămintelor și reprezintă opțiunea dintr-o categorie de randamente specifice, care împreună cu randamentul dat de tipul solului și suprafața cultivată, ne ajută în cazul simulării producției estimate.
Tabela producție conține date referitoare la producția anuală înregistrată de către clienții Agricover de-a lungul anilor de când folosesc soluțiile propuse de firmă, și cuprind: id(pk), suprafață, cantitate, produs_id(fk) ce reprezintă produsul cultivat, îngrășământ_id și pesticid_id, ce sunt nenule în cazul în care fermierul a folosit una dintre categoriile de mai sus. De asemenea tabela mai conține și câmpul sol_id(fk) prin care tabela se leagă de tabela sol printr-o legătură de tip 1:1.
Tabela sol conține date referitoare la tipul de sol pe care clientul fermier cultivă și cuprinde câmpurile: id(pk), denumire, descriere și randament, ultimul câmp, împreună cu randamentele îngrășământului și a pesticidului, facilitează simularea producției.
Aplicația va fi stratificată pe niveluri pentru a spori gradul de mentenanță, control și securitate. Când spunem niveluri, ne referim la părțile de sine stătătoare ale aplicației atât din punct de vedere funcțional, cât și structural. Am tratat in mod special baza de date deoarece reprezintă scheletul pe care am creat aplicația, la pol opus aflându-se interfața vizuală, ce este singurul mod de interacțiune al utilizatorului cu datele. În cele ce urmează vom prezenta modul prin care cele două straturi interacționează, proiectând aplicația ținând cont de toate normele de eficiență, încapsulare și control al evenimentelor.
3.2 Proiectarea aplicației
În acest subcapitol vom analiza etapa de proiectare a aplicației. După proiectarea bazei de date, am putut realiza și maparea tabelelor în clase java în interiorul pachetului “model”, proiectarea metodelor de tip DAO (Data Access Object) din interiorul pachetului “dao” utilizate în cadrul tranzacțiilor la nivelul bazei de date, cât și proiectarea serviciilor pentru fiecare categorie în parte în cadrul pachetului “service” prin intermediul anotațiilor. Restul funcțiilor si metodelor necesare manipulării datelor se vor integra în cadrul pachetului “util”.
Proiectarea formularelor în pachetul “form” reprezintă ultima etapă a proiectării, fiind acționate de un controller, aflat in pachetul “action”. Pentru fiecare formular în parte, se asociază un fisier de tip jsp (Java Servlet Page), ce reprezintă o pagina dinamică, datele fiind generate automat și distribuite prin intermediul controller-ului în funcție de alegerile utilizatorului. Această ultimă etapă reprezintă partea de design, fiind la fel de importantă ca și cele anterioare, deoarece este partea vizibilă utilizatorului final. În interiorul fișierelor JSP se vor afla atât funcții Java cât și limbaj Html pe care s-a aplicat un stil CSS.
Accesul aplicației la baza de date se face prin intermediul unui conector mySql și prin setările furnizate în interioriul resursei jdbc (java database connection).
În figura 3.2.1 putem observa clasele generate prin intermediul framework-ului de persistență oferit de pachetul JBOSS Hibernate folosind Reverse Engineering, prin intermediul unui conector JDBC (Java DataBase Connection) descris in figura 3.2.2 ce face legătura dintre proiect și baza de date aflată pe un server mysql prin maparea tabelelor sub formă de clase. Astfel, fiecărei tabele îi va corespunde o clasa obiect ce va conține aceleași câmpuri precum și metodele get și set împreună cu anotațiile interpretate de către dispatcher, element ce va fi prezentat în momentul în care vom explica comunicarea cu paginile de tip servlet, în cadrul stratului visual.
În figura 3.2.3 este prezentat pachetul dao, ce contine toate funcțiile și metodele generate pentru clasele model ce implementeaza comenzi de tip Query si non-Query folosind Criteria Sql, spre deosebire de modul în care am dezvoltat baza de date prin comenzi de Sql nativ.
În figura 3.2.4, 3.2.5 și 3.2.6 observăm pachetele form, service și controller ce fac tranziția spre partea de servleți Java pe care le vom trata împreună datorită funcționalității lor ca și strat. Astfel observăm că în pachetul de tip form sunt incluse toate componentele interactive ale servleților. Pachetul service asigură metodele disponibile pentru implementarea acțiunilor din clasa controller.
În figura 3.2.7 observăm pachetel utils care conține clase util ce stabilesc partea de persistență, gestionând sesiunea de lucru Hibernate.
În figura 3.2.8 este prezentat pachetul jsp ce conține toate paginile de tip servlet ce conțin atât limbaj Html cu stil CSS, cât și cod Java. Pentru exemplificare vom alege fisierul jsp pentru login, indicat în figura de mai sus. Observăm modul în care sunt tratate erorile apărute în urma introducerii eronate a unui user sau introducerea unui user inexistent, acțiune controlată în cadrul managerului de evenimente Home Controller.
CAPITOLUL IV- REALIZAREA ȘI IMPLEMENTAREA APLICAȚIEI INFORMATICE
4.1. Implementarea aplicației
Conform capitolului precedent, considerăm depășită perioada de proiectare, astfel încat vom trata în cadrul acestui capitol doar partea de interfață grafică ce trebuie sa asigure funcționalitatea aplicației. Observăm astfel că pentru orice operație pe care o vom face asupra bazei de date, cea mai importantă secțiune o reprezintă partea ce ține de acces. Astfel vom configura fisierul de tip JSP Login, fișier ce constă în introducerea credențialelor și validarea acestora prin accesul la baza de date.
În funcție de tipul de user ce dorește sa acceseze aplicația, clasa HomeController va alege dacă pagina returnată în urma selecției va fi de tip UserMenu sau AdminMenu. Diferența între cele doua o reprezintă faptul că în cazul user-ului obișnuit, orice modificare asupra bazei de date va fi acceptată sau nu de către un administrator, în timp ce administratorul va avea drepturi depline, orice modificare făcând-se în regim auto-commit. Spre exemplu, orice commandă dată de un user se va salva inițial în cadrul unui fișier local, urmând ca apoi administratorul sa gestioneze modul în care o cerere este aprobată sau nu.
Odată cu logarea cu succes a unui utilizator, cele două meniuri vor fi aproximativ identice din punct de vedere vizual, singura diferență fiind cea prezentată mai sus. Astfel, orice user va putea alege una din secțiunile disponibile, respectiv: Home, ce reprezintă calea către site-ul Agricover în variantă statică; Contul Meu, care va redirecționa user-ul către o nouă pagină ce permite afișarea datelor, doar în cazul în care parola cerută coincide cu parola user-ului. Am considerat important din punct vedere al securității acest lucru, deoarece user-ul odată ajuns în pagina personală, poate obține informații confidențiale despre situația contului de credit, în cazul în care acesta există.
Să considerăm că user-ul a trecut de verificarea suplimentară, fapt ce îl va redirecționa spre pagina Detalii Cont, ce conține 4 secțiuni distincte. Prima secțiune permite efectuarea unei comenzi din cadrul unei liste generate dinamic formată din toate produsele disponibile în baza de date. Ținând cont ca avem o cantitate disponibilă în stoc, administratorul va decide dacă se va efectua cu succes aceasta comandă prin metode specifice ce calculează dacă stocul disponibil permite efectuarea cu succes a tranzacției. Următoarele doua secțiuni, Vânzare Produse și Inchiriază Utilaj, permit user-ului sa vândă propia producție, sau să închirieze utilaje, cererea urmând sa fie aprobată de divizia Logistică în cazul în care resursele menționate sunt disponibile. Ultima secțiune conține informații referitoare la starea creditului, afișând suma rămasă de plată.
O altă pagină numită Produse, va afișa toate elementele prezente în tabela produse, cu toate câmpurile identificate. Această parte facilitează listarea elementelor ce pot fi comandate, în listă apărând decat produsele ce se află în stoc.
Cea de a patra opțiune disponibilă utilizatorului o reprezintă afișarea rezultatului unei simulări bazate pe surse statistice ce țin cont de tipul de sol pe care se cultivă, suprafața disponibilă, respectiv opțiunile de a adăuga fertilizatori sau pesticide, oricare dintre acestea având un randament trecut în specificațiile tehnice, reprezentate printr-un numar real. Spre exemplu, în cazul folosirii unui fertilizator cu randament de 120%, numărul real asociat acestuia este 1.2, ceea ce conduce la o creștere a productivității cu 20%. Formula de calcul este descrisă de relația:
CantitateEstimată=Suprafață(hectare)*Productivitate_medie(tone/hectar)*randament_sol*randament_fertilizator*randament_pesticid;
Simularea va genera date cu o precizie de 95%, deoarece sunt alți factor de mediu ce nu sunt luați în considerare, dar care se pot adăuga într-o versiune ulterioară ce va ține cont și de precipitații sau alte cauze naturale, tot be baza unor randamente specifice.
Butonul Ajutor din cadrul meniului va redirecționa utilizatorul către o fereastră ce conține referințe Java, pentru cazurile în care este nevoie de orientare suplimentară.
Butonul Logout va redirecționa user-ul către pagina principală de login, terminând sesiunea de lucru curentă.
4.2. Prezentarea aplicației
În acest subcapitol vom prezenta fiecare fereastră în parte, putând vizualiza în mod direct toate detaliile ce sunt descrise în cadrul subcapitolului anterior.
În figurile 4.2.1 și 4.2.2 este afișată fereastra de login și testarea excepțiilor prin afișarea de eroi specifice. Spre exemplu, în cazul în care un user nu se află în baza de date, incluzând aici și cazul în care câmpurile nu sunt completate corect, pagina va afișa tipul de eroare în caz, si va restrictiona accesul la aplicație.
Meniul principal (figura 4.2.3) conține toate câmpurile prezentate anterior, funcționalitatea fiecăruia fiind descrisă vizual prin restul imaginilor atașate. Partea de cod pentru anumite elemente importante va fi disponibilă cititorului în cadrul anexelor.
Figura 4.2.4 reprezintă fereastra intermediară de securitate ce se află între afișarea informațiilor personale, care odată ce se introduce parola corectă, va redirecționa utilizatorul către pagina Situație Cont(figura 4.2.5). Figura 4.2.6 prezintă trimiterea cu success a unei comenzi pentru a putea fi procesată de divizia responsabilă.
Figura 4.2.7 prezintă pagina de afișare a produselor din baza de date, reprezentând o listă generată dinamic.
Figurile 4.2.8 și 4.2.9 prezintă ultima parte a aplicației, respectiv realizarea unei simulări ale productivității în funcție de parametrii: tip sol, tip ingrășământ, tip pesticid, tip cultură și suprafața cultivată, parametrii ce sunt colectați de sistem care prin aplicarea funcției disponibile mai sus, generează rezultatul dorit.
CONCLUZII
În cadrul acestei lucrări de licență am lucrat cu bazele de date și am realizat o aplicație web dinamică pentru a facilita munca depusă de Grupul Agricover în ceea ce privește relația acestuia cu clienții și serviciile online oferite pentru aceștia.
Mediul de lucru utilizat a fost Eclipse, unde am aplicat noțiuni de Java. Java reprezintă baza pentru multe dintre tipurile de aplicații în rețea, fiind standardul global pentru dezvoltarea și implementarea de aplicații mobile, jocuri, conținut pe web și software la nivel de companie. Lucrând în acest mod am aflat avatajele și dezavantajele limbajului Java, și în principiu cât de util este pentru implementarea aplicațiilor.
În lucrare am prezentat câteva elemente și noțiuni teoretice legate de sistemul informațional și respectiv sistemul informatic. Dezvoltarea tehnologiilor informaționale și a comunicațiilor a presupus apariția unor noi concepte și metodologii în cadrul informaticii economice, fapt ce a dus la aparitia sistemului informatic și am analizat activitatea Grupui Agricover și în concordanță cu aceasta am realizat o prezentare a activității ce va fi informatizată, mai exact descrierea pe scurt a aplicației propuse.
De asemenea, am adunat informații despre tehnologiile informatice pe care le-am uitilizat în creearea aplicației personale. Astfel, am abordat aspecte teoretice ce fac referire la instrumentele utilizate, și anume: mediul de dezvoltare Eclipse, în care am utilizat noțiuni de Java, de Sql, Html și CSS.
Ca primă fază în realizarea aplicației propriu-zisă, am realizat analiza și proiectarea aplicației informatice și am evidențiat avatajele principale în ceea ce privește utilitatea aplicației create pentru Grupul Agricover. Astfel, am început prin prezentarea bazei de date utilizată în conceperea aplicației pentru ca apoi să proiectez bazei de date și să mapez tabelele în clase java în interiorul pachetului “model”. De asemenea am rrealizat metodele DAO din interiorul pachetului “dao” utilizate în cadrul tranzacțiilor la nivelul bazei de date, cât și proiectarea serviciilor pentru fiecare categorie în parte în cadrul pachetului “service” prin intermediul anotațiilor.
Realizarea și implementarea aplicației informatice pentru Grupul Agricover reprezintă partea practică a proiectului de licentă. Aceată aplicație este concepută pentru a veni în ajutorul fermierilor și a Grupului Agricover și reprezintă clar un avantaj din punct de vedere economic, deoarece majoritatea acțiunilor se pot declanșa automat, sistemul beneficiind de multe automatizări și calcule prin simpla accesare cu un user și o parolă.
În concluzie, consider că aplicația realizată și modul de lucru în acest program, m-au ajutat să descopăr avatajele și dezavantajele limbajului Java, și în principiu cât de util este pentru implementarea aplicațiilor, iar faptul că aplicația este de tip web, ne ajută sa gestionăm mai bine resursele tehnice de care dispunem, atât din punct de vedere al clienților, cât și al activității grupului Agricover.
ANEXE
Anexa 1
Figura 1- Împărțirea pe regiuni
Sursa: http://www.agricover.ro/distributie/echipa-de-vanzari.html
Anexa 2
package ro.practica.model;
// Generated Apr 25, 2014 10:32:37 AM by Hibernate Tools 3.4.0.CR1
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* User generated by hbm2java
*/
@Entity
@Table(name = "user", catalog="a_sav")
public class User implements java.io.Serializable {
private int id;
private Angajat angajat;
private String parola;
private String tip;
private String username;
private String email;
public User() {
}
public User(String parola, String username) {
this.parola = parola;
this.username = username;
}
public User(Angajat angajat, Set<ContractDetail> evenimente, String parola, String tip, String username, String email) {
this.angajat = angajat;
this.parola = parola;
this.tip = tip;
this.username = username;
this.email=email;
}
@Id
@GeneratedValue
@Column(name = "ID", unique = true, nullable = false, length = 20)
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idAngajat")
public Angajat getAngajat() {
return this.angajat;
}
public void setAngajat(Angajat angajat) {
this.angajat = angajat;
}
@Column(name = "parola", unique = true, nullable = false, length = 100)
public String getParola() {
return this.parola;
}
public void setParola(String parola) {
this.parola = parola;
}
@Column(name = "tip")
public String getTip() {
return this.tip;
}
public void setTip(String tip) {
this.tip = tip;
}
@Column(name = "username", unique = true, nullable = false, length = 100)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Anexa 3
package ro.practica.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import ro.practica.model.User;
import ro.practica.util.Utils;
@Transactional
@Repository("userDao")
public class UserDao extends MainDao{
@Autowired
private SessionFactory sessionfactory;
public void saveUser(User user) {
sessionfactory.getCurrentSession().saveOrUpdate(user);
}
public List<User> getUser(String username, String parola) {
@SuppressWarnings("unchecked")
List<User> userlist = sessionfactory.getCurrentSession()
.createCriteria(User.class).add(Restrictions.eq("username", username))
.add(Restrictions.eq("parola", parola)).list();
if (!Utils.isEmptyNull(userlist)) {
return userlist;
} else {
return null;
}
}
public List<User> getUserList() {
@SuppressWarnings("unchecked")
List<User> userlist = sessionfactory.getCurrentSession()
.createCriteria(User.class).list();
return userlist;
}
public User getUserByUser(String username) {
// getSession().beginTransaction();
DetachedCriteria c = DetachedCriteria.forClass(User.class);
Criteria criteria = c.getExecutableCriteria(sessionfactory.getCurrentSession());
criteria.add(Restrictions.eq("username", username));
List<User> list = criteria.list();
// getSession().getTransaction().commit();
if (!Utils.isEmptyNull(list)) {
return list.get(0);
} else {
return null;
}
}
public User getUserById(int id) {
// getSession().beginTransaction();
DetachedCriteria c = DetachedCriteria.forClass(User.class);
Criteria criteria = c.getExecutableCriteria(sessionfactory.getCurrentSession());
criteria.add(Restrictions.eq("id", id));
List<User> list = criteria.list();
// getSession().getTransaction().commit();
if (!Utils.isEmptyNull(list)) {
return list.get(0);
} else {
return null;
}
}
public void updateEmailUser(String id, String email){
Query updateQuery = sessionfactory.getCurrentSession().createSQLQuery("update user set email=?"+ "where id=? ");
updateQuery.setString(0, email);
updateQuery.setString(1, id);
int updated = updateQuery.executeUpdate();
}
}
Anexa 4
package ro.practica.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import ro.practica.dao.ClientDao;
import ro.practica.dao.UserDao;
import ro.practica.model.User;
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Autowired
ClientDao autoDao;
@Override
public void addUser(User user) {
userDao.saveUser(user);
}
@Override
public List<User> getUser(String username, String password) {
return userDao.getUser(username,password);
}
@Override
public List<User> getUserList() {
return userDao.getUserList();
}
//@Override
//public User getUserById(int id) {
// return userDao.getUserById(id);
//}
//@Override
//public void updateEmailUser(String id, String email) {
// userDao.updateEmailUser(id, email);
BIBLIOGRAFIE
Bărbulescu A., 2014. Agricover- afaceri de peste 970 milioane lei, [Online], la adresa: http://www.businessmagazin.ro/actualitate/agricover-a-avut-anul-trecut-afaceri-de-970-de-milioane-de-lei-10706359.
Anon., Utilizarea mediului de dezvoltare integrat Eclipse, [Online], la adresa http://www.eed.usv.ro/~alexg/laboratoare/rc2/Utilizare_Eclipse.html.
Anon., The Java EE 6 Tutorial, [Online], la adresa http://docs. oracle.com/javaee/6/tutorial/doc/gircz.html.
Bloch J., 2007. Effective Java , Boston: Addison Wesley.
Dubois P., 1999. MySQL, SUA: New Riders.
Embley D., 1998. Object database development, Boston: Addison Wesley.
Frăsinaru C., 2009. Curs practic de Java, [Online], la adresa: http://web.info.uvt.ro/~iordan/PIII/Cristian_Frasinaru-Curs_practic_de_Java.pdf
Gavrilă G, 2004. Programare în limbajul Java, București: Matrix Rom
Ghilic Micu, B.(coord.), 2012. Managementul sistemelor informaționale, București: ASE.
Grupul Agricover, [Online], disponibil la adresa www. agricover.ro
Hornick M., Marcadé E., Venkayala S., 2007. Java Data Mining. Strategy, Standard, and Practice,[Online],la:http://www.sciencedirect.com/science/article/pii/B9780123704528500335
Institutul de Lingvistică „Iorgu Iordan – Alexandru Rosetti”, 1984. Dicționarul explicativ al limbii române, București: Editura Academiei Române.
Ionescu, S; Lungu I.; Munteanu, M.; Velicanu M., 2003. Sisteme de baze de date, București: Petrion.
Ivan I., Roșca Gh., Capisizu S., 2005. Auditul sistemelor informatice, București: ASE.
Lungu I., Bologă A.R., Diaconiță V., Bâra A., Botha I., 2007. Integrarea sistemelor informatice, București: ASE.
Lungu I., Velicanu M., Muntean M., Iorga M., Ionescu S., 2002. Oracle – platformă pentru baze de date, București: Petrion
Mkyong, 2009. Hibernate tools, [Online], disponibil la adresa: http://www.mkyong.com/hibernate/how-to-install-hibernate-tools-in-eclipse-ide
O Brian L., 1998. Introduction to Information Systems, New York: McGraw-Hill Higher.
Onete B., 2000. Sisteme informatice- Elemente fundamentale, București: ASE.
Oracle România. Tehnologie- Oracle &Java [Online], disponibil la adresa http://www.oracle.com/ro/technologies/java/overview/index.html.
Oracle. JavaServer Pages Overview, [Online], disponibil la http://www.oracle.com/technetwork/java/overview-138580.html, accesat la 10 mai 2014
Orzan Gh., 2001. Sisteme informatice de marketing , București: Uranus
Realitatea.net, 2014. Eximbank finanțează Agricover, [Online], disponibil la adresa http://www.realitatea.net/eximbank-finan-eazaagricover-cu-70-de-milioane-de-lei_1165755.html#ixzz2TaYENAp9.
Roșca I. Gh., Ghilic-Micu B., Cocianu C., Stoica M., Uscatu C., Mircea M., 2007. Programarea calculatoarelor. Algoritmi în programare., București : ASE.
Smeureanu I., Dardala M., 2002. Programarea orientate obiect în limbajul C++, București: Cison.
Stanciu V., 1999. Sisteme informatice de gestiune, București: Tribuna Economică.
Syntx.io, 2014. A client-server application using socket programming in java, [Online], disponibil la adresa http://syntx.io/a-client-server-application-using-socket-programming-in-java/
Surcel T. (coord.), 2001. Bazele informaticii economice, București: Calipso.
The Java EE 6 Tutorial, 2013. Using Bean Validation [Online], disponibil la adresa:http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html.
W3C, 2013. HTML & CSS, [Online], disponibil la adresa: http://www.w3.org/standards/webdesign/htmlcss.
BIBLIOGRAFIE
Bărbulescu A., 2014. Agricover- afaceri de peste 970 milioane lei, [Online], la adresa: http://www.businessmagazin.ro/actualitate/agricover-a-avut-anul-trecut-afaceri-de-970-de-milioane-de-lei-10706359.
Anon., Utilizarea mediului de dezvoltare integrat Eclipse, [Online], la adresa http://www.eed.usv.ro/~alexg/laboratoare/rc2/Utilizare_Eclipse.html.
Anon., The Java EE 6 Tutorial, [Online], la adresa http://docs. oracle.com/javaee/6/tutorial/doc/gircz.html.
Bloch J., 2007. Effective Java , Boston: Addison Wesley.
Dubois P., 1999. MySQL, SUA: New Riders.
Embley D., 1998. Object database development, Boston: Addison Wesley.
Frăsinaru C., 2009. Curs practic de Java, [Online], la adresa: http://web.info.uvt.ro/~iordan/PIII/Cristian_Frasinaru-Curs_practic_de_Java.pdf
Gavrilă G, 2004. Programare în limbajul Java, București: Matrix Rom
Ghilic Micu, B.(coord.), 2012. Managementul sistemelor informaționale, București: ASE.
Grupul Agricover, [Online], disponibil la adresa www. agricover.ro
Hornick M., Marcadé E., Venkayala S., 2007. Java Data Mining. Strategy, Standard, and Practice,[Online],la:http://www.sciencedirect.com/science/article/pii/B9780123704528500335
Institutul de Lingvistică „Iorgu Iordan – Alexandru Rosetti”, 1984. Dicționarul explicativ al limbii române, București: Editura Academiei Române.
Ionescu, S; Lungu I.; Munteanu, M.; Velicanu M., 2003. Sisteme de baze de date, București: Petrion.
Ivan I., Roșca Gh., Capisizu S., 2005. Auditul sistemelor informatice, București: ASE.
Lungu I., Bologă A.R., Diaconiță V., Bâra A., Botha I., 2007. Integrarea sistemelor informatice, București: ASE.
Lungu I., Velicanu M., Muntean M., Iorga M., Ionescu S., 2002. Oracle – platformă pentru baze de date, București: Petrion
Mkyong, 2009. Hibernate tools, [Online], disponibil la adresa: http://www.mkyong.com/hibernate/how-to-install-hibernate-tools-in-eclipse-ide
O Brian L., 1998. Introduction to Information Systems, New York: McGraw-Hill Higher.
Onete B., 2000. Sisteme informatice- Elemente fundamentale, București: ASE.
Oracle România. Tehnologie- Oracle &Java [Online], disponibil la adresa http://www.oracle.com/ro/technologies/java/overview/index.html.
Oracle. JavaServer Pages Overview, [Online], disponibil la http://www.oracle.com/technetwork/java/overview-138580.html, accesat la 10 mai 2014
Orzan Gh., 2001. Sisteme informatice de marketing , București: Uranus
Realitatea.net, 2014. Eximbank finanțează Agricover, [Online], disponibil la adresa http://www.realitatea.net/eximbank-finan-eazaagricover-cu-70-de-milioane-de-lei_1165755.html#ixzz2TaYENAp9.
Roșca I. Gh., Ghilic-Micu B., Cocianu C., Stoica M., Uscatu C., Mircea M., 2007. Programarea calculatoarelor. Algoritmi în programare., București : ASE.
Smeureanu I., Dardala M., 2002. Programarea orientate obiect în limbajul C++, București: Cison.
Stanciu V., 1999. Sisteme informatice de gestiune, București: Tribuna Economică.
Syntx.io, 2014. A client-server application using socket programming in java, [Online], disponibil la adresa http://syntx.io/a-client-server-application-using-socket-programming-in-java/
Surcel T. (coord.), 2001. Bazele informaticii economice, București: Calipso.
The Java EE 6 Tutorial, 2013. Using Bean Validation [Online], disponibil la adresa:http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html.
W3C, 2013. HTML & CSS, [Online], disponibil la adresa: http://www.w3.org/standards/webdesign/htmlcss.
ANEXE
Anexa 1
Figura 1- Împărțirea pe regiuni
Sursa: http://www.agricover.ro/distributie/echipa-de-vanzari.html
Anexa 2
package ro.practica.model;
// Generated Apr 25, 2014 10:32:37 AM by Hibernate Tools 3.4.0.CR1
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
* User generated by hbm2java
*/
@Entity
@Table(name = "user", catalog="a_sav")
public class User implements java.io.Serializable {
private int id;
private Angajat angajat;
private String parola;
private String tip;
private String username;
private String email;
public User() {
}
public User(String parola, String username) {
this.parola = parola;
this.username = username;
}
public User(Angajat angajat, Set<ContractDetail> evenimente, String parola, String tip, String username, String email) {
this.angajat = angajat;
this.parola = parola;
this.tip = tip;
this.username = username;
this.email=email;
}
@Id
@GeneratedValue
@Column(name = "ID", unique = true, nullable = false, length = 20)
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idAngajat")
public Angajat getAngajat() {
return this.angajat;
}
public void setAngajat(Angajat angajat) {
this.angajat = angajat;
}
@Column(name = "parola", unique = true, nullable = false, length = 100)
public String getParola() {
return this.parola;
}
public void setParola(String parola) {
this.parola = parola;
}
@Column(name = "tip")
public String getTip() {
return this.tip;
}
public void setTip(String tip) {
this.tip = tip;
}
@Column(name = "username", unique = true, nullable = false, length = 100)
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Anexa 3
package ro.practica.dao;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import ro.practica.model.User;
import ro.practica.util.Utils;
@Transactional
@Repository("userDao")
public class UserDao extends MainDao{
@Autowired
private SessionFactory sessionfactory;
public void saveUser(User user) {
sessionfactory.getCurrentSession().saveOrUpdate(user);
}
public List<User> getUser(String username, String parola) {
@SuppressWarnings("unchecked")
List<User> userlist = sessionfactory.getCurrentSession()
.createCriteria(User.class).add(Restrictions.eq("username", username))
.add(Restrictions.eq("parola", parola)).list();
if (!Utils.isEmptyNull(userlist)) {
return userlist;
} else {
return null;
}
}
public List<User> getUserList() {
@SuppressWarnings("unchecked")
List<User> userlist = sessionfactory.getCurrentSession()
.createCriteria(User.class).list();
return userlist;
}
public User getUserByUser(String username) {
// getSession().beginTransaction();
DetachedCriteria c = DetachedCriteria.forClass(User.class);
Criteria criteria = c.getExecutableCriteria(sessionfactory.getCurrentSession());
criteria.add(Restrictions.eq("username", username));
List<User> list = criteria.list();
// getSession().getTransaction().commit();
if (!Utils.isEmptyNull(list)) {
return list.get(0);
} else {
return null;
}
}
public User getUserById(int id) {
// getSession().beginTransaction();
DetachedCriteria c = DetachedCriteria.forClass(User.class);
Criteria criteria = c.getExecutableCriteria(sessionfactory.getCurrentSession());
criteria.add(Restrictions.eq("id", id));
List<User> list = criteria.list();
// getSession().getTransaction().commit();
if (!Utils.isEmptyNull(list)) {
return list.get(0);
} else {
return null;
}
}
public void updateEmailUser(String id, String email){
Query updateQuery = sessionfactory.getCurrentSession().createSQLQuery("update user set email=?"+ "where id=? ");
updateQuery.setString(0, email);
updateQuery.setString(1, id);
int updated = updateQuery.executeUpdate();
}
}
Anexa 4
package ro.practica.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import ro.practica.dao.ClientDao;
import ro.practica.dao.UserDao;
import ro.practica.model.User;
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Autowired
ClientDao autoDao;
@Override
public void addUser(User user) {
userDao.saveUser(user);
}
@Override
public List<User> getUser(String username, String password) {
return userDao.getUser(username,password);
}
@Override
public List<User> getUserList() {
return userDao.getUserList();
}
//@Override
//public User getUserById(int id) {
// return userDao.getUserById(id);
//}
//@Override
//public void updateEmailUser(String id, String email) {
// userDao.updateEmailUser(id, email);
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: Sistem Informatic Privind Activitatea Grupului Agricover (ID: 150520)
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.
