際際滷

際際滷Share a Scribd company logo
Web 2.0 o 1.0?




               Ugo Landini & Luigi Fugaro, Jug Roma
                                   U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                 Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
2.5 tiers

   Agenda
         Whats hot
         Un po di storia
         2.5 tier
         REST con RESTEasy
         Rich client con JQuery
         Conclusioni

                                   U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                 Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
C竪 chi fa cose del genere oggi...




                                U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                              Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
280slides, come hanno fatto?

         Replica dellintero stack Cocoa di Apple nel
            browser (Cappuccino)
               Creazione di un nuovo linguaggio, a partire da
                Javascript: Objective J
               Creazione di un equivalente dellInterface Builder di
                Apple
               Binding evoluti, eventi, ecc.
               IDE completamente browser based (Atlas)
         Non vogliamo arrivare a tanto, ma ...

                                                U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                              Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
280slides, come?




                         Un po di storia



                                  U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Evoluzione

       Dal Paleolitico al Neolitico, passando per il Mesolitico




                                      U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                    Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Paleolitico

   Applicazioni Client server
         Two tiers
         Fat Client (Visual Basic, Delphi, ecc.)
   Query dirette sul DB
         Manutenibilit complessa
         Performance elevate


                                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                       Javaday IV  Roma  30 gennaio 2010
sabato 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 鍖sica
         Anni di gloria degli Application Server
         Problemi di scalabilit impliciti
               dif鍖colt ad essere stateless
                                                U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                              Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Patterns

   Perch竪 utilizziamo MVC server side?
         Per motivi storici
         Javascript era un incubo, ed i browser avevano
            problemi anche con dellhtml semplice
         Ormai 竪 questione di abitudine
         Ci sembra normale che la GUI venga generata dal
            server
               Non lo 竪

                                        U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                      Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Mesolitico




                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                       Javaday IV  Roma  30 gennaio 2010
sabato 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
                                        U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                      Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Stateless vs Stateful

   Stateless 竪 considerato da sempre il miglior modo
       per scalare
   Le tecnologie che creano un mapping arti鍖cale fra
       client e server sono stateful per natura
         Stateful: JSF, Wicket
               no scalability, dimensionamento dif鍖cile
         Stateless: Javascript diretto, generatori di Javascript
            (GWT)

                                               U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                             Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Neolitico




                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                       Javaday IV  Roma  30 gennaio 2010
sabato 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
            larchitettura
         HTML 5 a seguire, 竪 completamente in linea con
            questa architettura



                                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                       Javaday IV  Roma  30 gennaio 2010
sabato 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
                                           U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                         Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
REST




                         REST in a Nutshell



                                   U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                 Javaday IV  Roma  30 gennaio 2010
sabato 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
                                        U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                      Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
REST Architecture in una slide

         HTTP a pieno potenziale
         PUT, POST, GET, DELETE (lequivalente di un CRUD)
         ma anche OPTIONS, CONNECT, TRACE, HEAD
         URI come identi鍖cativo di una risorsa (Addressability)
         Uniform interface (ogni risorsa deve essere acceduta
            allo stesso modo)



                                        U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                      Javaday IV  Roma  30 gennaio 2010
sabato 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/鍖nd/&q=boh    鍖ndUser(boh)


                                     U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                   Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
PUT vs POST
                                               PUT
                               PUT
                                             (existing                   POST
                          (new resource)
                                            resource)
                                                     Crea un nuovo
              /weblogs         NA          NO EFFECT
                                                        weblog

                                             Modi鍖ca      Crea nuova
                           Crea il blog
       /weblogs/myblog                      settaggi di    entry nel
                             myblog
                                             myblog         weblog
                               NA                          Posta un
       /weblogs/myblog/
                           (chi ti da la   Edit entry 18 commento alla
          entries/18
                              URI?)                        entry 18
                                           U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                         Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Safety & Idempotenza
            Safety
           4x1x1x1=4x1=4


            Idempotenza
           4x0=4x0x0x0
           ma 4 x 0  4



                           U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                         Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Safety & Idempotenza


                         GET   PUT            DELETE                 POST



                SAFE     SI    NO                 NO                   NO



      IDEMPOTENTE        SI    SI                   SI                 NO

                                     U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                   Javaday IV  Roma  30 gennaio 2010
sabato 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
                                           U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                         Javaday IV  Roma  30 gennaio 2010
sabato 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!


                                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                       Javaday IV  Roma  30 gennaio 2010
sabato 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 :)


                                       U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                     Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
JQuery




                         JQuery



                             U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                           Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
