luni, 22 decembrie 2008

Aplicatii web in Java (2) - Spring Framework

Revenim cu episodul 2 al serialului "Java demistificat":

De aceasta data, ne vom concentra asupra framework-ului Spring. Relatia sa cu componentele unei aplicatii J2EE este asemanatoare cu cea dintre placa de baza si componentele de pe ea. El ne ofera platforma pentru a dezvolta corect si repede servicii care sa reprezinte functionalitatea aplicatiei noastre. Principalele sale functionalitati sunt:
  • container-ul cu Inversion of Control: container in care se inregistreaza obiecte Java, care implementeaza o interfata, sub un nume unic dupa care vor putea fi regasite ulterior. Container-ul suporta si operatia de regasire a unui obiect, intorcandu-ne un obiect care se comporta identic cu obiectul inregistrat (apelurile de metode din interfata au aceleasi efecte vizibile de catre utilizator). Rezultatul este diferit de obiectul initial in cazul in care se doreste interceptarea metodelor acestuia, cu diverse scopuri (AOP fiind unul dintre ele). Care este totusi avantajul fata de un container obisnuit, sau de un simplu HashMap? Dependentele intre obiecte se specifica declarativ in fisiere de configurare, programatorul nu trebuie sa se concentreze sa propage o referinta la un obiect O1 catre obiectul O2, container-ul facand acest lucru automat.
  • framework AOP: framework care permite interceptarea apelurilor de metode catre obiectele inregistrate in container si aplicarea unor "advice-uri" inainte sau dupa apelul metodei. Un advice poate fi o simpla log-are, sau poate chiar decide ca apelul de metoda sa nu aiba loc. Numele metodelor interceptate pot fi specificate folosind expresii regulate, astfel incat denumirea consistenta a metodelor le asigura 'on the fly' proprietati interesante. Principala utilizare a AOP-ului consta in executia unei metode care citeste/scrie in baza de date in cadrul unei tranzactii, fara a specifica acest lucru programatic. Aceasta duce si la evitarea tranzactiilor nested, o evidenta si periculoasa bataie de cap.
  • framework MVC: desi suporta plugin-uri care fac acelasi lucru (cel mai cunoscut fiind Struts), Spring ne ofera o implementare home-made de MVC. Principiul de functionare al MVC-ului este urmatorul: input-ul unei aplicatii uzuale J2EE este un request HTTP, care este preluat de catre un controller principal al aplicatiei (provided by Spring), care-l ruteaza catre un controller specializat (implementat de programator). Controller-ul specializat construieste un model (o structura de date), posibil prin consultarea starii aplicatiei (deci baza de date) si o intoarce catre controller-ul principal, acesta delegand afisarea modelului catre una din tehnologiile disponibile, in functie de context. O metoda cunoscuta de noi si studiata la L.P.D. este JSP, dar nu este singura. Pentru o mai buna intelegere, recomand vizualizarea pozei de la urmatorul link: http://static.springframework.org/spring/docs/2.5.x/reference/images/mvc.png
  • framework de acces la baza de date: desi de multe ori este mai simplu sa folosim JDBC, care ne permite sa trimitem direct query-uri SQL scrise de noi catre baza de date si sa examinam rezultatele, acesta are o sumedenie de dezavantaje. In primul rand, eficienta cade cu totul in sarcina programatorului, ceea ce creste costurile de dezvoltare a produsului (fiind nevoie de programatori mai capabili). In al doilea rand, se scrie foarte mult cod de rutina pentru a traduce rezultatul query-urilor, prezentat sub forma tabelara in forma orientat-obiect. Ambele probleme sunt rezolvate de un framework de persistenta. Rolul acestuia este urmatorul: ii dam informatii despre structura bazei de date si sfaturi despre cum sa optimizeze accesul la ea, declarativ, si el preia ambele responsabilitati mentionate mai sus: genereaza query-uri SQL pentru a prelua rezultatele de care avem nevoie (sau pentru a le inregistra, dupa caz), si transforma aceste rezultate tabelare in obiecte gata de folosit mai departe.
Desi Spring contine mult mai multe componente, acestea mi s-au parut mie mai folositoare in practica. In prezent a ajuns la versiunea 3.0 si mai multe detalii pot fi regasite la: http://www.springsource.org/

Niciun comentariu:

Trimiteți un comentariu