2.5tier javaday (italian)

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

Upload: luigi-fugaro

Post on 05-Jul-2015

806 views

Category:

Documents


0 download

DESCRIPTION

A quick introduction to REST with RESTeasy and the integration client-to-server using jQuery.

TRANSCRIPT

Page 1: 2.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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

Javaday IV – Roma – 30 gennaio 2010

Mesolitico

sabato 30 gennaio 2010

Page 11: 2.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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

Javaday IV – Roma – 30 gennaio 2010

Neolitico

sabato 30 gennaio 2010

Page 14: 2.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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

Javaday IV – Roma – 30 gennaio 2010

JQuery

JQuery

sabato 30 gennaio 2010

Page 27: 2.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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

Javaday IV – Roma – 30 gennaio 2010

JQuery Simple Example

sabato 30 gennaio 2010

Page 31: 2.5tier Javaday (italian)

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.5tier Javaday (italian)

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

Javaday IV – Roma – 30 gennaio 2010

Esempio JTemplates

sabato 30 gennaio 2010

Page 33: 2.5tier Javaday (italian)

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

Javaday IV – Roma – 30 gennaio 2010

Esempio JTemplates

sabato 30 gennaio 2010

Page 34: 2.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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.5tier Javaday (italian)

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