SlideShare a Scribd company logo
Struttin' On
novità in casa Struts
Marcello Teodori
marcello.teodori@jugmilano.it
Java User Group Milano




About Marcello
Ingegnere Informatico, appassionato di Java, open source, metodologie e programmazione in
generale, lavora dal 1997 nello sviluppo software, principalmente in ambito applicazioni
distribuite, web e mobile internet.

Dal 2004 collabora all'organizzazione delle attività del Java User Group Milano.

Partecipa alla community open source principalmente contribuendo con localizzazioni in
italiano di applicazioni esistenti e documentazione.


About JUG Milano
     nasce il 18 Dicembre 2002 ad opera di Filippo Diotalevi
     mailing list su Yahoo! Groups con più di 200 iscritti
     meeting con cadenza mensile con presentazioni a cura degli iscritti
     eventi speciali
     partecipazione del tutto libera e gratuita
     il nostro sito web: http://www.jugmilano.it/
     facciamo parte della Top 50 dei JUG mondiali!


Una Premessa
Devo fare un'analisi sullo sviluppo di un'applicazione web
in Java con le seguenti caratteristiche:
     grandi dimensioni, sia come numerosità del team che come function point
     accesso a data source e business services generici
     layout pagine uniforme, stile portale
     aree "attive" che si aggiornano da sole => AJAX!


Struts nel 2006?
     Qualche anno fa non si parlava d'altro... ora molto meno!
     Ad oggi Struts può considerarsi ancora una risposta valida?
     Scopriamolo andando a rivederci il sito!
     Una vera rivoluzione, cerchiamo di mettere un po' d'ordine...
Struts: stato attuale in dettaglio
  La versione 1.2.9 è l'ultima rilasciata in GA, con bugfix per applicazioni già in campo
  Il sito attuale presenta Action Framework 1, evoluzione della vecchia code base,
  corrispondente a Struts 1.3.4 prossima al rilascio GA, con i subproject Core, Applications,
  EL, Extras, Scripting, Taglibs, and Tiles
  Struts Action Framework 2.0 è la nuova versione sulla codebase di WebWork, rilascio
  previsto prima metà 2006
  Struts Shale Framework, rilascio previsto agosto 2006 è una serie di moduli aggiuntivi per
  JSF non correlati con lo Struts originale


Java Web API/Struts Project Timeline




Struts 101
  cos'è e come nasce Struts?
        semplifica e rende più flessibile il JSP Model 2, un MVC per il web
        un'esigenza di una singola persona, Craig McClanahan, condivisa da molti
        implementazione pattern Front Controller
        gli "artifact" di Struts: Action, ActionForm, struts-config.xml
  XML configuration tramite Digester => early Spring!
  Validator
  Tiles come layout
  Una serie di taglib, principalmente per generare i form HTML
JSP Model 2




Original Struts Model




Limiti di Struts
gerarchia di classi rigida: abstract base class ovunque
     codice boilerplate per recupero, convalida e conversione dati
     difficoltà di riutilizzo del codice
     sovrapposizione funzionalità con JSTL: struts-el


Struts Best Practices
     Evito i FormBean tramite i DynaActionForm
     Il Validator Framework elimina codice di validazione ripetitivo
     Sostituisco configurazione XML con tag XDoclet
     PlugIn con estensione RequestProcessor
     ...ma ci sono ancora problemi...


SAF 1 AKA Struts 1.3
Risolve il problema principale: riutilizzo del codice delle Action e composizione Plugin

     Commons Chain (Chain of Responsibility)
           RequestProcessor Composable e non più monolitico
           concatenazione action con attributi command e catalog
     attributo extends come in Tiles su struts-config.xml


