SlideShare une entreprise Scribd logo
1  sur  48
IppEvent «HTML5, Spring, NoSQL et mobilité» - 1




Nouveau look pour une
    nouvelle vie
 HTML5+Spring+NoSQL+Mobile

         Julien Dubois
          @juliendubois
Formation Spring - 2


                             Objectif :
           réaliser une application Java moderne, sans
                     (trop) céder à la mode

    Pas de framework
inconnu ou propriétaire
    Des technologies
standards ou largement
répandues
    Pas de langage alternatif que
personne ne comprend
    Du code simple et performant
    Le XML, ce n’est pas sale
IppEvent «HTML5, Spring, NoSQL et mobilité» - 3




                                    Speaker
• Développeur Java depuis 13 ans
 • A commencé avec les EJB 1.0
 • Code toujours chez les
     clients
• Connait bien Spring                     Julien Dubois
 • Co-auteur de «Spring par         Directeur du Conseil et du Développement

     la pratique»                   Ippon Technologies
                                          http://www.ippon.fr
 •   Ancien directeur de
     SpringSource France
• Directeur du pôle
  conseil chez Ippon Technologies

                   Suivez-moi sur Twitter : @juliendubois
IppEvent «HTML5, Spring, NoSQL et mobilité» - 4




  Nous allons nous baser sur Tatami, une
application HTML5+Spring+NoSQL+Mobile
IppEvent «HTML5, Spring, NoSQL et mobilité» - 5
IppEvent «HTML5, Spring, NoSQL et mobilité» - 6




              Technologies utilisées dans Tatami


• HTML5 :
    Twitter Bootstrap, Less,
    jQuery
•   Spring 3.1: Spring MVC Rest,
    configuration Java,
    Spring Mobile
•   NoSQL : Cassandra,
    Hector, Elastic Search
•   Mobilité : JQuery Mobile
IppEvent «HTML5, Spring, NoSQL et mobilité» - 7




L’ensemble du code
 est disponible sur
      GitHub
https://github.com/ippontech/tatami
IppEvent «HTML5, Spring, NoSQL et mobilité» - 8




    L 5             g         Q L                  le
 T M         r   in      oS                    b i
H         S p           N                    Mo
IppEvent «HTML5, Spring, NoSQL et mobilité» - 9




Que propose HTML5 ?

            Attention : cette
         conférence est orientée
          «entreprise», pas «jeu
                 vidéo»
IppEvent «HTML5, Spring, NoSQL et mobilité» - 10




       1. De nouveaux types de champs (1/2)

 1: <input id="emailInput"
 2:            name="email"
 3:            type="email"
 4:            required="required"
 5:            placeholder="Enter e-mail..."/>
 6:
 7: <input id="quantityInput"
 8:             name="quantity"
 9:             type="number"
10:             min="1"
11:             max="5" />
IppEvent «HTML5, Spring, NoSQL et mobilité» - 11



       1. De nouveaux types de champs (2/2)

• Ces champs sont ensuite
  automatiquement validés
  par le navigateur
• Sur mobile/tablette, le clavier
  correspondant au champ est
  activé
• Attention, le support est inégal
  en fonction des navigateurs
IppEvent «HTML5, Spring, NoSQL et mobilité» - 12



                       2. Le SVG




• Permet de faire du dessin vectoriel
• Supporte les événements JavaScript !!!
• Ne fonctionne pas sous IE (utilisation de VML)
• Nombreuses libraires  (raphael.js, Google Chart Tools, HighCharts...)
IppEvent «HTML5, Spring, NoSQL et mobilité» - 13
IppEvent «HTML5, Spring, NoSQL et mobilité» - 14




                    3. CSS 3
                          een 2D e t en 3D
             tions de text
• Tran sforma

• Transitions et animations
• Web Fonts
• Bords arrondis, ombres, opacité ...
IppEvent «HTML5, Spring, NoSQL et mobilité» - 15




                   4. Les WebSockets
      Trop jeune pour être utilisé
            concrètement :
• Support inégal des navigateurs,
• Support récent et non
    standard des serveurs
    d’applications
•   Mauvais support des proxys
•   Compliqué à débugger
•   Contesté au sein même de
    l’IETF...
IppEvent «HTML5, Spring, NoSQL et mobilité» - 16



                  5. Le «storage»
• Web Storage : simples paires clef/valeur,
  fonctionne à peu près partout
• Indexed Database : ajoute des
  index, ressemble à du
  NoSQL
• Web SQL Database : vraie
  base de données, non
  supportée par Firefox
  et IE, en «pause»
  au W3C
IppEvent «HTML5, Spring, NoSQL et mobilité» - 17



6. Pour les amateurs de jeux vidéos



         • 3D avec WebGL
         • Canvas
         • Audio et vidéo
IppEvent «HTML5, Spring, NoSQL et mobilité» - 18


       Nous devons sauter un trou technologique




• Le HTML5 reste très jeune : nombreux bugs et
  incompatibilités entre navigateurs
• Coder le HTML/CSS/JavaScript à la main est de
  plus en plus compliqué
• 2 à 3 ans pour que HTML5 mûrisse
IppEvent «HTML5, Spring, NoSQL et mobilité» - 19




  Le fait d'avoir intégré toutes ces
 nouveautés résulte dans des sites
plus performants côté client et plus
       agréables visuellement


               (moins de hacks pour réaliser le
                  même rendu graphique)
IppEvent «HTML5, Spring, NoSQL et mobilité» - 20




