2.5 Tiers

43
U. Landini & L. Fugaro - [email protected] - JUG Roma Javaday IV – Roma – 30 gennaio 2010 Web 2.0 o 1.0? Ugo Landini & Luigi Fugaro, Jug Roma sabato 30 gennaio 2010

description

2.5 tiers is the name of this simple and powerful architecture, based on jquery and RESTful services. In this talk we'll learn how to apply 2.5 tiers in our projects

Transcript of 2.5 Tiers

Page 1: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Web 2.0 o 1.0?

Ugo Landini & Luigi Fugaro, Jug Roma

sabato 30 gennaio 2010

Page 2: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

2.5 tiers

• Agenda

• What’s hot

• Un po’ di storia

• 2.5 tier

• REST con RESTEasy

• Rich client con JQuery

• Conclusioni

sabato 30 gennaio 2010

Page 3: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

C’è chi fa cose del genere oggi...

sabato 30 gennaio 2010

Page 4: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

280slides, come hanno fatto?

• Replica dell’intero stack Cocoa di Apple nel browser (Cappuccino)

• Creazione di un nuovo linguaggio, a partire da Javascript: Objective J

• Creazione di un equivalente dell’Interface Builder di Apple

• Binding evoluti, eventi, ecc.

• IDE completamente browser based (Atlas)

• Non vogliamo arrivare a tanto, ma ...

sabato 30 gennaio 2010

Page 5: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

280slides, come?

Un po’ di storia

sabato 30 gennaio 2010

Page 6: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Evoluzione

Dal Paleolitico al Neolitico, passando per il Mesolitico

sabato 30 gennaio 2010

Page 7: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Paleolitico

• Applicazioni Client server

• Two tiers

• Fat Client (Visual Basic, Delphi, ecc.)

• Query dirette sul DB

• Manutenibilità complessa

• Performance elevate

sabato 30 gennaio 2010

Page 8: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Mesolitico

• Entra in scena il Web, che di fatto uccide il Client/Server

• Thin client e non più Fat client

• Three tiers (o più precisamente, n-tiers)

• Separazione logica ed anche fisica

• Anni di gloria degli Application Server

• Problemi di scalabilità impliciti

• difficoltà ad essere stateless

sabato 30 gennaio 2010

Page 9: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Patterns

• Perchè utilizziamo MVC server side?

• Per motivi storici

• Javascript era un incubo, ed i browser avevano problemi anche con dell’html semplice

• Ormai è questione di abitudine

• Ci sembra normale che la GUI venga generata dal server

• Non lo è

sabato 30 gennaio 2010

Page 10: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Mesolitico

sabato 30 gennaio 2010

Page 11: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Neolitico

• Ajax ha reso possibile oggi dei Rich Client, e dunque un ritorno ad un 3-tier

• Per i Rich Client ci sono però molte tecnologie a disposizione

• Tecnologie come JavaFX, Flex, Silverlight, OpenLaszlo, ...

• ma anche GWT, JSF, Wicket, ed altre librerie Java-oriented

• ognuna con pro e contro diversi

sabato 30 gennaio 2010

Page 12: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Stateless vs Stateful

• Stateless è considerato da sempre il miglior modo per scalare

• Le tecnologie che creano un mapping artificale fra client e server sono stateful per natura

• Stateful: JSF, Wicket

• no scalability, dimensionamento difficile

• Stateless: Javascript diretto, generatori di Javascript (GWT)

sabato 30 gennaio 2010

Page 13: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Neolitico

sabato 30 gennaio 2010

Page 14: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Neolitico

• Nel Neolitico è decisamente possibile fare rich client solo con il browser

• Javascript (con JQuery) è la tecnologia abilitante

• JSon il formato dati, Ajax il protocollo, REST l’architettura

• HTML 5 a seguire, è completamente in linea con questa architettura

sabato 30 gennaio 2010

Page 15: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Come si realizza un 2.5 tier

• JQuery

• Libreria Javascript per consumare servizi REST e creare componenti riusabili

• si, funziona anche su IE6 :)

• Esposizione dei dati come servizi tramite librerie REST

• JAX-RS è lo standard

• RestEasy è la migliore implementazione, ma ce ne sono altre

sabato 30 gennaio 2010

Page 16: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

REST

REST in a Nutshell

sabato 30 gennaio 2010

Page 17: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

REST Architecture in una slide

• Dissertazione PHD di Roy Fielding (coautore di HTTP), 2000

• REpresentational State Transfer

• Ovvero, usare il Web così com’è per far collaborare le applicazioni: HTTP è molto più ricco di quanto si creda!