Bisogna Fare Qualcosa! Struts Ti
Progetto di evoluzione del framework che trae ispirazione, ma soprattutto coinvolge il meglio
della "concorrenza" tramite discussioni sulla mailing list struts-dev.

     Fase 1: focus su consolidamento supporto dell'esistente
          Utilizzo di WebWork 2.2 come nuova code base
          Strumenti di compatibilità e porting da SAF 1.0
     Fase 2: focus su semplificazione (EoD)
          integrazione Commons Chain
          integrazione Page
Flow di Beehive
          annotation in alternativa a configurazione
          quick development mode

Matt Raible raccoglie le dichiarazioni sul "merger" qui


XDoclet vs. Annotation
     Code generation vs. Runtime inspection
     Futuro incerto di XDoclet, scarso interesse per XDoclet 2
     Annotation in Beehive su Struts 1.1 (ex BEA Workflow)
     Annotation per le Action in Sprout, ma sposta configurazione su Spring!
     Strecks, Annotations per Validator e POJO Action

Le annotation possono essere utilizzate sia per arricchire con proprietà la definizione di metodi,
classi, variabili, che per definire il funzionamento di un programma tramite code generation, in
maniera analoga ad XDoclet. Un parere sull'uso di annotation per la generazione del codice.


POJO Revolution
     Semplicità di realizzazione di Unit Test e riduzione necessità di Mock Object
Massima libertà nelle gerarchia delle proprie classi
  Nessuna dipendenza da implementazioni di API esterne (Servlet)
  "composizione" delle applicazioni via XML e Inversion of Control/Dependency Injection
  (vedi Spring)


SAF 2 AKA WebWork 2.2
  la versione 2.2.2 è l'ultima a nome WebWork
  i tag ww diventano saf
  esistono solo Action e file di configurazione, nessuna abstract base class, l'Action può
  essere un POJO e non è condivisa come in SAF 1.0
  la view non è limitata a JSP
  Documentazione ottima e abbondante!


WebWork/SAF 2.0 Model




WebWork full stack
  Tiger package con Annotation!
  Webapp showcase con tantissimi casi d'uso
  Modalità di reload automatico di classi, configurazione e risorse
  RAD via Jetty integrato: java -jar webwork-2.2.*.jar quickstart:<mywebapp>
  Supporto AJAX tramite integrazione DOJO (JavaScript) e DWR (Java)
  Continuations tramite il package estratto da RIFE


Struts e JSF?
  request-based vs. component based
Craig McClanahan è coinvolto nelle specifiche JSF e nell'IDE Sun Java Creator
     struts-faces: subproject in SAF 1.0, soluzione ad interim non ottimale e poco
     documentata
     la diffusione di JSF è in crescita
     Cosa può dare Struts a JSF?


JSF Lifecycle




Shale: il contributo di Struts a JSF
Non un framework, ma una serie di moduli aggiuntivi per JSF, forse destinati ad una prossima
versione delle relative specifiche.

     Implementazione input validation via Commons Validator
     Clay, implementazione ViewHandler in HTML analogo a Facelets
     ViewController, un page controller stile RoR/ASP.NET
     Remoting: supporto ad AJAX saltando la fase di view rendering
     Dialog: supporto conversation scope tramite Spring Web Flow
     Integrazione con JNDI e Spring

Un esempio di ViewController.


Supporto IDE
     Pollinate su Eclipse per Beehive, dead on arrival!
     designer visuali di struts-config.xml
     supporto di base degli artifact di Struts (e WebWork)
     strumenti di composizione visuale delle view JSF (Sun Java Creator, JDeveloper...)


Ma alla fine cosa ho scelto?

"WebWork is a great technology,
and Struts is a great community"
                                               (Patrick Lightbody, OpenSymphony/WebWork)
Ringraziamenti ecc.
  Questa presentazione è stata realizzata in XHTML/JavaScript con S5, A Simple
  Standards-Based Slide Show System di Eric Meyer in un decimo del tempo rispetto alle
  alternative, stile compreso.
  Il codice XHTML è stato realizzato in JEdit, con i plugin XML e Code2HTML
  Contenuti e immagini sono soggetti a licenza Creative Commons Attribuzione-
  NonCommerciale-NoOpereDerivate 2.5
  Domande e (possibilmente) Risposte
  Ci vediamo il 28 settembre alla tappa di Milano del Java Day '06! Stay tuned