JSON
            JAvaScript Object Notation           {

            serializzazione di un                     "鍖rstName": "Luigi",
                                                       "lastName": "Fugaro",
               oggetto javascript (ma anche            "address": {
                                                          "streetAddress": "via G.Belli",
               Java)                                      "city": "Roma",
                                                          "postalCode": 00100
            RFC 4627                                  },

            Formato semplice per                      "phoneNumbers": [
                                                         "346 1234567",
               scambiare oggetti:                        "330 8901234"
               alternativa light ad XML                ]
                                                   }
               (meno verbosa)

                                          U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                        Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
JQuery

   JQuery
         JQuery 竪 divenuta negli ultimi anni la libreria dominante
            nel panorama javascript
         John Resig, lautore di Jquery, 竪 stato il pioniere
            dellunobtrusive Javascript
               oggi anche altre librerie vanno nella stessa direzione
               竪 utilizzatissima per la semplicit con cui si ottengono ottimi
                effetti gra鍖ci cross browser
               permette di separare struttura e comportamento
                                                U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                              Javaday IV  Roma  30 gennaio 2010
sabato 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

                                                U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                              Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
JQuery Simple Example




                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                       Javaday IV  Roma  30 gennaio 2010
sabato 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/
                                U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                              Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Esempio JTemplates




                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                       Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Esempio JTemplates




                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                       Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
JQuery e 2.5 tier

   Lidea di base dellarchitettura 2.5 tier 竪 quella di
       utilizzare Javascript e JQuery per fare... tutto.
         Tenendo ferma larchitettura 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?
                                                 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                               Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Reverse Ajax

   Larchitettura 2.5 tier 竪 Comet-compliant
         se si vuole un full MVC, con noti鍖che 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 Af鍖nity.
                                               U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                             Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Enterprise




                         2.5 tier &
                         Enterprise


                              U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                            Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Scalabilit

   2.5 tier scala allin鍖nito
         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嘆.
                                         U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                       Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Caching / Pipelining

   Con 2.5 tier possiamo cachare 鍖no allinverosimile
         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)
                                                 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                               Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Security

   Con 2.5 tier la sicurezza 竪 sempli鍖cata
   Due possibili approcci
         usare un IDM (IDentity Manager)
               essendo tutta lapplicazione basata su URI, il matrimonio con
                un IDM non presenta grossi problemi
               necessario plugin per lAS se si vuole colloquiare con lIDM per
                migliorare la fruibilit e lestetica dellinterfaccia
         utilizzare la sicurezza standard JEE, annotando
            semplicemente i metodi esposti tramite REST
                                               U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                             Javaday IV  Roma  30 gennaio 2010
sabato 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 allinterno di unazienda 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 allinterno di una
            Enterprise pi湛 di ogni altra soluzione ad oggi conosciuta

                                           U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                         Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
2.5 tier




                         Conclusioni



                               U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                             Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
Conclusioni

   Oggi 竪 possibile utilizzare unarchitettura full REST
       in unazienda 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
            gra鍖camente (ok, solo se avete un gra鍖co bravo),
            performanti, e scalabili ai limiti estremi.
         perci嘆 non 竪 solo possibile, ma anche consigliabile...
                                           U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                                         Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010
2.5 tiers, Rest In Peace


                           MVC Server Side,
                            REST In Peace

                         Ugo Landini, Jug Roma
                         Luigi Fugaro, Jug Roma
                                U. Landini & L. Fugaro - ugol@computer.org - JUG Roma
                                              Javaday IV  Roma  30 gennaio 2010
sabato 30 gennaio 2010

More Related Content

