際際滷

際際滷Share a Scribd company logo
Dezvoltarea aplicatiilor Web folosind Java studiu de caz www.javaromania.com
Prezentare  Cristian Olaru  8 ani de programare in Java si tehnologii aferente Lucrez pentru IBM dar aceasta prezentare nu are legatura cu actualul loc de munca - mai mult cu timpul meu liber! Blog: http://olaru.blogspot.com  Carti:  Java de la 0 la expert  si  Dezvoltarea aplicatiilor Web folosind Java , coautor in editura Polirom
www.javaromania.com
Prezentarea aplicatiei ( javaromania.com ) domeniul aplicatiei: motor de stiri (stiri din domeniul Java raportate la Romania) entitatea de baza: articol entitati auxiliare: comentariu, utilizator, tag, categorie, media, rating   functionalitati de baza:  adaugare/stergere articole, comentarii  autentificare si autorizari pe roluri  gestiune articole, comentarii, utilizatori  cautare in articole  sistem de votare pentru articole si nor de taguri  obiecte multimedia embedabile in articole  internationalizare
Tehnologii de baza folosite Biblioteci (librarii) si framework-uri Java: Spring (container usor), Struts 2 (prezentare), Hibernate (persistenta), Compass (search), Sitemesh (templating), Acegi (securitate), Rome (RSS), JCaptcha (CAPTCHA), DWR (AJAX)...  Unelte de dezvoltare: Maven 2 (build), Eclipse (IDE + plugins: Hibernate Extensions, Spring IDE), Mysql (baze de date), Jetty (dezvoltare), Tomcat (productie), GIMP (editare imagini), Firebug (Web dev), Navicat (client baze de date)...
Alte tehnologii folosite Java TM  Platform, Standard Edition 6 Librarii de tag-uri: Dispalytag, JSTL Lucene este folosit implicit de Compass SEO folosind libraria UrlRewriteFilter ClickStreams pentru informatii despre utilizatorii aplicatiei Log4J - pentru logging XFire - Web services  Integrari: Google WebMaster/AddSense/AddWords/Analytics, MailChimp, Nabble Forums (embedded)   JAVA SCRIPT :  JQuery
Nabble forum (exemplu integrare)
Librarii, framework-uri si containere Librariile (biblioteci) reprezinta unitati binare reutilizabile in runtime care ofera un set de functionalitati standard avand in general un scop bine definit. (Java SDK = toolkit, log4j)  Prin framework intelegem ceva mai mult decat o librarie in care aplicatia doar face apeluri. Diferenta ar fi faptul ca un framework prea controlul aplicatiei pe care o implementam conform principiului  inversarii controlului . (Struts, Spring) Containererele ofera un mediu  runtime  pentru componente. Componentele se bucura de mediul oferit de container (life cycle) dar trebuie sa respecte contractul pe care containerul il ofera. (EJB, Spring, JSF, Serlets)
Criterii in alegerea unei librarii Cateva criterii in alegerea unei librarii:  Comunitatea de dezvoltatori si evolutia release-urilor - ofera un indiciu asupra starii librariei respective Documentarea produsului - poate fi o cauza a cresterii curbei invatarii  Activitatea de pe forum-uri, liste de discutii, issue trackere  Licenta librariei respective - licenta te poate obliga sa publici codul dependent de libraria respectiva  Daca exista o firma sau organizatie care sa sprijine libraria respectiva (JBoss, Spring Source, Apache)
Arhitectura aplicatiei Impartirea pe layere  o buna mentenanta a aplicatiei in timp [Prezentare - Servicii - Persistenta]  Apelurile intre layere se fac intr-un singur sens dispre prezentare spre baza de date astfel:  Prezentare -> Servicii -> Persistenta  Prezentare => Struts Actions  Servicii => Spring Singletons  DAO  Data Acces Objects => Spring Singletons  incapsuleaza codul de acces spre baza de date  in acest caz HQL  Obiectele din domeniul aplicatiei (model) sunt folosite si ca DTO-uri si ca entitati (pentru simplificarea aplicatiei)
Diagrama - arhitectura aplicatiei
Conventii de nume Impartirea pe layere este respectata de conventia de nume data pachetelor si claselor  Distinctie clara intre clasele din domeniul aplicatiei (business) si cele tehnice (tehnologie) Exemlpu:  Model: com.ip.mengine.model.Article  DAO: com.ip.mengine.dao.ArticleDao  Service: com.ip.mengine.service.ArticleManager  Action: com.ip.mengine.webapp.action.ArticleAction
Mod de lucru experienta cu toate tehnologiile implicate template gasit pe Web => prototip schema de baze de date - consolidarea ei cat mai devreme constituirea domeniului aplicatiei - generare entitati (Hibernate Ext.) generarea maparilor Hibernate (Hibernate Ext.) implementarea claselor DAO implemenatrea serviciilor implementarea Action-urilor de Struts scrierea de JSP-uri
Spring Framework  Dependency injection container (DI)  este in esenta inima aplicatiei (a nu se confunda cu Spring MVC) Ridica in runtime un graf de obiecte POJO gata injectate (singletons) din configurari - serviciile, obiectele DAO Ridica in runtime si celelalte framework-uri si librarii  Hibernate, Compass, etc Containerul este startat odata cu pornirea aplicatiei Web  un listener in web.xml Este utila folosirea de mai multe fisiere de configurare pe diverse teme: services, DOA, resurse, capcha, etc
Struts 2 Framework Web bazat pe request/response MVC Model 2  Java Beans/JSP/Servlets Fisier de configurare  mapari catre action-uri care trebuiesc suprascrise Validari Librarii de tag-uri (se poate folosi JSTL) Fata de Struts 1 este orientat spre POJO/fara a mai fi nevoie de ActionForms (fuziune cu WebWork)
Hibernate DE fapt JPA (Java Persistence API)  peste Hibernate (noile Entity Beans) ORM  Object Relational Mapping  in fapt se persista obiecte  SQL-urile sunt generate in spate (transparent) pentru fiecare SGBD Maparii facute cu adnotari  generate cu Hibernate Extensions (@Entity, @Table, @Column, @Transient) Configurare facuta cu Spring In DAO se ascunde toata partea de access pre baza de date (HQL sau Criteria objects)
Compass Compass - Java Search Engine Framework Foloseste Lucene is spate drept motor de search (search engine); mod de lucru: indexare, cautare in index Compass ofera indexare on the fly pentru obiectele persistente  integrare cu Hibernate in acest sens Obiectele indexabile sunt marcate prin configurari (am preferat fisiere de configurare XML) Concurent: Hibernate Search Usor de integrat in aplicatie  o chestiune de configurari
TODO Noutati:  Configuration - Apache Commons Configurations  Optimizare: Caching - OSCache; Stress test - JMeter; profiling DMS: document management system cu Apache Jackrabbit Inbunatatiri:  Logging - o mai buna utilizare a Log4j JUnit - acoperire maxima cu teste XFire - crearea unui API Web consistent Maven - generare info center site Documentarea aplicatiei - JavaDoc + documentare functionalitati
Planuri de viitor Multimedia Engine?  Un prim plan este conturarea clara a un motor de stiri destinat firmelor mici si mijlocii care doresc sa expuna continut multimedia pe internet (ziare, magazine, blog-uri) www.multimediaengine.eu Open Source? O posibilitate ar fi deschiderea engine-ului spre  open source  pentru a putea accelera dezvoltarea. Un set de functionalitati si suportul vor fi disponibile contra cost intr-o versiune enterprise. [email_address]