• Soprattutto in antitesi a WS-* (SOAP, WSDL, UDDI, ecc.), anche se Roy Fielding presentò un concetto più ampio

sabato 30 gennaio 2010

Page 18: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

REST Architecture in una slide

• HTTP a pieno potenziale

• PUT, POST, GET, DELETE (l’equivalente di un CRUD)

• ma anche OPTIONS, CONNECT, TRACE, HEAD

• URI come identificativo di una risorsa (Addressability)

• Uniform interface (ogni risorsa deve essere acceduta allo stesso modo)

sabato 30 gennaio 2010

Page 19: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

REST verbs

Method URI RPC

GET http://my.com/users/ugol getUser(“ugol”)POST http://my.com/users addUser()

DELETE http://my.com/users/luigif removeUser(“luigif”)PUT http://my.com/users/ugol/39 updateUser(“ugol”,39)GET http://my.com/users listUsers()GET http://my.com/users/find/&q=”boh” findUser(“boh”)

sabato 30 gennaio 2010

Page 20: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

PUT vs POST

PUT(new resource)

PUT(existing resource)

POST

/weblogs NA NO EFFECT Crea un nuovo weblog

/weblogs/myblog Crea il blog myblog

Modifica settaggi di

myblog

Crea nuova entry nel weblog

/weblogs/myblog/entries/18

NA(chi ti da la

URI?)Edit entry 18

Posta un commento alla

entry 18

sabato 30 gennaio 2010

Page 21: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Safety & Idempotenza

• Safety

4 x 1 x 1 x 1 = 4 x 1 = 4

• Idempotenza

4 x 0 = 4 x 0 x 0 x 0

ma 4 x 0 ≠ 4

sabato 30 gennaio 2010

Page 22: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Safety & Idempotenza

GET PUT DELETE POST

SAFE SI NO NO NO

IDEMPOTENTE SI SI SI NO

sabato 30 gennaio 2010

Page 23: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Safety & Idempotenza

• Una applicazione che sia buon cittadino del Web deve rispettare il protocollo HTTP e la semantica dei suoi “verbi”

METHOD URI

GOOD DELETE http://my.com/user/ugol

BAD GET http://my.com/users/ugol/delete

sabato 30 gennaio 2010

Page 24: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Safety & Idempotenza, perchè?

• Google accelerator

• client side caching tool, rilasciato nel 2005

• prefetching dei link delle pagine visitate con un browser

• assumeva che le GET fossero safe

• NON funzionava con moltissimi siti!

sabato 30 gennaio 2010

Page 25: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

REST in Java

• JAX-RS (JSR 311): The Java API for RESTful Web services

• E’ uno standard, Jersey è la reference implementation

• Facilissimo produrre XML o JSON

• RESTEasy è una delle implementazioni migliori

• Ne parleremo diffusamente nel prossimo talk! Non cambiate aula :)

sabato 30 gennaio 2010

Page 26: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

JQuery

JQuery

sabato 30 gennaio 2010

Page 27: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

JSON

• JAvaScript Object Notation

• serializzazione di un oggetto javascript (ma anche Java)

• RFC 4627

• Formato semplice per scambiare oggetti: alternativa light ad XML (meno verbosa)

{ "firstName": "Luigi", "lastName": "Fugaro", "address": { "streetAddress": "via G.Belli", "city": "Roma", "postalCode": “00100” },

"phoneNumbers": [ "346 1234567", "330 8901234" ] }

sabato 30 gennaio 2010

Page 28: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

JQuery

• JQuery

• JQuery è divenuta negli ultimi anni la libreria dominante nel panorama javascript

• John Resig, l’autore di Jquery, è stato il pioniere dell’unobtrusive Javascript

• oggi anche altre librerie vanno nella stessa direzione

• è utilizzatissima per la semplicità con cui si ottengono ottimi effetti grafici cross browser

• permette di separare struttura e comportamento

sabato 30 gennaio 2010

Page 29: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Unobtrusive Javascript

• Unobtrusive Javascript

• I CSS permettono di separare la presentazione dalla struttura

• Una libreria js unobtrusive separa anche il comportamento dalla struttura

• Si “attacca” il comportamento alla struttura tramite dei selector (CSS compatibili)

• Il comportamento è cross browser, ci pensa la libreria ad applicare workaround

sabato 30 gennaio 2010

Page 30: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

JQuery Simple Example

sabato 30 gennaio 2010

Page 31: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

JTemplates

• JTemplates è una libreria di Templating client side

• Sfrutta JQuery