Quelques outils pour réussir
     votre application

       • jQuery
       • Twitter Bootstrap
       • LESS CSS
       • Mustache.js
IppEvent «HTML5, Spring, NoSQL et mobilité» - 21




    L 5             g         Q L                  le
 T M         r   in      oS                    b i
H         S p           N                    Mo
IppEvent «HTML5, Spring, NoSQL et mobilité» - 22




Fini le MVC et le Struts
        «à papa»




 Une application = une page HTML
  qui fait des appels REST/JSON
IppEvent «HTML5, Spring, NoSQL et mobilité» - 23



  Comment coder une
application REST/JSON ?
     En Java EE avec l’API JAX-RS
          Standard, plusieurs
       implémentations : Jersey ou CXF

     En Spring MVC REST + Jackson
                  Simple à intégrer et à
             utiliser avec Spring MVC
IppEvent «HTML5, Spring, NoSQL et mobilité» - 24




                    Pourquoi choisir Spring ?
• Performances : éprouvé depuis longtemps
    (singleton), plus rapide que Java EE
•   Léger : 15 à 30 Mo de RAM
•   Support de nombreuses bases
    NoSQL
•   Cycle de développement
    rapide : Jetty + Hotspot
•   Les abstractions et sous-projets :
    MVC, cache, sécurité, mobile, social...
•   Simple et peu cher à héberger
    (8 Euros/mois)
IppEvent «HTML5, Spring, NoSQL et mobilité» - 25




