1. RAPID APPLICATION DEVELOPMENT- SPRING ROO
ALINA-ELENA MIHĂILĂ, GEORGE ALEXANDRU VLAD
Universitatea “Al.I.Cuza” , Facultatea de Informatică, Iasi – Romania
{ elena.mihaila, george.vlad }@info.uaic.ro
Abstract. Lucrarea de faţă îşi propune să prezente importanţa RAD- urilor(Rapid Application
Development), modul de funcţionare şi ierarhizarea acestora.
Dorinţa de a creea aplicaţii mari, stabile şi care să permită modificarea aplicaţiei în funcţie de
ultimele cerinţe, într-un timp foarte scurt, a dus la dezvoltarea metodologiilor software numite
RAD-uri.
În această lucrare vor fi prezentate conceptele de bază ale Spring ROO, precum şi o serie de
avantaje şi dezavantaje în comparaţie cu alte RAD- uri.
Cuvinte cheie. RAD; Convention- Over- Configuration; Spring; JSP; Maven; Java EE; Server; JSON;
Web Services; JPA; AspectJ; AOP; MVC
1. INTRODUCERE
Dorinţa utilizatorilor de a avea un produs final în cel mai scurt timp şi nevoia de a avea
posibilitatea modificării lui chiar înainte de a fi utilizat a dus la apariţia RAD- ului.
Instrumentele de dezvoltare rapidă a aplicaţiilor au reprezentat soluţia propusă de industria
software pentru ieşirea dintr-o criză, provocată de creşterea exponenţială a complexităţii
aplicaţiilor moderne.
2. SPRING ROO
Scopul cel mai important al acestui RAD este acela de a fundamenta şi îmbunătăţi
productivitatea dezvoltării aplicaţiilor Java fără a compromite integritatea şi flexibilitatea
tehnologiei.
Folosind o simplă linie de comandă, ROO poate crea şi gestiona aplicaţii bazate pe Spring
(un framework Java), adăuga şi configura caracteristici precum JPA, Spring MVC, Web
Flow, JMS, Email şi Spring Security. Roo poate fi folosit, de asemenea şi în testare
folosind framework- uri precum JUnit şi Selenium.
În concluzie ROO gestionareză toate configuraţiile folosind principii arhitecturale
software foarte bine optimizate, reducând astfel cantitatea de cod scrisă de programator.
1
2. RAD- ul este cunoscut pentru 4 mari caracteristici:
2.1 Higher Productivity
Cel mai mare avantaj este acela de a avea posibilitatea dezvoltării aplicaţiilor complexe
în câteva minute. Originalitatea creerii proiectelor face ca mentanenţa lor să fie foarte
uşoară de-a lungul anilor, chiar dacă se renunţă la folosirea RAD- ului.
ROO implementează şi utilizeză design patterns într-o maniera convention- over-
configuration, lucru ce asigură coerenţă în implementarea proiectelor bazate pe ROO.
2.2 Stock- Standard Java
Pentru un programator J2EE, utilizarea acestui RAD va fi foarte familiară deoarece
tehnologiile folosite sunt cele standard: Spring, Maven, JSP, JPA şi AspectJ. Aceste
tehnologii sunt implementate folosind add-ons, aşadar se pot utiliza cu uşurinţă şi alte
tehnologii.
ROO a adoptat o tehnică conservatoare în ceea ce priveşte adăugarea de tehnologii,
aşadar, de exemplu, JPA va fi instalat doar în momentul în care va fi cerută persistenţa.
2.3 Usable and Learnable
Utilizarea este caracterizată de linia de comandă prin intermediul careia ROO este foarte
simplu de folosit cu ajutorul comenzilor “hint” şi “help” care te ghidează pas cu pas; de
asemenea este pus la dispoziţie o caracteristică de autocomplete, dar şi câteva exemple de
scripturi.
Învătarea este pusă în evidenţă, în primul rând prin utilizarea de tehnologii cunoscute, iar
în al doilea rând uşurinţa cu care poate fi folosit; cu cât rulează automat în background,
cu atât va trebui să înveţi mai puţine lucruri despre el.
2.4 Easy ROO Removal
În general, una dintre cele mai mari probleme care apar atunci când sunt folosite astfel de
tool- uri este atunci când din diferite motive (s-au schimbat cerinţele proiectului, RAD-ul
are prea multe bug- uri, etc.) vreţi să renunţaţi la el. Acest lucru a fost luat în vedere de
ROO, acesta fiind foarte simplu de eliminate din aplicaţie, printr-o simplă comanda
“push in refactor” în Eclipse urmată de o simpla comanda “find and replace”.
2
3. 3. SERVICII WEB
3.1 TwitterAPI
Twitter API este bazat în întregime pe protocolul HTTP. Metodele de preluare a datelor
din Twitter API necesită o cerere de tip GET, iar metodele care fac introducere, modificare
sau distrugere de date necesită cereri de tip POST. Sunt permise de asemenea cereri de tip
DELETE, atunci când dorim să distrugem anumite informații.
Twitter API permite modificarea formatului extensiei cererii pentru a obţine rezultatele
într-un alt format dorit de acesta. Din formatele suportate în prezent de acest API (XML,
JSON şi RSS sau Atom) aplicația construită de noi a folosit formatul XML.
Din funcțiile existente în acest API am folosit în primul rând funcțiile de căutare care ne
permit să extragem informațiile dorite din postările utilizatorilor.
3.2 Google Ajax Search API
Google Ajax Search API propune o interfaţă REST la îndemâna utilizatorilor care vor să
acceseze acest serviciu dintr-un alt limbaj decât JavaScript. Modul de comunicare este
bazat pe mesaje HTTP, formatul în care răspunsul este dat fiind JSON. Aplicaţiile care
utilizează această interfaţă trebuie să respecte toţi termenii de utilizare existenţi.
Aplicaţiile care utilizează acest API trebuie să includă întotdeauna un HTTP Referer
Header valid. Prin utilizarea unei chei, aplicaţia oferă un mecanism de identificare
secundar care este util pentru a lua legătura cu utilizatorul în scopul de a corecta orice
problemă.
3.3 Flickr API
Deşi existau foarte multe site-uri pe care utilizatorii puteau pune poze, atunci când Flickr
s-a lansat, acesta a atras atenţia prin flexibilitatea API-ului pus la dispoziţie
dezvoltatorilor. Aceştia l-au putut integra cu uşurinţă în aplicaţia lor pentru a avea acces la
pozele de pe Flickr, iar limitările API-ului au fost mai puţine faţă de API-urile altor site-uri
de acelaşi profil.
Cel mai bun lucrul al API-ului de la Flickr este faptul că oferă librării aproape pentru toate
limbajele de programare (în cazul unora chiar mai multe librării). Avantajul este faptul că
dezvoltatorul nu trebuie decât să caute o librărie pentru limbajul preferat de acesta.
În cele ce urmează va fi prezent un exemplu de utilizare a Flickr API în Java.
Din adresa la care se face conexiunea: http://api.flickr.com/services/rest/?method
=flickr.photos.search&api_key=e3471e67d4ac10c64055420d9b211b4f&per_page=1&
text=Bangalore sunt de observat următoarele lucruri:
modul de comunicare cu API-ul de la Flickr şi anume REST
metoda API-ului care este chemată flickr.photos.search.
3
4. api_key=e3471e67d4ac10c64055420d9b211b4f -> cheia necesară pentru conexiunea
la API-ul de la Flickr. Pentru a obţine o cheie proprie dezvoltatorul trebuie să îşi creeze
cont pe Flickr şi să îşi genereze o cheie
per_page=1 -> Aici este specificat numărul de poze care va fi generat ca rezultat
text=Bangalore -> Interogarea propriu-zisă
4. STUDIU DE CAZ
În acest capitol am realizat un studiu de caz, pentru a exemplifica modul de funcționare al
RAD-ului Spring ROO. Aplicaţia creată este una de tip mash-up, aceasta culegând
informaţii de la 3 webservice-uri: Twitter API, Flickr API şi Google search API.
Rezultatul în urma apelarii web-service-urilor va fi expus, ȋn cele din urmă, ȋntr-un web-
service propriu ȋn format JSON, creat cu ajutorul RAD-ului. Ȋn acelaşi timp aplicaţia
salvează fiecare apel către WebService-urile menţionate anterior, conţinând, de asemenea,
şi un modul care ajută la testarea WebService-ului creat.
Pentru o utilizare mai uşoară a ROO-ului a fost utilizat un IDE numit SpringSource Tool
Suite. Atunci când IDE-ul este instalat acesta işi configurează de asemenea un Maven şi
un server local, Apache Tomcat, deja configurat, pregatit pentru a fi folosit de aplicaţiile
nou-create.
În cele ce urmează vor fi prezentaţi paşii necesari pentru crearea unei aplicatii web
folosind Spring Roo:
Pentru a crea un proiect nou, se alege tipul: Spring Roo Project, după cum se
poate observa în Fig. 1
Fig.1. Crearea unui nou proiect Spring ROO şi perspectiva Roo Shell
4
5. Urmatorul pas după crearea proiectului este accesarea pespectivei “Roo Shell”
marcată cu chenar albastru, în Fig.1, pentru a avea acces la linia de comanda a
RAD- ului. Pentru a primi unele sugestii cu privire la următorii paşi ce trebuie
făcuţi se tastează comanda “hint” sau “help”.
Legatura cu JPA (Hibernate) se realizează cu ajutorul comenzii: “persistance
setup” urmată de parametrii necesari conectării (e.g. persistence setup --database
ORACLE --provider HIBERNATE --hostname localhost --databaseName XE --userName alina --
password alina); această comandă crează toate fişierele de configurare necesare
pentru conectarea la baza de date;
Entităţile din baza de date se crează prin intermediul comenzii “entity - - class
classname” (e.g. entity --class ~.domain.Mashup ). Clasa definită anterior poate fi
folosită şi pentru schimbul de date ȋn format JSON prin comanda “json
classname”.
Field- urile se pot adauga cu ajutorul comenzii “field” urmata de constrangerile
necesare (e.g. field string --fieldName name --notNull --unique true).
Pentru a reliza unor controller JSON şi pentru accesul la entităţile din baza de date
se utilizeză comanda “controller”, prin intermediul căreia vor fi create fişierele
AspectJ ce vor crea “handlere” pentru diferite acţiuni ce pot fi apelate la urma lor,
dar şi pagini pentru editarea entităţii create anterior.
Comanda “perform eclipse” va elimina toate referintele ROO din cadrul
proiectului şi îl va converti la un proiect Eclipse. De aici utilizatorul poate
continua dezvoltarea ȋn modul dorit.
Dupa crearea structurii aplicatiei,prezentată în Fig.2, au fost încapsulate webservice-urile
de la Flickr, Twitter şi Google. Pe baza unui cuvânt introdus aceste servicii sunt chemate,
iar raspunsul, în format JSON, este expus printr-un serviciu web creat de ROO.
5
6. Fig.2. Structura generală a aplicației, create de Spring ROO
5. Alternative la Spring ROO
In cele ce urmează vor fi prezentate pe scurt doua dintre alternativele la Spring ROO,
acestea in principiu aceleasi concepte de baza, dar unul din principalele motive pentru
care a fost ales Spring ROO fiind faptul ca sunt necesare doar cunostiinte ale limbajului
Java pentru ca proiectul sa poata fi extins.
5.1 Ruby on Rails
La fel ca multe alte platforme de dezvoltare web, Rails foloseşte arhitectura Model-View-
Controller (MVC) în organizarea programarii aplicației.
Ruby on Rails include unelte care simlifică procedurile de dezvoltare, cum ar fi "scheletarea"
care poate construi automat undele din modelele și vizualizările necesare pentru a construi o
pagină web simplă. Ele includ, de asemenea, WEBrick, un server web și Rake, un sistem
pentru construire și desfășurare. Împreună, aceste unelte creeaza un mediu simplu de
dezvoltare.
6
7. RAD-ul se bazează pe un server web pentru a rula. Mongrel a fost soluția preferată față de
WEBrick în momentul în care sistemul a fost creat, însă poare fi rulat și de către Lighthttpd,
Abyss, Apache (fie ca modula - Passenger de exemplu - sau prin metoda CGI, FastCGI sau
mod_ruby), și multe altele. Începând cu 2008, serverul web Passenger a înlocuit Mongrel ca
și cel mai folosit server web. În perioada recentă, serverul web Unicorn a devenit favorit în
desfășurările noi. Rails este de asemenea cunoscut pentru folosirea extesivă a librăriilor de
JavaScript Protoype și Script.aculo.us pentru AJAX.
Rails de asemenea a folosit inițial "lightweight SOAP" pentru serviciile web, acesta fiind
înlocuit ulterior de serviciile web RESTful.
5.2 Grails
Grails reprezinta o platforma de dezvoltare a aplicaţiilor web, ȋn timp ce Groovy este
limbajul de la baza.
Grails este un framework open-source pentru aplicaţii web, ce ȋmbină practici utile, care
permit sporesc agilitatea dezvoltării, cu tehnologii Java, care au dovedit ȋn timp
consistenţă.
Grails oferă:
o arhitectura MVC
un mecanism puternic de asigurare a persistenţei (exemplu: baze de date)
o modalitate de generare a paginilor dinamice, bazată pe tehnologia Java Server Pages
(JSP)
o abordare convention- over- configuration, ȋn sensul că dezvoltatorul are la dispoziţie
un arsenal de opţiuni implicite, pe care le poate particulariza la nevoie, fără a fi nevoit
să le definească ȋn totalitate de la inceput
mecanisme de unit testing
un server Tomcat integrat, ce permite rularea imediată a aplicaţiei construite
un sistem propriu de gestiune a bazelor de date, Hyper Structured Query Language
Database (HSQLDB), ce poate fi ȋnlocuit cu altele, precum MySQL
limbajul Groovy
posibilitatea integrării de numeroase plugin-uri.
Astfel, Grails nu se limitează la a propune un tipar arhitectural, ci reprezintă o platformă
propriu-zisa de dezvoltare.
7
8. Concluzii
Această lucrare prezintă soluţii pentru crearea ȋntr-un timp cât mai scurt a unei aplicaţii
web.
RAD-ul Spring Roo a fost construit peste o serie de tehnologii cheie: Spring, AOP,
Maven. Este recomandat pentru crearea unor aplicaţii care se bazează pe entităţi
persistente şi aplicaţii web care să se folosească de aceste entităţi.
8
9. Bibliografie
1. J2EE, java.sun.com/j2ee
2. Twitter API, http://apiwiki.twitter.com/
3. Flickr API, http://www.webmonkey.com/2010/02/get_started_with_the_flickr_api/
4. Google Ajax Search API , http://code.google.com/apis/ajaxsearch/documentation/
5. Spring ROO, http://www.infoq.com/presentations/Introducing-Spring-Roo
6. Spring ROO, Spring ROO in Action
7. Spring ROO, http://static.springsource.org/spring-roo/reference/html/index.html
8. Grails, http://grails.org/Documentation
9. Ruby on Rails, http://rubyonrails.org/documentation
9