• Semplice e leggera (circa 12Kb)

• Permette di scrivere “cascading templates”

• Risolve il problema della componentizzazione delle interfacce HTML/JS

• http://jtemplates.tpython.com/

sabato 30 gennaio 2010

Page 32: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Esempio JTemplates

sabato 30 gennaio 2010

Page 33: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Esempio JTemplates

sabato 30 gennaio 2010

Page 34: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

JQuery e 2.5 tier

• L’idea di base dell’architettura 2.5 tier è quella di utilizzare Javascript e JQuery per fare... tutto.

• Tenendo “ferma” l’architettura REST, dunque solo servizi

• Nessun codice lato server che non sia RESTEasy

• ok le validazioni le abbiamo lasciate lato server :)

• Tutto il resto è sul client

• Solo pagine “statiche”

• Componenti JQuery + templating Javascript (JTemplate)

• What else?

sabato 30 gennaio 2010

Page 35: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Reverse Ajax

• L’architettura 2.5 tier è Comet-compliant

• se si vuole un full MVC, con notifiche dirette verso le View, si può utilizzare una delle tecnologie Comet

• Comet consiste nel tenere aperta una connessione verso il server per ricevere gli eventi

• Termine coniato nel 2006 da Alex Russell (Server push, HTTP push, HTTP Streaming, Pushlets, Reverse Ajax)

• diversi modi di realizzarlo, e diversi contro: attenzione ai Firewall, alla Scalabilità, alla Server Affinity.

sabato 30 gennaio 2010

Page 36: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Enterprise

2.5 tier & Enterprise

sabato 30 gennaio 2010

Page 37: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Scalabilità

• 2.5 tier scala all’infinito

• Le URI sono inerentemente scalabili. Il Web è inerentemente scalabile. Dietro ad una URI può esserci un semplice Tomcat, ma anche un bilanciatore hardware. E dietro SOAP?

• Se la GUI è solo sul client, i server possono essere stateless. E anche se le pagine diventano decisamente più pesanti, possono sfruttare la cache del browser

• Attenzione a Comet, però.

sabato 30 gennaio 2010

Page 38: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Caching / Pipelining

• Con 2.5 tier possiamo cachare fino all’inverosimile

• cache delle query verso il DB

• cache di HTTP

• Cache-Control in HTTP 1.1

• ci permette di NON trasferire verso il browser i risultati che sappiamo non essere cambiati

• cache del browser di tutta la GUI (html e js)

• pipelining (effettuare il fetch di più risultati del necessario e conservarli nel client)

sabato 30 gennaio 2010

Page 39: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Security

• Con 2.5 tier la sicurezza è semplificata

• Due possibili approcci

• usare un IDM (IDentity Manager)

• essendo tutta l’applicazione basata su URI, il matrimonio con un IDM non presenta grossi problemi

• necessario plugin per l’AS se si vuole colloquiare con l’IDM per migliorare la fruibilità e l’estetica dell’interfaccia

• utilizzare la sicurezza standard JEE, annotando semplicemente i metodi esposti tramite REST

sabato 30 gennaio 2010

Page 40: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Server side agnostic!

• Una GUI interamente JS e che consuma JSON è indipendente dalla tecnologia server side!

• Si possono scrivere componenti (datatable, calendari, ecc.) e riciclarli all’interno di un’azienda complessa con architetture miste e non monotecnologiche

• Java, .Net, Scala, Erlang, PHP, C, C++, etc.

• Si può dire che 2.5 tier faciliti il riuso all’interno di una Enterprise più di ogni altra soluzione ad oggi conosciuta

sabato 30 gennaio 2010

Page 41: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

2.5 tier

Conclusioni

sabato 30 gennaio 2010

Page 42: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

Conclusioni

• Oggi è possibile utilizzare un’architettura full REST in un’azienda enterprise

• Oggi è possibile utilizzare un MVC completamente client side, senza ricorrere ad “aiutini”

• Le applicazioni saranno:

• indipendenti dal client e dal server, riusabili (SOA), belle graficamente (ok, solo se avete un grafico bravo), performanti, e scalabili ai limiti estremi.

• perciò non è solo possibile, ma anche consigliabile...

sabato 30 gennaio 2010

Page 43: 2.5 Tiers

U. Landini & L. Fugaro - [email protected] - JUG Roma

Javaday IV – Roma – 30 gennaio 2010

2.5 tiers, Rest In Peace

MVC Server Side,REST In Peace

Ugo Landini, Jug RomaLuigi Fugaro, Jug Roma

sabato 30 gennaio 2010