Codons la partie REST...
IppEvent «HTML5, Spring, NoSQL et mobilité» - 26


                         Exemple 1 : GET sur une entité




             {
                    1: 1: $.ajax({
                     2:       type: "GET",
                     3:       url: "rest/users/" + login + "/",
JavaScript



                     4:       dataType: "json",
                     5:       success: function(data) {
                     6:           userPicture.attr('src',
                     7:                'http://www.gravatar.com/avatar/' +
                     8:                data.gravatar + '?s=64');
                     9:            //...
                    10:            userTab.tab(SHOW_EFFECT);
                    11:     }
                    12: });




             {
             1:   @RequestMapping(value = "/rest/users/{login}",
             2:           method = RequestMethod.GET,
Java




             3:           produces = "application/json")
             4:   @ResponseBody
             5:   public User getUser(@PathVariable("login") String login) {
             6:       return userService.getUserProfileByLogin(login);
             7:   }
IppEvent «HTML5, Spring, NoSQL et mobilité» - 27


                             Exemple 2 : GET sur une collection




             {
                  1: $.ajax({
                  2:     type: "GET",
JavaScript


                  3:     url: "rest/users/" + login + "/tweets",
                  4:     dataType: "json",
                  5:     success: function(data) {
                  6:          makeTweetsList(data);
                  7:          mainTab.tab(SHOW_EFFECT);
                  8:     }
                  9: });




             {
                 1: @RequestMapping(value = "/rest/users/{login}/tweets",
                  2:          method = RequestMethod.GET,
                  3:          produces = "application/json")
                  4: @ResponseBody
Java




                  5: public Collection<Tweet> listTweets(
                  6:         @PathVariable("login") String login) {
                  7:
                  8:     return timelineService.getUserline(login, 20);
                  9: }
IppEvent «HTML5, Spring, NoSQL et mobilité» - 28


                          Exemple 3 : POST sur une entité




                {
                   1: 1: $.ajax({
                   2:     type: 'POST',
                   3:     url: "rest/users/" + login,
   JavaScript
                   4:     contentType: "application/json",
                   5:     data: JSON.stringify($("#updateUserForm")
                   6:         .serializeObject()),
                   7:
                   8:     dataType: "json",
                   9:     success: function() {
                  10:         $('#defaultTab').tab('show');
                  11:     }
                  12: });




       {
                1: @RequestMapping(value = "/rest/users/{login}",
                 2:         method = RequestMethod.POST,
                 3:         consumes = "application/json")
                 4: @ResponseBody
Java




                 5: public void updateUser(
                 6:         @PathVariable("login") String login,
                 7:         @RequestBody User user) {
                 8:     user.setLogin(login);
                 9:     userService.updateUser(user);
                10: }
IppEvent «HTML5, Spring, NoSQL et mobilité» - 29



                  Quel résultat ?




• Séparation du travail entre le designer et le
  développer
• Notre back-end va avoir un très grand
  nombre de requêtes REST...
IppEvent «HTML5, Spring, NoSQL et mobilité» - 30




    L 5             g         Q L                  le
 T M         r   in      oS                    b i
H         S p           N                    Mo
IppEvent «HTML5, Spring, NoSQL et mobilité» - 31


Comment tenir la charge au
  niveau de la couche de
       persistance ?
IppEvent «HTML5, Spring, NoSQL et mobilité» - 32


           Nouvelle abstraction «cache» de
                      Spring 3.1
 1:   @Cacheable("tweet-cache")
 2:   public Tweet findTweetById(String tweetId) {
 3:       return em.find(Tweet.class, tweetId);
 4:   }
 5:
 6:   @CacheEvict(value="tweet-cache",
 7:               key="#tweet.tweetId")
 8:   public void removeTweet(Tweet tweet) {
 9:       tweet.setRemoved(true);
10:       em.persist(tweet);
11:   }
IppEvent «HTML5, Spring, NoSQL et mobilité» - 33




                Le NoSQL avec Cassandra
• Cassandra : une base de données orientée
  colonne, très performante en lecture/écriture

• Pas de Single Point of Failure
• Montée en charge «élastique»
  sans effort

• Possibilité d’utiliser JPA (avec des limites)
• Mais pas de foreign keys, de transactions ou de
  sessions !
IppEvent «HTML5, Spring, NoSQL et mobilité» - 34



                 Exemple de code Cassandra/Hector
 1:   public void createUser(User user){
 2:       em.persist(user);
 3:   }
 4:
 5:   public Collection<String> getTimeline(String login, int size) {
 6:       ColumnSlice<String, String> result =
 7:           createSliceQuery(keyspaceOperator,
 8:           StringSerializer.get(), StringSerializer.get(),
 9:           StringSerializer.get())
10:               .setColumnFamily(TIMELINE_CF)
11:               .setKey(login)
12:               .setRange(null, null, true, size)
13:               .execute()
14:               .get();
15:
16:       Collection<String> tweetIds = new ArrayList<String>();
17:       for (HColumn<String, String> column :
18:                   result.getColumns()) {
19:
20:           tweetIds.add(column.getValue());
21:       }
22:       return tweetIds;
23:   }
IppEvent «HTML5, Spring, NoSQL et mobilité» - 35




                     Cassandra + le cache ?

•   Combiner les deux solutions
    précédentes est-il la solution ultime ?

•   Cassandra propose son propre système
    de cache interne : très performant et
    automatiquement distribué

•   Dans certains cas, l’utilisation d’un cache
    mémoire local en plus est intéressant :
    pas d’accès distant, plus de maîtrise

•   Sur Tatami nous avons un gain de
    performance d’environ 20%
IppEvent «HTML5, Spring, NoSQL et mobilité» - 36



Les problèmes causés par le
          NoSQL
       • Non consistance des
         données
       • Pas de transaction
       • Problèmes de réplication
         de cache
       • Retour de la couche
         «DAO»
IppEvent «HTML5, Spring, NoSQL et mobilité» - 37




         La recherche avec Elastic Search

• Un des problèmes de Cassandra : pas de recherche
    plein texte (dans la version Open Source)
•   Problème récurrent en bases de données SQL
    également : les «like» sont très lents


                               • Elastic Search
                                • Basé sur Lucene
                                • Architecture
                                        distribuée
IppEvent «HTML5, Spring, NoSQL et mobilité» - 38



               Nous avons donc nos données à 3
                           niveaux

                  Ehcache
 Application
     Java                                                   Cassandra
Jetty+Spring                 Hector
                  RE
                       ST
                         /JS
                             O
                                 N

                                     Elastic Search
IppEvent «HTML5, Spring, NoSQL et mobilité» - 39



Testons la montée en charge
Un test imparfait...
     • Avec JMeter sur la même
       machine que Jetty et Cassandra
     • Avec un disque dur 5400 rpm
       crypté

Un très bon résultat...
     • 1000 utilisateurs concurrents :
       750 requêtes/sec
     • Faible utilisation mémoire
      • 50 à 100 Mo en fonction des GC
      • Grossit à cause du cache
IppEvent «HTML5, Spring, NoSQL et mobilité» - 40




    L 5             g         Q L                          li té
 T M         r   in      oS                    b         i
H         S p           N                    Mo
IppEvent «HTML5, Spring, NoSQL et mobilité» - 41




            Pourquoi faire une application
                 mobile spécifique ?
   «Good mobile user experience
   requires a different design than
  what's needed to satisfy desktop
  users. Two designs, two sites, and
cross-linking to make it all work.» --
            Jakob Nielsen

       http://www.useit.com/
      alertbox/mobile-vs-full-
              sites.html
IppEvent «HTML5, Spring, NoSQL et mobilité» - 42




Comment faire une application
         mobile ?

             Aucun problème
              grâce à Spring
             MVC et à notre
               architecture
                  REST !
IppEvent «HTML5, Spring, NoSQL et mobilité» - 43



           Utilisation de Spring Mobile avec
          Spring MVC pour choisir quelle vue
                        renvoyer

                                          Vue «standard»
Requête
 HTTP     DispatcherServlet
             Spring MVC

                                             Vue «mobile»
          DeviceResolver
           Spring Mobile
IppEvent «HTML5, Spring, NoSQL et mobilité» - 44



             Il suffit de faire une vue spécialisée qui
                 utilise les mêmes services REST
               Req
             RES   uête
    Vue          T/JS s
                     ON
«standard»
                           Spring MVC
                              REST                         Cassandra
                                +
                             Jackson
  Vue
«mobile»         uê Ntes
             R eq O
                ST /JS
             RE
IppEvent «HTML5, Spring, NoSQL et mobilité» - 45




                  jQuery Mobile

• Version de jQuery spécifique pour
 smartphones et
 tablettes

• HTML5, cross-platform
• jQuery UI et ThemeRoller
• Intégration PhoneGap / Apache
 Cordova
IppEvent «HTML5, Spring, NoSQL et mobilité» - 46




Exemples d’écrans iPad et iPhone
IppEvent «HTML5, Spring, NoSQL et mobilité» - 47



   En conclusion...

L'interface graphique
La mobilité
Les performances
La productivité
IppEvent «HTML5, Spring, NoSQL et mobilité» - 48




           Merci !

   Tatami est disponible sur
           GitHub :
https://github.com/ippontech/tatami

Contenu connexe

Tendances

JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesIppon
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Ippon
 
Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014Jonathan Martin
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursIppon
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsantony_guilloteau
 
Breizhjug spring batch 2011
Breizhjug spring batch 2011Breizhjug spring batch 2011
Breizhjug spring batch 2011Olivier BAZOUD
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapresLaurent Tardif
 
Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017Jasmine Conseil
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationStéphane Traumat
 
Devops Introduction au mouvement
Devops Introduction au mouvementDevops Introduction au mouvement
Devops Introduction au mouvementUlrich VACHON
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open SourceIppon
 

Tendances (20)

JPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à AchillesJPA avec Cassandra, grâce à Achilles
JPA avec Cassandra, grâce à Achilles
 
Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Formation JPA Avancé / Hibernate gratuite par Ippon 2014
Formation JPA Avancé / Hibernate gratuite par Ippon 2014
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
ParisJUG Spring Boot
ParisJUG Spring BootParisJUG Spring Boot
ParisJUG Spring Boot
 
Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014Introduction au DevOps @SfPot 2014
Introduction au DevOps @SfPot 2014
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
 
Spring & SpringBatch FR
Spring & SpringBatch FRSpring & SpringBatch FR
Spring & SpringBatch FR
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
Au secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOpsAu secours, mon chef m'a demandé de passer au DevOps
Au secours, mon chef m'a demandé de passer au DevOps
 
Breizhjug spring batch 2011
Breizhjug spring batch 2011Breizhjug spring batch 2011
Breizhjug spring batch 2011
 
Agile lille 2015 devops etapres
Agile lille 2015 devops etapresAgile lille 2015 devops etapres
Agile lille 2015 devops etapres
 
Spring Batch ParisJUG
Spring Batch ParisJUG Spring Batch ParisJUG
Spring Batch ParisJUG
 
Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017Meet up paris 13 of jun 2017
Meet up paris 13 of jun 2017
 
Presentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub FoundationPresentation du socle technique Java open source Scub Foundation
Presentation du socle technique Java open source Scub Foundation
 
Devops Introduction au mouvement
Devops Introduction au mouvementDevops Introduction au mouvement
Devops Introduction au mouvement
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
 

En vedette

Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloudJulien Dubois
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015Julien Dubois
 
Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014vberetti
 
2010 presentation ippon_corp
2010 presentation ippon_corp2010 presentation ippon_corp
2010 presentation ippon_corpGeoffray Gruel
 
Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)Malakocktail
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Stephan Lagraulet
 
Accessibilité & e-recrutement
Accessibilité & e-recrutementAccessibilité & e-recrutement
Accessibilité & e-recrutementSébastien Delorme
 
DevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - SpinnakerDevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - SpinnakerStephan Lagraulet
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You ReadyGeoffray Gruel
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à CassandraVMware Tanzu
 
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairSpark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairAlexis Seigneurin
 
JHipster for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinarJulien Dubois
 
Devoxx : being productive with JHipster
Devoxx : being productive with JHipsterDevoxx : being productive with JHipster
Devoxx : being productive with JHipsterJulien Dubois
 
L'atelier e-Recrutement 2.0 (3eme partie)
L'atelier e-Recrutement 2.0 (3eme partie)L'atelier e-Recrutement 2.0 (3eme partie)
L'atelier e-Recrutement 2.0 (3eme partie)Patrice Malaurie
 
L'atelier e-Recrutement 2.0 (1ère partie)
L'atelier e-Recrutement 2.0 (1ère partie)L'atelier e-Recrutement 2.0 (1ère partie)
L'atelier e-Recrutement 2.0 (1ère partie)Patrice Malaurie
 
REX - Passage de CVS à Git
REX - Passage de CVS à GitREX - Passage de CVS à Git
REX - Passage de CVS à GitPierre Templier
 

En vedette (20)

Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéNouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilité
 
Développer et déployer dans le cloud
Développer et déployer dans le cloudDévelopper et déployer dans le cloud
Développer et déployer dans le cloud
 
De Devoxx au CAC40
De Devoxx au CAC40De Devoxx au CAC40
De Devoxx au CAC40
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015
 
Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014Ippevent - Regarde les instances tomber - 20 mai 2014
Ippevent - Regarde les instances tomber - 20 mai 2014
 
Pierre et Alexandre
Pierre et AlexandrePierre et Alexandre
Pierre et Alexandre
 
2010 presentation ippon_corp
2010 presentation ippon_corp2010 presentation ippon_corp
2010 presentation ippon_corp
 
Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)Malakocktail 72 (été 2013)
Malakocktail 72 (été 2013)
 
Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016Microservices IRL - Devoxx-fr 2016
Microservices IRL - Devoxx-fr 2016
 
Accessibilité & e-recrutement
Accessibilité & e-recrutementAccessibilité & e-recrutement
Accessibilité & e-recrutement
 
DevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - SpinnakerDevFest Nantes 2016 - Spinnaker
DevFest Nantes 2016 - Spinnaker
 
20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready20100225 Ippon Osgi Are You Ready
20100225 Ippon Osgi Are You Ready
 
Introduction à Cassandra
Introduction à CassandraIntroduction à Cassandra
Introduction à Cassandra
 
Spark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclairSpark, ou comment traiter des données à la vitesse de l'éclair
Spark, ou comment traiter des données à la vitesse de l'éclair
 
JHipster overview
JHipster overviewJHipster overview
JHipster overview
 
JHipster for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinar
 
Devoxx : being productive with JHipster
Devoxx : being productive with JHipsterDevoxx : being productive with JHipster
Devoxx : being productive with JHipster
 
L'atelier e-Recrutement 2.0 (3eme partie)
L'atelier e-Recrutement 2.0 (3eme partie)L'atelier e-Recrutement 2.0 (3eme partie)
L'atelier e-Recrutement 2.0 (3eme partie)
 
L'atelier e-Recrutement 2.0 (1ère partie)
L'atelier e-Recrutement 2.0 (1ère partie)L'atelier e-Recrutement 2.0 (1ère partie)
L'atelier e-Recrutement 2.0 (1ère partie)
 
REX - Passage de CVS à Git
REX - Passage de CVS à GitREX - Passage de CVS à Git
REX - Passage de CVS à Git
 

Similaire à Nouveau look pour une nouvelle vie, version spéciale Ippon

Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Tugdual Grall
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummiesMicrosoft
 
Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Claude Coulombe
 
Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011Montreal JUG
 
CV Ingénieur développeur JAVA/EE
CV Ingénieur développeur JAVA/EECV Ingénieur développeur JAVA/EE
CV Ingénieur développeur JAVA/EESid Ahmed Benkraoua
 
PowerPoint sur le Web 2.0
PowerPoint sur le Web 2.0PowerPoint sur le Web 2.0
PowerPoint sur le Web 2.0guest4ca1b
 
Slideshare - Web 2.0
Slideshare - Web 2.0Slideshare - Web 2.0
Slideshare - Web 2.0agirard003
 
Le Web 2.0
Le Web 2.0Le Web 2.0
Le Web 2.0clemdups
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflineDNG Consulting
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudTugdual Grall
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALYoussouph Barry
 
ACube : De la solution à l'industrialisation
ACube : De la solution à l'industrialisationACube : De la solution à l'industrialisation
ACube : De la solution à l'industrialisationpeguet
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)Restlet
 
Standards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étapeStandards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étapeFFFOD
 

Similaire à Nouveau look pour une nouvelle vie, version spéciale Ippon (20)

Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
TypeScript for dummies
TypeScript for dummiesTypeScript for dummies
TypeScript for dummies
 
Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011Présentation GWT au JUG Montréal 14 avril 2011
Présentation GWT au JUG Montréal 14 avril 2011
 
Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011Gwt présentation-jug-14avr2011
Gwt présentation-jug-14avr2011
 
Javavs net
Javavs netJavavs net
Javavs net
 
CV Ingénieur développeur JAVA/EE
CV Ingénieur développeur JAVA/EECV Ingénieur développeur JAVA/EE
CV Ingénieur développeur JAVA/EE
 
PowerPoint sur le Web 2.0
PowerPoint sur le Web 2.0PowerPoint sur le Web 2.0
PowerPoint sur le Web 2.0
 
Slideshare - Web 2.0
Slideshare - Web 2.0Slideshare - Web 2.0
Slideshare - Web 2.0
 
Le Web 2.0
Le Web 2.0Le Web 2.0
Le Web 2.0
 
Web 2.0
Web 2.0Web 2.0
Web 2.0
 
Présentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'OfflinePrésentation GWT et HTML 5 pour l'Offline
Présentation GWT et HTML 5 pour l'Offline
 
Devoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le CloudDevoxx: Tribulation d'un développeur sur le Cloud
Devoxx: Tribulation d'un développeur sur le Cloud
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPAL
 
ACube : De la solution à l'industrialisation
ACube : De la solution à l'industrialisationACube : De la solution à l'industrialisation
ACube : De la solution à l'industrialisation
 
CV_Bilel CHAOUADI
CV_Bilel CHAOUADICV_Bilel CHAOUADI
CV_Bilel CHAOUADI
 
Gwt intro-101
Gwt intro-101Gwt intro-101
Gwt intro-101
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
Standards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étapeStandards e-learning - xAPI : Point d’étape
Standards e-learning - xAPI : Point d’étape
 

Plus de Julien Dubois

Accessibility in the UK
Accessibility in the UKAccessibility in the UK
Accessibility in the UKJulien Dubois
 
Java on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJava on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJulien Dubois
 
JHipster Code 2020 keynote
JHipster Code 2020 keynoteJHipster Code 2020 keynote
JHipster Code 2020 keynoteJulien Dubois
 
Running Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudRunning Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudJulien Dubois
 
JHipster Conf 2019 English keynote
JHipster Conf 2019 English keynoteJHipster Conf 2019 English keynote
JHipster Conf 2019 English keynoteJulien Dubois
 
JHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJulien Dubois
 
Créer et développer une communauté Open Source
Créer et développer une communauté Open SourceCréer et développer une communauté Open Source
Créer et développer une communauté Open SourceJulien Dubois
 
JHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJulien Dubois
 
Devoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipsterDevoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipsterJulien Dubois
 
JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)Julien Dubois
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Julien Dubois
 
Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerJulien Dubois
 
Performance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationPerformance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationJulien Dubois
 
Developing modular Java applications
Developing modular Java applicationsDeveloping modular Java applications
Developing modular Java applicationsJulien Dubois
 

Plus de Julien Dubois (15)

Accessibility in the UK
Accessibility in the UKAccessibility in the UK
Accessibility in the UK
 
Java on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introductionJava on Azure "Back to Basics" series - databases introduction
Java on Azure "Back to Basics" series - databases introduction
 
JHipster Code 2020 keynote
JHipster Code 2020 keynoteJHipster Code 2020 keynote
JHipster Code 2020 keynote
 
Running Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloudRunning Spring Boot microservices in the cloud
Running Spring Boot microservices in the cloud
 
Spring on Azure
Spring on AzureSpring on Azure
Spring on Azure
 
JHipster Conf 2019 English keynote
JHipster Conf 2019 English keynoteJHipster Conf 2019 English keynote
JHipster Conf 2019 English keynote
 
JHipster Conf 2019 French keynote
JHipster Conf 2019 French keynoteJHipster Conf 2019 French keynote
JHipster Conf 2019 French keynote
 
Créer et développer une communauté Open Source
Créer et développer une communauté Open SourceCréer et développer une communauté Open Source
Créer et développer une communauté Open Source
 
JHipster Conf 2018 Quiz
JHipster Conf 2018 QuizJHipster Conf 2018 Quiz
JHipster Conf 2018 Quiz
 
Devoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipsterDevoxx Belgium 2017 - easy microservices with JHipster
Devoxx Belgium 2017 - easy microservices with JHipster
 
JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)JHipster overview and roadmap (August 2017)
JHipster overview and roadmap (August 2017)
 
Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017Être productif avec JHipster - Devoxx France 2017
Être productif avec JHipster - Devoxx France 2017
 
Gérer son environnement de développement avec Docker
Gérer son environnement de développement avec DockerGérer son environnement de développement avec Docker
Gérer son environnement de développement avec Docker
 
Performance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample applicationPerformance tuning the Spring Pet Clinic sample application
Performance tuning the Spring Pet Clinic sample application
 
Developing modular Java applications
Developing modular Java applicationsDeveloping modular Java applications
Developing modular Java applications
 

Nouveau look pour une nouvelle vie, version spéciale Ippon

  • 1. IppEvent «HTML5, Spring, NoSQL et mobilité» - 1 Nouveau look pour une nouvelle vie HTML5+Spring+NoSQL+Mobile Julien Dubois @juliendubois
  • 2. Formation Spring - 2 Objectif : réaliser une application Java moderne, sans (trop) céder à la mode Pas de framework inconnu ou propriétaire Des technologies standards ou largement répandues Pas de langage alternatif que personne ne comprend Du code simple et performant Le XML, ce n’est pas sale
  • 3. IppEvent «HTML5, Spring, NoSQL et mobilité» - 3 Speaker • Développeur Java depuis 13 ans • A commencé avec les EJB 1.0 • Code toujours chez les clients • Connait bien Spring Julien Dubois • Co-auteur de «Spring par Directeur du Conseil et du Développement la pratique» Ippon Technologies http://www.ippon.fr • Ancien directeur de SpringSource France • Directeur du pôle conseil chez Ippon Technologies Suivez-moi sur Twitter : @juliendubois
  • 4. IppEvent «HTML5, Spring, NoSQL et mobilité» - 4 Nous allons nous baser sur Tatami, une application HTML5+Spring+NoSQL+Mobile
  • 5. IppEvent «HTML5, Spring, NoSQL et mobilité» - 5
  • 6. IppEvent «HTML5, Spring, NoSQL et mobilité» - 6 Technologies utilisées dans Tatami • HTML5 : Twitter Bootstrap, Less, jQuery • Spring 3.1: Spring MVC Rest, configuration Java, Spring Mobile • NoSQL : Cassandra, Hector, Elastic Search • Mobilité : JQuery Mobile
  • 7. IppEvent «HTML5, Spring, NoSQL et mobilité» - 7 L’ensemble du code est disponible sur GitHub https://github.com/ippontech/tatami
  • 8. IppEvent «HTML5, Spring, NoSQL et mobilité» - 8 L 5 g Q L le T M r in oS b i H S p N Mo
  • 9. IppEvent «HTML5, Spring, NoSQL et mobilité» - 9 Que propose HTML5 ? Attention : cette conférence est orientée «entreprise», pas «jeu vidéo»
  • 10. IppEvent «HTML5, Spring, NoSQL et mobilité» - 10 1. De nouveaux types de champs (1/2) 1: <input id="emailInput" 2: name="email" 3: type="email" 4: required="required" 5: placeholder="Enter e-mail..."/> 6: 7: <input id="quantityInput" 8: name="quantity" 9: type="number" 10: min="1" 11: max="5" />
  • 11. IppEvent «HTML5, Spring, NoSQL et mobilité» - 11 1. De nouveaux types de champs (2/2) • Ces champs sont ensuite automatiquement validés par le navigateur • Sur mobile/tablette, le clavier correspondant au champ est activé • Attention, le support est inégal en fonction des navigateurs
  • 12. IppEvent «HTML5, Spring, NoSQL et mobilité» - 12 2. Le SVG • Permet de faire du dessin vectoriel • Supporte les événements JavaScript !!! • Ne fonctionne pas sous IE (utilisation de VML) • Nombreuses libraires (raphael.js, Google Chart Tools, HighCharts...)
  • 13. IppEvent «HTML5, Spring, NoSQL et mobilité» - 13
  • 14. IppEvent «HTML5, Spring, NoSQL et mobilité» - 14 3. CSS 3 een 2D e t en 3D tions de text • Tran sforma • Transitions et animations • Web Fonts • Bords arrondis, ombres, opacité ...
  • 15. IppEvent «HTML5, Spring, NoSQL et mobilité» - 15 4. Les WebSockets Trop jeune pour être utilisé concrètement : • Support inégal des navigateurs, • Support récent et non standard des serveurs d’applications • Mauvais support des proxys • Compliqué à débugger • Contesté au sein même de l’IETF...
  • 16. IppEvent «HTML5, Spring, NoSQL et mobilité» - 16 5. Le «storage» • Web Storage : simples paires clef/valeur, fonctionne à peu près partout • Indexed Database : ajoute des index, ressemble à du NoSQL • Web SQL Database : vraie base de données, non supportée par Firefox et IE, en «pause» au W3C
  • 17. IppEvent «HTML5, Spring, NoSQL et mobilité» - 17 6. Pour les amateurs de jeux vidéos • 3D avec WebGL • Canvas • Audio et vidéo
  • 18. IppEvent «HTML5, Spring, NoSQL et mobilité» - 18 Nous devons sauter un trou technologique • Le HTML5 reste très jeune : nombreux bugs et incompatibilités entre navigateurs • Coder le HTML/CSS/JavaScript à la main est de plus en plus compliqué • 2 à 3 ans pour que HTML5 mûrisse
  • 19. IppEvent «HTML5, Spring, NoSQL et mobilité» - 19 Le fait d'avoir intégré toutes ces nouveautés résulte dans des sites plus performants côté client et plus agréables visuellement (moins de hacks pour réaliser le même rendu graphique)
  • 20. IppEvent «HTML5, Spring, NoSQL et mobilité» - 20 Quelques outils pour réussir votre application • jQuery • Twitter Bootstrap • LESS CSS • Mustache.js
  • 21. IppEvent «HTML5, Spring, NoSQL et mobilité» - 21 L 5 g Q L le T M r in oS b i H S p N Mo
  • 22. IppEvent «HTML5, Spring, NoSQL et mobilité» - 22 Fini le MVC et le Struts «à papa» Une application = une page HTML qui fait des appels REST/JSON
  • 23. IppEvent «HTML5, Spring, NoSQL et mobilité» - 23 Comment coder une application REST/JSON ? En Java EE avec l’API JAX-RS Standard, plusieurs implémentations : Jersey ou CXF En Spring MVC REST + Jackson Simple à intégrer et à utiliser avec Spring MVC
  • 24. IppEvent «HTML5, Spring, NoSQL et mobilité» - 24 Pourquoi choisir Spring ? • Performances : éprouvé depuis longtemps (singleton), plus rapide que Java EE • Léger : 15 à 30 Mo de RAM • Support de nombreuses bases NoSQL • Cycle de développement rapide : Jetty + Hotspot • Les abstractions et sous-projets : MVC, cache, sécurité, mobile, social... • Simple et peu cher à héberger (8 Euros/mois)
  • 25. IppEvent «HTML5, Spring, NoSQL et mobilité» - 25 Codons la partie REST...
  • 26. IppEvent «HTML5, Spring, NoSQL et mobilité» - 26 Exemple 1 : GET sur une entité { 1: 1: $.ajax({ 2: type: "GET", 3: url: "rest/users/" + login + "/", JavaScript 4: dataType: "json", 5: success: function(data) { 6: userPicture.attr('src', 7: 'http://www.gravatar.com/avatar/' + 8: data.gravatar + '?s=64'); 9: //... 10: userTab.tab(SHOW_EFFECT); 11: } 12: }); { 1: @RequestMapping(value = "/rest/users/{login}", 2: method = RequestMethod.GET, Java 3: produces = "application/json") 4: @ResponseBody 5: public User getUser(@PathVariable("login") String login) { 6: return userService.getUserProfileByLogin(login); 7: }
  • 27. IppEvent «HTML5, Spring, NoSQL et mobilité» - 27 Exemple 2 : GET sur une collection { 1: $.ajax({ 2: type: "GET", JavaScript 3: url: "rest/users/" + login + "/tweets", 4: dataType: "json", 5: success: function(data) { 6: makeTweetsList(data); 7: mainTab.tab(SHOW_EFFECT); 8: } 9: }); { 1: @RequestMapping(value = "/rest/users/{login}/tweets", 2: method = RequestMethod.GET, 3: produces = "application/json") 4: @ResponseBody Java 5: public Collection<Tweet> listTweets( 6: @PathVariable("login") String login) { 7: 8: return timelineService.getUserline(login, 20); 9: }
  • 28. IppEvent «HTML5, Spring, NoSQL et mobilité» - 28 Exemple 3 : POST sur une entité { 1: 1: $.ajax({ 2: type: 'POST', 3: url: "rest/users/" + login, JavaScript 4: contentType: "application/json", 5: data: JSON.stringify($("#updateUserForm") 6: .serializeObject()), 7: 8: dataType: "json", 9: success: function() { 10: $('#defaultTab').tab('show'); 11: } 12: }); { 1: @RequestMapping(value = "/rest/users/{login}", 2: method = RequestMethod.POST, 3: consumes = "application/json") 4: @ResponseBody Java 5: public void updateUser( 6: @PathVariable("login") String login, 7: @RequestBody User user) { 8: user.setLogin(login); 9: userService.updateUser(user); 10: }
  • 29. IppEvent «HTML5, Spring, NoSQL et mobilité» - 29 Quel résultat ? • Séparation du travail entre le designer et le développer • Notre back-end va avoir un très grand nombre de requêtes REST...
  • 30. IppEvent «HTML5, Spring, NoSQL et mobilité» - 30 L 5 g Q L le T M r in oS b i H S p N Mo
  • 31. IppEvent «HTML5, Spring, NoSQL et mobilité» - 31 Comment tenir la charge au niveau de la couche de persistance ?
  • 32. IppEvent «HTML5, Spring, NoSQL et mobilité» - 32 Nouvelle abstraction «cache» de Spring 3.1 1: @Cacheable("tweet-cache") 2: public Tweet findTweetById(String tweetId) { 3: return em.find(Tweet.class, tweetId); 4: } 5: 6: @CacheEvict(value="tweet-cache", 7: key="#tweet.tweetId") 8: public void removeTweet(Tweet tweet) { 9: tweet.setRemoved(true); 10: em.persist(tweet); 11: }
  • 33. IppEvent «HTML5, Spring, NoSQL et mobilité» - 33 Le NoSQL avec Cassandra • Cassandra : une base de données orientée colonne, très performante en lecture/écriture • Pas de Single Point of Failure • Montée en charge «élastique» sans effort • Possibilité d’utiliser JPA (avec des limites) • Mais pas de foreign keys, de transactions ou de sessions !
  • 34. IppEvent «HTML5, Spring, NoSQL et mobilité» - 34 Exemple de code Cassandra/Hector 1: public void createUser(User user){ 2: em.persist(user); 3: } 4: 5: public Collection<String> getTimeline(String login, int size) { 6: ColumnSlice<String, String> result = 7: createSliceQuery(keyspaceOperator, 8: StringSerializer.get(), StringSerializer.get(), 9: StringSerializer.get()) 10: .setColumnFamily(TIMELINE_CF) 11: .setKey(login) 12: .setRange(null, null, true, size) 13: .execute() 14: .get(); 15: 16: Collection<String> tweetIds = new ArrayList<String>(); 17: for (HColumn<String, String> column : 18: result.getColumns()) { 19: 20: tweetIds.add(column.getValue()); 21: } 22: return tweetIds; 23: }
  • 35. IppEvent «HTML5, Spring, NoSQL et mobilité» - 35 Cassandra + le cache ? • Combiner les deux solutions précédentes est-il la solution ultime ? • Cassandra propose son propre système de cache interne : très performant et automatiquement distribué • Dans certains cas, l’utilisation d’un cache mémoire local en plus est intéressant : pas d’accès distant, plus de maîtrise • Sur Tatami nous avons un gain de performance d’environ 20%
  • 36. IppEvent «HTML5, Spring, NoSQL et mobilité» - 36 Les problèmes causés par le NoSQL • Non consistance des données • Pas de transaction • Problèmes de réplication de cache • Retour de la couche «DAO»
  • 37. IppEvent «HTML5, Spring, NoSQL et mobilité» - 37 La recherche avec Elastic Search • Un des problèmes de Cassandra : pas de recherche plein texte (dans la version Open Source) • Problème récurrent en bases de données SQL également : les «like» sont très lents • Elastic Search • Basé sur Lucene • Architecture distribuée
  • 38. IppEvent «HTML5, Spring, NoSQL et mobilité» - 38 Nous avons donc nos données à 3 niveaux Ehcache Application Java Cassandra Jetty+Spring Hector RE ST /JS O N Elastic Search
  • 39. IppEvent «HTML5, Spring, NoSQL et mobilité» - 39 Testons la montée en charge Un test imparfait... • Avec JMeter sur la même machine que Jetty et Cassandra • Avec un disque dur 5400 rpm crypté Un très bon résultat... • 1000 utilisateurs concurrents : 750 requêtes/sec • Faible utilisation mémoire • 50 à 100 Mo en fonction des GC • Grossit à cause du cache
  • 40. IppEvent «HTML5, Spring, NoSQL et mobilité» - 40 L 5 g Q L li té T M r in oS b i H S p N Mo
  • 41. IppEvent «HTML5, Spring, NoSQL et mobilité» - 41 Pourquoi faire une application mobile spécifique ? «Good mobile user experience requires a different design than what's needed to satisfy desktop users. Two designs, two sites, and cross-linking to make it all work.» -- Jakob Nielsen http://www.useit.com/ alertbox/mobile-vs-full- sites.html
  • 42. IppEvent «HTML5, Spring, NoSQL et mobilité» - 42 Comment faire une application mobile ? Aucun problème grâce à Spring MVC et à notre architecture REST !
  • 43. IppEvent «HTML5, Spring, NoSQL et mobilité» - 43 Utilisation de Spring Mobile avec Spring MVC pour choisir quelle vue renvoyer Vue «standard» Requête HTTP DispatcherServlet Spring MVC Vue «mobile» DeviceResolver Spring Mobile
  • 44. IppEvent «HTML5, Spring, NoSQL et mobilité» - 44 Il suffit de faire une vue spécialisée qui utilise les mêmes services REST Req RES uête Vue T/JS s ON «standard» Spring MVC REST Cassandra + Jackson Vue «mobile» uê Ntes R eq O ST /JS RE
  • 45. IppEvent «HTML5, Spring, NoSQL et mobilité» - 45 jQuery Mobile • Version de jQuery spécifique pour smartphones et tablettes • HTML5, cross-platform • jQuery UI et ThemeRoller • Intégration PhoneGap / Apache Cordova
  • 46. IppEvent «HTML5, Spring, NoSQL et mobilité» - 46 Exemples d’écrans iPad et iPhone
  • 47. IppEvent «HTML5, Spring, NoSQL et mobilité» - 47 En conclusion... L'interface graphique La mobilité Les performances La productivité
  • 48. IppEvent «HTML5, Spring, NoSQL et mobilité» - 48 Merci ! Tatami est disponible sur GitHub : https://github.com/ippontech/tatami