More Related Content

Struttin' on, novità in casa Struts

  • 1. Struttin' On novità in casa Struts Marcello Teodori marcello.teodori@jugmilano.it Java User Group Milano About Marcello Ingegnere Informatico, appassionato di Java, open source, metodologie e programmazione in generale, lavora dal 1997 nello sviluppo software, principalmente in ambito applicazioni distribuite, web e mobile internet. Dal 2004 collabora all'organizzazione delle attività del Java User Group Milano. Partecipa alla community open source principalmente contribuendo con localizzazioni in italiano di applicazioni esistenti e documentazione. About JUG Milano nasce il 18 Dicembre 2002 ad opera di Filippo Diotalevi mailing list su Yahoo! Groups con più di 200 iscritti meeting con cadenza mensile con presentazioni a cura degli iscritti eventi speciali partecipazione del tutto libera e gratuita il nostro sito web: http://www.jugmilano.it/ facciamo parte della Top 50 dei JUG mondiali! Una Premessa Devo fare un'analisi sullo sviluppo di un'applicazione web in Java con le seguenti caratteristiche: grandi dimensioni, sia come numerosità del team che come function point accesso a data source e business services generici layout pagine uniforme, stile portale aree "attive" che si aggiornano da sole => AJAX! Struts nel 2006? Qualche anno fa non si parlava d'altro... ora molto meno! Ad oggi Struts può considerarsi ancora una risposta valida? Scopriamolo andando a rivederci il sito! Una vera rivoluzione, cerchiamo di mettere un po' d'ordine...
  • 2. Struts: stato attuale in dettaglio La versione 1.2.9 è l'ultima rilasciata in GA, con bugfix per applicazioni già in campo Il sito attuale presenta Action Framework 1, evoluzione della vecchia code base, corrispondente a Struts 1.3.4 prossima al rilascio GA, con i subproject Core, Applications, EL, Extras, Scripting, Taglibs, and Tiles Struts Action Framework 2.0 è la nuova versione sulla codebase di WebWork, rilascio previsto prima metà 2006 Struts Shale Framework, rilascio previsto agosto 2006 è una serie di moduli aggiuntivi per JSF non correlati con lo Struts originale Java Web API/Struts Project Timeline Struts 101 cos'è e come nasce Struts? semplifica e rende più flessibile il JSP Model 2, un MVC per il web un'esigenza di una singola persona, Craig McClanahan, condivisa da molti implementazione pattern Front Controller gli "artifact" di Struts: Action, ActionForm, struts-config.xml XML configuration tramite Digester => early Spring! Validator Tiles come layout Una serie di taglib, principalmente per generare i form HTML
  • 3. JSP Model 2 Original Struts Model Limiti di Struts
  • 4. gerarchia di classi rigida: abstract base class ovunque codice boilerplate per recupero, convalida e conversione dati difficoltà di riutilizzo del codice sovrapposizione funzionalità con JSTL: struts-el Struts Best Practices Evito i FormBean tramite i DynaActionForm Il Validator Framework elimina codice di validazione ripetitivo Sostituisco configurazione XML con tag XDoclet PlugIn con estensione RequestProcessor ...ma ci sono ancora problemi... SAF 1 AKA Struts 1.3 Risolve il problema principale: riutilizzo del codice delle Action e composizione Plugin Commons Chain (Chain of Responsibility) RequestProcessor Composable e non più monolitico concatenazione action con attributi command e catalog attributo extends come in Tiles su struts-config.xml Bisogna Fare Qualcosa! Struts Ti Progetto di evoluzione del framework che trae ispirazione, ma soprattutto coinvolge il meglio della "concorrenza" tramite discussioni sulla mailing list struts-dev. Fase 1: focus su consolidamento supporto dell'esistente Utilizzo di WebWork 2.2 come nuova code base Strumenti di compatibilità e porting da SAF 1.0 Fase 2: focus su semplificazione (EoD) integrazione Commons Chain integrazione Page