More Related Content

Dezvoltarea Aplicatiilor Web

  • 1. Dezvoltarea aplicatiilor Web folosind Java studiu de caz www.javaromania.com
  • 2. Prezentare Cristian Olaru 8 ani de programare in Java si tehnologii aferente Lucrez pentru IBM dar aceasta prezentare nu are legatura cu actualul loc de munca - mai mult cu timpul meu liber! Blog: http://olaru.blogspot.com Carti: Java de la 0 la expert si Dezvoltarea aplicatiilor Web folosind Java , coautor in editura Polirom
  • 4. Prezentarea aplicatiei ( javaromania.com ) domeniul aplicatiei: motor de stiri (stiri din domeniul Java raportate la Romania) entitatea de baza: articol entitati auxiliare: comentariu, utilizator, tag, categorie, media, rating functionalitati de baza: adaugare/stergere articole, comentarii autentificare si autorizari pe roluri gestiune articole, comentarii, utilizatori cautare in articole sistem de votare pentru articole si nor de taguri obiecte multimedia embedabile in articole internationalizare
  • 5. Tehnologii de baza folosite Biblioteci (librarii) si framework-uri Java: Spring (container usor), Struts 2 (prezentare), Hibernate (persistenta), Compass (search), Sitemesh (templating), Acegi (securitate), Rome (RSS), JCaptcha (CAPTCHA), DWR (AJAX)... Unelte de dezvoltare: Maven 2 (build), Eclipse (IDE + plugins: Hibernate Extensions, Spring IDE), Mysql (baze de date), Jetty (dezvoltare), Tomcat (productie), GIMP (editare imagini), Firebug (Web dev), Navicat (client baze de date)...
  • 6. Alte tehnologii folosite Java TM Platform, Standard Edition 6 Librarii de tag-uri: Dispalytag, JSTL Lucene este folosit implicit de Compass SEO folosind libraria UrlRewriteFilter ClickStreams pentru informatii despre utilizatorii aplicatiei Log4J - pentru logging XFire - Web services Integrari: Google WebMaster/AddSense/AddWords/Analytics, MailChimp, Nabble Forums (embedded) JAVA SCRIPT : JQuery
  • 8. Librarii, framework-uri si containere Librariile (biblioteci) reprezinta unitati binare reutilizabile in runtime care ofera un set de functionalitati standard avand in general un scop bine definit. (Java SDK = toolkit, log4j) Prin framework intelegem ceva mai mult decat o librarie in care aplicatia doar face apeluri. Diferenta ar fi faptul ca un framework prea controlul aplicatiei pe care o implementam conform principiului inversarii controlului . (Struts, Spring) Containererele ofera un mediu runtime pentru componente. Componentele se bucura de mediul oferit de container (life cycle) dar trebuie sa respecte contractul pe care containerul il ofera. (EJB, Spring, JSF, Serlets)
  • 9. Criterii in alegerea unei librarii Cateva criterii in alegerea unei librarii: Comunitatea de dezvoltatori si evolutia release-urilor - ofera un indiciu asupra starii librariei respective Documentarea produsului - poate fi o cauza a cresterii curbei invatarii Activitatea de pe forum-uri, liste de discutii, issue trackere Licenta librariei respective - licenta te poate obliga sa publici codul dependent de libraria respectiva Daca exista o firma sau organizatie care sa sprijine libraria respectiva (JBoss, Spring Source, Apache)
  • 10. Arhitectura aplicatiei Impartirea pe layere o buna mentenanta a aplicatiei in timp [Prezentare - Servicii - Persistenta] Apelurile intre layere se fac intr-un singur sens dispre prezentare spre baza de date astfel: Prezentare -> Servicii -> Persistenta Prezentare => Struts Actions Servicii => Spring Singletons DAO Data Acces Objects => Spring Singletons incapsuleaza codul de acces spre baza de date in acest caz HQL Obiectele din domeniul aplicatiei (model) sunt folosite si ca DTO-uri si ca entitati (pentru simplificarea aplicatiei)
  • 12. Conventii de nume Impartirea pe layere este respectata de conventia de nume data pachetelor si claselor Distinctie clara intre clasele din domeniul aplicatiei (business) si cele tehnice (tehnologie) Exemlpu: Model: com.ip.mengine.model.Article DAO: com.ip.mengine.dao.ArticleDao Service: com.ip.mengine.service.ArticleManager Action: com.ip.mengine.webapp.action.ArticleAction
  • 13. Mod de lucru experienta cu toate tehnologiile implicate template gasit pe Web => prototip schema de baze de date - consolidarea ei cat mai devreme constituirea domeniului aplicatiei - generare entitati (Hibernate Ext.) generarea maparilor Hibernate (Hibernate Ext.) implementarea claselor DAO implemenatrea serviciilor implementarea Action-urilor de Struts scrierea de JSP-uri
  • 14. Spring Framework Dependency injection container (DI) este in esenta inima aplicatiei (a nu se confunda cu Spring MVC) Ridica in runtime un graf de obiecte POJO gata injectate (singletons) din configurari - serviciile, obiectele DAO Ridica in runtime si celelalte framework-uri si librarii Hibernate, Compass, etc Containerul este startat odata cu pornirea aplicatiei Web un listener in web.xml Este utila folosirea de mai multe fisiere de configurare pe diverse teme: services, DOA, resurse, capcha, etc
  • 15. Struts 2 Framework Web bazat pe request/response MVC Model 2 Java Beans/JSP/Servlets Fisier de configurare mapari catre action-uri care trebuiesc suprascrise Validari Librarii de tag-uri (se poate folosi JSTL) Fata de Struts 1 este orientat spre POJO/fara a mai fi nevoie de ActionForms (fuziune cu WebWork)
  • 16. Hibernate DE fapt JPA (Java Persistence API) peste Hibernate (noile Entity Beans) ORM Object Relational Mapping in fapt se persista obiecte SQL-urile sunt generate in spate (transparent) pentru fiecare SGBD Maparii facute cu adnotari generate cu Hibernate Extensions (@Entity, @Table, @Column, @Transient) Configurare facuta cu Spring In DAO se ascunde toata partea de access pre baza de date (HQL sau Criteria objects)
  • 17. Compass Compass - Java Search Engine Framework Foloseste Lucene is spate drept motor de search (search engine); mod de lucru: indexare, cautare in index Compass ofera indexare on the fly pentru obiectele persistente integrare cu Hibernate in acest sens Obiectele indexabile sunt marcate prin configurari (am preferat fisiere de configurare XML) Concurent: Hibernate Search Usor de integrat in aplicatie o chestiune de configurari
  • 18. TODO Noutati: Configuration - Apache Commons Configurations Optimizare: Caching - OSCache; Stress test - JMeter; profiling DMS: document management system cu Apache Jackrabbit Inbunatatiri: Logging - o mai buna utilizare a Log4j JUnit - acoperire maxima cu teste XFire - crearea unui API Web consistent Maven - generare info center site Documentarea aplicatiei - JavaDoc + documentare functionalitati
  • 19. Planuri de viitor Multimedia Engine? Un prim plan este conturarea clara a un motor de stiri destinat firmelor mici si mijlocii care doresc sa expuna continut multimedia pe internet (ziare, magazine, blog-uri) www.multimediaengine.eu Open Source? O posibilitate ar fi deschiderea engine-ului spre open source pentru a putea accelera dezvoltarea. Un set de functionalitati si suportul vor fi disponibile contra cost intr-o versiune enterprise. [email_address]