2.5tier Javaday (italian)

  • 1. Web 2.0 o 1.0? Ugo Landini & Luigi Fugaro, Jug Roma U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 2. 2.5 tiers Agenda Whats hot Un po di storia 2.5 tier REST con RESTEasy Rich client con JQuery Conclusioni U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 3. C竪 chi fa cose del genere oggi... U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 4. 280slides, come hanno fatto? Replica dellintero stack Cocoa di Apple nel browser (Cappuccino) Creazione di un nuovo linguaggio, a partire da Javascript: Objective J Creazione di un equivalente dellInterface Builder di Apple Binding evoluti, eventi, ecc. IDE completamente browser based (Atlas) Non vogliamo arrivare a tanto, ma ... U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 5. 280slides, come? Un po di storia U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 6. Evoluzione Dal Paleolitico al Neolitico, passando per il Mesolitico U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 7. Paleolitico Applicazioni Client server Two tiers Fat Client (Visual Basic, Delphi, ecc.) Query dirette sul DB Manutenibilit complessa Performance elevate U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 8. 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 鍖sica Anni di gloria degli Application Server Problemi di scalabilit impliciti dif鍖colt ad essere stateless U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 9. Patterns Perch竪 utilizziamo MVC server side? Per motivi storici Javascript era un incubo, ed i browser avevano problemi anche con dellhtml semplice Ormai 竪 questione di abitudine Ci sembra normale che la GUI venga generata dal server Non lo 竪 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 10. Mesolitico U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 11. 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 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 12. Stateless vs Stateful Stateless 竪 considerato da sempre il miglior modo per scalare Le tecnologie che creano un mapping arti鍖cale fra client e server sono stateful per natura Stateful: JSF, Wicket no scalability, dimensionamento dif鍖cile Stateless: Javascript diretto, generatori di Javascript (GWT) U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 13. Neolitico U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 14. 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 larchitettura HTML 5 a seguire, 竪 completamente in linea con questa architettura U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 15. 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 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 16. REST REST in a Nutshell U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 17. 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 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 18. REST Architecture in una slide HTTP a pieno potenziale PUT, POST, GET, DELETE (lequivalente di un CRUD) ma anche OPTIONS, CONNECT, TRACE, HEAD URI come identi鍖cativo di una risorsa (Addressability) Uniform interface (ogni risorsa deve essere acceduta allo stesso modo) U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 19. 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/鍖nd/&q=boh 鍖ndUser(boh) U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 20. PUT vs POST PUT PUT (existing POST (new resource) resource) Crea un nuovo /weblogs NA NO EFFECT weblog Modi鍖ca Crea nuova Crea il blog /weblogs/myblog settaggi di entry nel myblog myblog weblog NA Posta un /weblogs/myblog/ (chi ti da la Edit entry 18 commento alla entries/18 URI?) entry 18 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 21. Safety & Idempotenza Safety 4x1x1x1=4x1=4 Idempotenza 4x0=4x0x0x0 ma 4 x 0 4 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 22. Safety & Idempotenza GET PUT DELETE POST SAFE SI NO NO NO IDEMPOTENTE SI SI SI NO U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 23. 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 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 24. 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! U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 25. 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 :) U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 26. JQuery JQuery U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 27. JSON JAvaScript Object Notation { serializzazione di un "鍖rstName": "Luigi", "lastName": "Fugaro", oggetto javascript (ma anche "address": { "streetAddress": "via G.Belli", Java) "city": "Roma", "postalCode": 00100 RFC 4627 }, Formato semplice per "phoneNumbers": [ "346 1234567", scambiare oggetti: "330 8901234" alternativa light ad XML ] } (meno verbosa) U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 28. JQuery JQuery JQuery 竪 divenuta negli ultimi anni la libreria dominante nel panorama javascript John Resig, lautore di Jquery, 竪 stato il pioniere dellunobtrusive Javascript oggi anche altre librerie vanno nella stessa direzione 竪 utilizzatissima per la semplicit con cui si ottengono ottimi effetti gra鍖ci cross browser permette di separare struttura e comportamento U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 29. 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 U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 30. JQuery Simple Example U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 31. 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/ U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 32. Esempio JTemplates U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 33. Esempio JTemplates U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 34. JQuery e 2.5 tier Lidea di base dellarchitettura 2.5 tier 竪 quella di utilizzare Javascript e JQuery per fare... tutto. Tenendo ferma larchitettura 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? U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 35. Reverse Ajax Larchitettura 2.5 tier 竪 Comet-compliant se si vuole un full MVC, con noti鍖che 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 Af鍖nity. U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 36. Enterprise 2.5 tier & Enterprise U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 37. Scalabilit 2.5 tier scala allin鍖nito 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嘆. U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 38. Caching / Pipelining Con 2.5 tier possiamo cachare 鍖no allinverosimile 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) U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 39. Security Con 2.5 tier la sicurezza 竪 sempli鍖cata Due possibili approcci usare un IDM (IDentity Manager) essendo tutta lapplicazione basata su URI, il matrimonio con un IDM non presenta grossi problemi necessario plugin per lAS se si vuole colloquiare con lIDM per migliorare la fruibilit e lestetica dellinterfaccia utilizzare la sicurezza standard JEE, annotando semplicemente i metodi esposti tramite REST U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 40. 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 allinterno di unazienda 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 allinterno di una Enterprise pi湛 di ogni altra soluzione ad oggi conosciuta U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 41. 2.5 tier Conclusioni U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 42. Conclusioni Oggi 竪 possibile utilizzare unarchitettura full REST in unazienda 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 gra鍖camente (ok, solo se avete un gra鍖co bravo), performanti, e scalabili ai limiti estremi. perci嘆 non 竪 solo possibile, ma anche consigliabile... U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010
  • 43. 2.5 tiers, Rest In Peace MVC Server Side, REST In Peace Ugo Landini, Jug Roma Luigi Fugaro, Jug Roma U. Landini & L. Fugaro - ugol@computer.org - JUG Roma Javaday IV Roma 30 gennaio 2010 sabato 30 gennaio 2010