Flow di Beehive annotation in alternativa a configurazione quick development mode Matt Raible raccoglie le dichiarazioni sul "merger" qui XDoclet vs. Annotation Code generation vs. Runtime inspection Futuro incerto di XDoclet, scarso interesse per XDoclet 2 Annotation in Beehive su Struts 1.1 (ex BEA Workflow) Annotation per le Action in Sprout, ma sposta configurazione su Spring! Strecks, Annotations per Validator e POJO Action Le annotation possono essere utilizzate sia per arricchire con proprietà la definizione di metodi, classi, variabili, che per definire il funzionamento di un programma tramite code generation, in maniera analoga ad XDoclet. Un parere sull'uso di annotation per la generazione del codice. POJO Revolution Semplicità di realizzazione di Unit Test e riduzione necessità di Mock Object
  • 5. Massima libertà nelle gerarchia delle proprie classi Nessuna dipendenza da implementazioni di API esterne (Servlet) "composizione" delle applicazioni via XML e Inversion of Control/Dependency Injection (vedi Spring) SAF 2 AKA WebWork 2.2 la versione 2.2.2 è l'ultima a nome WebWork i tag ww diventano saf esistono solo Action e file di configurazione, nessuna abstract base class, l'Action può essere un POJO e non è condivisa come in SAF 1.0 la view non è limitata a JSP Documentazione ottima e abbondante! WebWork/SAF 2.0 Model WebWork full stack Tiger package con Annotation! Webapp showcase con tantissimi casi d'uso Modalità di reload automatico di classi, configurazione e risorse RAD via Jetty integrato: java -jar webwork-2.2.*.jar quickstart:<mywebapp> Supporto AJAX tramite integrazione DOJO (JavaScript) e DWR (Java) Continuations tramite il package estratto da RIFE Struts e JSF? request-based vs. component based
  • 6. Craig McClanahan è coinvolto nelle specifiche JSF e nell'IDE Sun Java Creator struts-faces: subproject in SAF 1.0, soluzione ad interim non ottimale e poco documentata la diffusione di JSF è in crescita Cosa può dare Struts a JSF? JSF Lifecycle Shale: il contributo di Struts a JSF Non un framework, ma una serie di moduli aggiuntivi per JSF, forse destinati ad una prossima versione delle relative specifiche. Implementazione input validation via Commons Validator Clay, implementazione ViewHandler in HTML analogo a Facelets ViewController, un page controller stile RoR/ASP.NET Remoting: supporto ad AJAX saltando la fase di view rendering Dialog: supporto conversation scope tramite Spring Web Flow Integrazione con JNDI e Spring Un esempio di ViewController. Supporto IDE Pollinate su Eclipse per Beehive, dead on arrival! designer visuali di struts-config.xml supporto di base degli artifact di Struts (e WebWork) strumenti di composizione visuale delle view JSF (Sun Java Creator, JDeveloper...) Ma alla fine cosa ho scelto? "WebWork is a great technology, and Struts is a great community" (Patrick Lightbody, OpenSymphony/WebWork)
  • 7. Ringraziamenti ecc. Questa presentazione è stata realizzata in XHTML/JavaScript con S5, A Simple Standards-Based Slide Show System di Eric Meyer in un decimo del tempo rispetto alle alternative, stile compreso. Il codice XHTML è stato realizzato in JEdit, con i plugin XML e Code2HTML Contenuti e immagini sono soggetti a licenza Creative Commons Attribuzione- NonCommerciale-NoOpereDerivate 2.5 Domande e (possibilmente) Risposte Ci vediamo il 28 settembre alla tappa di Milano del Java Day '06! Stay tuned