Editor's Notes

  • #2: O incercare de prezentare cat mai interactiva a dezvoltarii aplicatiilor Web avand drept studiu de caz www.javaromania.com 30 de minute prezentarea + 15 minute o sesiune de intrebari si raspunsuri - cea mai buna intrebare va fi premiata cu o carte. Nivelul celor care participa: cunoscatori ai fundamentelor limbajului Java. Intrebare - cati au dezvoltat o aplicatie web folosind java de la inceput pana la sfarsit?
  • #3: Prezentare: Olaru Cristian Lucrez pentru IBM dar aceasta prezentare nu are legatura cu actualul loc de munca - mai mult cu timpul meu liber. Blog: http://olaru.blogspot.com Carti: Java de la 0 la expert si Dezvoltarea aplicatiilor Web folosind Java, coautor in editura Polirom Site: www.javaromania.com
  • #5: Scopul de baza al aplicatiei - motor de stiri - proiectat din start cat mai generic cu putinta Functionalitati de baza: impartirea pe tipuri de articole cu posibilitatea de a vizualiza doar articolele care apartin unui anumit tip; tipurile au asociate un icon specific cautare in articolele expuse si afisarea rezultatelor sub forma tabelare usor de vizualizat logare in aplicatie cu 2 roluri - administrator si editor - fiecare rol aduce optiuni diferite in meniul lateral (vizitatorul este considerat utilizator anonim) nor de taguri; utilizatorii pot introduce tag-uri aferente articolelor lor care sunt prezentate intr-un nor de taguri articolele mai vechi pot fi regasite in arhive lunare ultimile comentarii sunt disponibile in meniul lateral ......
  • #10: Criterii in alegerea unei librarii In general trebuie sa fim foarte atenti in alegerea librariilor si tehnologiilor pe care le vom folosi, deoarece o alegerea lor are o mare influenta in succesul sau esecul proiectului pe care il dezvoltam. Comunitatea de dezvoltatori - ofera un indiciu asupra starii librariei respective; se poate verifica timpul de raspuns la expunerea unei probleme - raspunsul poate fi in ordin de ore, zile, saptamani Evolutia release-urilor - reprezinta primul lucru la care trebuie sa ne uitam in alegerea unei librarii; unele librarii se releaseaza foarte rar ceea ce poate insemna doua lucruri - ori libraria nu reprezinta interes ori a ajuns intr-o stare de maturitate (deci trebuie urmarita evolutia librariei pana in momentul curent) Documentarea produsului - poate fi o cauza a cresterii curbei invatarii si poate influenta folosirea cu succes/insucces a produsului; o dovada a influentei librariei pot fi numarul de carti publicate despre respectiva librarie (articole, post-uri pe bloggere, etc) Activitatea de pe forum-uri, liste de discutii, issue trackere - ofera un indiciu clar asupra popularitatii produsului respectiv; o comunitate vibranta ofera o garantie a feed-back-ului in cazul poblemelor intampinate in folosirea librariei Licenta librariei respective - licenta te poate obliga sa publici codul dependent de libraria respectiva (GPL) sau te poate constrange sa nu o folosesti in proecte comerciale O firma sau organizatie care sa sprijine libraria respectiva - este cazul unor firme Open Source de succes cum ar fi JBoss sau Spring Source sau consortii Open Source care garanteaza intr-un fel pentru libraria respectiva
  • #20: Posibile noi features de adaugat posibilitatea de a adauga articole ca anonim fara a fi nevoie de logare; un user sau rol trebuie creat pentru aceasta aplicatia trebuie sa ofere posibilitatea de a crea meniuri laterale in mod dinamic prin adaugarea de nume de resurse si link-urile aferente adaugarea unei rubrici de configurare in care sa se poate face setari in runtime: numarul de articole vizibile, daca se vad comentarii sau nu de separat atributele unui articol intr-o tabela separata articolul sa poata fi setat sa nu primeasca comentarii de creat un al doilea look and feel pentru aplicatie de generalizat gestiunea de comentarii si la nivel de utilizator de aprobat/dezaprobat crearea de utilizator, articol, comentariu direct din email-ul trimis (acesta trebuie sa contina tot continutul pentru a putea fi citit)