SlideShare a Scribd company logo
1 of 52
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 1




        HTML5
          +
        Spring
          +
        NoSQL
          +
        Mobilité
Julien Dubois
@juliendubois
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 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
JugSummerCamp 2012 «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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 4




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




Technologies utilisées dans Tatami

• HTML5 :
  Twitter Bootstrap, Backbone.JS,
  jQuery

• Spring 3.1:
  Spring MVC Rest, configuration Java

• NoSQL : Cassandra, Hector, Elastic
  Search

• Mobilité : rien :-)
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 8




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




Partie I : le HTML5
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 10




Que propose HTML5 ?

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




       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" />
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 12



       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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 13



                       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...)
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 14
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 15




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

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




                   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...
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 17



                  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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 18



6. Pour les amateurs de jeux vidéos



         • 3D avec WebGL
         • Canvas
         • Audio et vidéo
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 19


       Nous devons sauter un trou technologique




• Le HTML5 reste 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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 20




Quelques outils pour réussir
     votre application

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




Twitter Bootstrap

 • Framework CSS/JavaScript
 • Open Source, développé par
   Twitter

 • Fourni des grilles de
   présentation, des
   composants, des plugins
   JavaScript

 • Permet de faire du
   «responsive design»
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 22




                        Backbone.js
• Framework MVC JavaScript
• Open Source, développé par DocumentCloud
• Modèles avec des paires clef/valeur, collections
  évoluées
• Se connecte
  facilement à un
  back-end REST

• Nécessite l’utilisateur d’un
  moteur de template pour
  rendre les vues (underscore.js)
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 23




Partie II : Spring
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 24




Fini le MVC et le Struts
        «à papa»




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



  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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 26




                    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)
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 27




Codons la partie REST...
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 28


                         Exemple 1 : Affichage d’un utilisateur




         {
                   1:   app.Model.ProfileModel = Backbone.Model.extend({
                   2:     defaults: {
                   3:        'firstName': '',
                   4:        'lastName': ''
JavaScript


                   5:     },
                   6:     url : function(){
                   7:        return '/rest/users/show?screen_name=' + username;
                   8:     }
                   9:   });
                  10:   var profileView = new app.View.ProfileView({
                  11:        model:new app.Model.ProfileModel()
                  12:   });
                  13:   $('#profileContent').html(profileView.render());




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




             4:   @ResponseBody
             5:   public User getUser(
             6:       @RequestParam("screen_name") String username) {
             7:       return userService.getUserProfileByUsername(username);
             8:   }
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 29


                            Exemple 2 : Mise à jour du status




        {
                    1:   app.Model.StatusUpdateModel = Backbone.Model.extend({
                    2:     url : '/tatami/rest/statuses/update'
                    3:   });
JavaScript



                    4:
                    5:   var status = new app.Model.StatusUpdateModel();
                    6:
                    7:   status.set("content", ${"#statusContent"});
                    8:
                    9:   status.save(null,{
                   10:         success: function(model, response) {
                   11:             app.trigger('refreshTimeline');
                   12:         },
                   13:    });




             {
                 1: @RequestMapping(value = "/rest/statuses/update",
                 2:         method = RequestMethod.POST)
Java




                 3: public void postStatus(@RequestBody Status status) {
                 4:     statusUpdateService.postStatus(status);
                 5: }
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 30



                  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...
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» -




Partie III : NoSQL
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 32


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


           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:   }
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 34




                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 de grosses limites)
• Mais pas de foreign keys, de transactions ou de
  sessions !
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 35



                 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:   }
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 36



Les problèmes causés par
       Cassandra

     • Complexe à héberger
     • Non consistance des
       données
     • Pas de transaction
     • Retour de la couche
       «DAO»
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 37




                     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%
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 38



                  Le moteur de recherche
•   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
•   Deux implémentations de moteur de
    recherche dans Tatami
    •   ElasticSearch (prod «avancée») ou Lucene
        (dév ou prod «normale»)
    •   Simple à mettre en place grâce à Spring
        (implémentations différentes du même
        service)
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 39




               ElasticSearch vs Lucene




• ElasticSearch                 • Lucene
 • Basé sur Lucene               • Impossible à
 • Architecture                     distribuer
    distribuée                   • Simple à mettre
 • Compliqué à                            en place
    héberger
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 40


           Abstraction «async» de Spring
                    avec Lucene
 1: @Async                                               Insertion dans
 2: public void addStatus(Status status) {
 3:    Document document = new Document();                 une thread
 4:
 5:
       document.add(new Field("content",
           status.getContent(),                             séparée
 6:        Field.Store.NO,
 7:        Field.Index.ANALYZED));
 8:
 9:    indexWriter.addDocument(document);
10:    indexWriter.commit();
11: }



1: @Scheduled(fixedDelay = 10000)
                                                Index mis à jour en
2: public void reloadIndexReader() {            «quasi temps réél»
3:      searcherManager.maybeRefresh();
4: }
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 41




Partie IV : Mobilité
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 42




• LA question à se poser : une
  application spécifique ou du
  «responsive design» ?

 • Nous avons fait les deux sur
    Tatami...
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 43




            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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 44



           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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 45



             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
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 46




                     jQuery Mobile

•   Version de jQuery spécifique
    pour smartphones et
    tablettes

•   HTML5,
    cross-platform

•   jQuery UI et ThemeRoller
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 47




 Problèmes rencontrés

• L’application mobile est toujours en
  retard fonctionnellement
• Compliqué à tester et à maintenir
• Arrivée des tablettes : il faut faire
  une 3ème version ??
• Gestion des thèmes impossible à
  gérer entre toutes ces versions
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 48




           Pourquoi faire du
         «responsive design» ?
• Une application unique
 • S’adapte «automatiquement» au
    support
 • Plus de problème de maintenance,
    de gestion des thèmes, etc...
 • Site «complet» pour
    tout le monde
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 49



                 Le résultat
• Etonnamment simple à réaliser avec
    Twitter Bootstrap
•   Tatami fonctionne sur desktop, mobile
    (iPhone, Android, Blackberry, Windows
    Phone) ou tablette (iPad, Android)...
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 50




               Problèmes rencontrés

• Pas de support «natif», par exemple les notifications
• Quelques contraintes à connaitre
 • Fini les «onmouseover»
    (ne fonctionnent
    pas en mode
    «touch»)
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 51



          En conclusion...
• HTML5 : capacités impressionnantes,
  nous ne sommes qu’au début

• Spring 3.1: performance et simplicité
  de développement

• NoSQL : ouvre un monde de
  possibilités, encore complexe à
  utiliser

• Mobilité : application native vs.
  responsive design
JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 52




           Merci !
   Tatami est hébergé sur :
      https://tatami.ippon.fr


Le code source est disponible
        sur GitHub :
https://github.com/ippontech/tatami

More Related Content

What's hot

Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes AgilesIppon
 
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
 
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
 
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
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursIppon
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open SourceIppon
 
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
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...Jasmine Conseil
 
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
 
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
 
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011Henri Gomez
 
Breizhjug spring batch 2011
Breizhjug spring batch 2011Breizhjug spring batch 2011
Breizhjug spring batch 2011Olivier BAZOUD
 
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
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Ippon
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaOlivier BAZOUD
 

What's hot (20)

Presentation Rex Methodes Agiles
Presentation Rex Methodes AgilesPresentation Rex Methodes Agiles
Presentation Rex Methodes Agiles
 
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
 
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
 
Spring Batch - concepts de base
Spring Batch - concepts de baseSpring Batch - concepts de base
Spring Batch - concepts de base
 
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
 
Agilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeursAgilité, n’oublions pas les valeurs
Agilité, n’oublions pas les valeurs
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
Seminaire Portail Open Source
Seminaire Portail Open SourceSeminaire Portail Open Source
Seminaire Portail Open Source
 
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
 
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et  ...
Livraison en continue avec l'outillage devops - Jenkins, Ansible, Docker et ...
 
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
 
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
 
Spring Batch ParisJUG
Spring Batch ParisJUG Spring Batch ParisJUG
Spring Batch ParisJUG
 
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
DevOps - Retour d’expérience - AlpesJug du 20 Septembre 2011
 
Breizhjug spring batch 2011
Breizhjug spring batch 2011Breizhjug spring batch 2011
Breizhjug spring batch 2011
 
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
 
Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon Formation Gratuite Total Tests par les experts Java Ippon
Formation Gratuite Total Tests par les experts Java Ippon
 
The DevOps Wonder @ PHPTour Lyon 2014
The DevOps Wonder @ PHPTour Lyon 2014The DevOps Wonder @ PHPTour Lyon 2014
The DevOps Wonder @ PHPTour Lyon 2014
 
WS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - XebiaWS User Group - Spring Batch - Xebia
WS User Group - Spring Batch - Xebia
 
Spring Batch Avance
Spring Batch AvanceSpring Batch Avance
Spring Batch Avance
 

Similar to 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é
Nouveau look pour une nouvelle vie : HTML5, Spring, NoSQL et mobilitéJulien Dubois
 
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
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALYoussouph Barry
 
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
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
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
 
Ionic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,SassIonic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,Sassmarwa baich
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System SARL
 
Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5davrous
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System SARL
 
Webinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft IntelWebinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft Inteldavrous
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJSVISEO
 
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
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreStéphane Traumat
 
Programmer en html5, css 3 et java script (70 480)
Programmer en html5, css 3 et java script (70 480)Programmer en html5, css 3 et java script (70 480)
Programmer en html5, css 3 et java script (70 480)Chamseddine Ouerhani
 
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
 

Similar to HTML5, Spring, NoSQL et mobilité (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é
 
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
 
CV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPALCV_Youssouph_BARRY_DRUPAL
CV_Youssouph_BARRY_DRUPAL
 
CV REBAI Hamida
CV REBAI HamidaCV REBAI Hamida
CV REBAI Hamida
 
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
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
CV_Bilel CHAOUADI
CV_Bilel CHAOUADICV_Bilel CHAOUADI
CV_Bilel CHAOUADI
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
Ionic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,SassIonic, AngularJS,Cordova,NodeJS,Sass
Ionic, AngularJS,Cordova,NodeJS,Sass
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stack
 
Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5Les défis d’une application mobile multi-périphériques avec HTML5
Les défis d’une application mobile multi-périphériques avec HTML5
 
Calculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stackCalculus System Academy:Devenez un développeur Full stack
Calculus System Academy:Devenez un développeur Full stack
 
resume
resumeresume
resume
 
Webinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft IntelWebinar HTML5 Microsoft Intel
Webinar HTML5 Microsoft Intel
 
Aperçu de RequireJS
Aperçu de RequireJSAperçu de RequireJS
Aperçu de RequireJS
 
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
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libre
 
Javavs net
Javavs netJavavs net
Javavs net
 
Programmer en html5, css 3 et java script (70 480)
Programmer en html5, css 3 et java script (70 480)Programmer en html5, css 3 et java script (70 480)
Programmer en html5, css 3 et java script (70 480)
 
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
 

More from 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
 
Devoxx : being productive with JHipster
Devoxx : being productive with JHipsterDevoxx : being productive with JHipster
Devoxx : being productive with JHipsterJulien Dubois
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015Julien 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 for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinarJulien 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
 

More from Julien Dubois (20)

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
 
Devoxx : being productive with JHipster
Devoxx : being productive with JHipsterDevoxx : being productive with JHipster
Devoxx : being productive with JHipster
 
JHipster overview
JHipster overviewJHipster overview
JHipster overview
 
JHipster à Devoxx 2015
JHipster à Devoxx 2015JHipster à Devoxx 2015
JHipster à Devoxx 2015
 
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
 
JHipster for Spring Boot webinar
JHipster for Spring Boot webinarJHipster for Spring Boot webinar
JHipster for Spring Boot webinar
 
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
 

HTML5, Spring, NoSQL et mobilité

  • 1. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 1 HTML5 + Spring + NoSQL + Mobilité Julien Dubois @juliendubois
  • 2. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 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. JugSummerCamp 2012 «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. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 4 Nous allons nous baser sur Tatami, une application HTML5+Spring+NoSQL+Mobile
  • 5. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 5
  • 6. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 6
  • 7. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 7 Technologies utilisées dans Tatami • HTML5 : Twitter Bootstrap, Backbone.JS, jQuery • Spring 3.1: Spring MVC Rest, configuration Java • NoSQL : Cassandra, Hector, Elastic Search • Mobilité : rien :-)
  • 8. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 8 L’ensemble du code est disponible sur GitHub https://github.com/ippontech/tatami
  • 9. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - Partie I : le HTML5
  • 10. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 10 Que propose HTML5 ? Attention : cette conférence est orientée «entreprise», pas «jeu vidéo»
  • 11. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 11 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" />
  • 12. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 12 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
  • 13. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 13 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...)
  • 14. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 14
  • 15. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 15 3. CSS 3 een 2D e t en 3D tions de text • Tran sforma • Transitions et animations • Web Fonts • Bords arrondis, ombres, opacité ...
  • 16. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 16 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...
  • 17. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 17 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
  • 18. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 18 6. Pour les amateurs de jeux vidéos • 3D avec WebGL • Canvas • Audio et vidéo
  • 19. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 19 Nous devons sauter un trou technologique • Le HTML5 reste 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
  • 20. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 20 Quelques outils pour réussir votre application • jQuery • Twitter Bootstrap • Backbone.js • Underscore.js • LESS CSS • Mustache.js
  • 21. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 21 Twitter Bootstrap • Framework CSS/JavaScript • Open Source, développé par Twitter • Fourni des grilles de présentation, des composants, des plugins JavaScript • Permet de faire du «responsive design»
  • 22. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 22 Backbone.js • Framework MVC JavaScript • Open Source, développé par DocumentCloud • Modèles avec des paires clef/valeur, collections évoluées • Se connecte facilement à un back-end REST • Nécessite l’utilisateur d’un moteur de template pour rendre les vues (underscore.js)
  • 23. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 23 Partie II : Spring
  • 24. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 24 Fini le MVC et le Struts «à papa» Une application = une page HTML qui fait des appels REST/JSON
  • 25. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 25 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
  • 26. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 26 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)
  • 27. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 27 Codons la partie REST...
  • 28. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 28 Exemple 1 : Affichage d’un utilisateur { 1: app.Model.ProfileModel = Backbone.Model.extend({ 2: defaults: { 3: 'firstName': '', 4: 'lastName': '' JavaScript 5: }, 6: url : function(){ 7: return '/rest/users/show?screen_name=' + username; 8: } 9: }); 10: var profileView = new app.View.ProfileView({ 11: model:new app.Model.ProfileModel() 12: }); 13: $('#profileContent').html(profileView.render()); { 1: @RequestMapping(value = "/rest/users/show", 2: method = RequestMethod.GET, 3: produces = "application/json") Java 4: @ResponseBody 5: public User getUser( 6: @RequestParam("screen_name") String username) { 7: return userService.getUserProfileByUsername(username); 8: }
  • 29. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 29 Exemple 2 : Mise à jour du status { 1: app.Model.StatusUpdateModel = Backbone.Model.extend({ 2: url : '/tatami/rest/statuses/update' 3: }); JavaScript 4: 5: var status = new app.Model.StatusUpdateModel(); 6: 7: status.set("content", ${"#statusContent"}); 8: 9: status.save(null,{ 10: success: function(model, response) { 11: app.trigger('refreshTimeline'); 12: }, 13: }); { 1: @RequestMapping(value = "/rest/statuses/update", 2: method = RequestMethod.POST) Java 3: public void postStatus(@RequestBody Status status) { 4: statusUpdateService.postStatus(status); 5: }
  • 30. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 30 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...
  • 31. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - Partie III : NoSQL
  • 32. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 32 Comment tenir la charge au niveau de la couche de persistance ?
  • 33. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 33 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: }
  • 34. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 34 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 de grosses limites) • Mais pas de foreign keys, de transactions ou de sessions !
  • 35. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 35 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: }
  • 36. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 36 Les problèmes causés par Cassandra • Complexe à héberger • Non consistance des données • Pas de transaction • Retour de la couche «DAO»
  • 37. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 37 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%
  • 38. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 38 Le moteur de recherche • 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 • Deux implémentations de moteur de recherche dans Tatami • ElasticSearch (prod «avancée») ou Lucene (dév ou prod «normale») • Simple à mettre en place grâce à Spring (implémentations différentes du même service)
  • 39. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 39 ElasticSearch vs Lucene • ElasticSearch • Lucene • Basé sur Lucene • Impossible à • Architecture distribuer distribuée • Simple à mettre • Compliqué à en place héberger
  • 40. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 40 Abstraction «async» de Spring avec Lucene 1: @Async Insertion dans 2: public void addStatus(Status status) { 3: Document document = new Document(); une thread 4: 5: document.add(new Field("content", status.getContent(), séparée 6: Field.Store.NO, 7: Field.Index.ANALYZED)); 8: 9: indexWriter.addDocument(document); 10: indexWriter.commit(); 11: } 1: @Scheduled(fixedDelay = 10000) Index mis à jour en 2: public void reloadIndexReader() { «quasi temps réél» 3: searcherManager.maybeRefresh(); 4: }
  • 41. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 41 Partie IV : Mobilité
  • 42. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 42 • LA question à se poser : une application spécifique ou du «responsive design» ? • Nous avons fait les deux sur Tatami...
  • 43. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 43 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
  • 44. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 44 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
  • 45. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 45 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
  • 46. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 46 jQuery Mobile • Version de jQuery spécifique pour smartphones et tablettes • HTML5, cross-platform • jQuery UI et ThemeRoller
  • 47. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 47 Problèmes rencontrés • L’application mobile est toujours en retard fonctionnellement • Compliqué à tester et à maintenir • Arrivée des tablettes : il faut faire une 3ème version ?? • Gestion des thèmes impossible à gérer entre toutes ces versions
  • 48. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 48 Pourquoi faire du «responsive design» ? • Une application unique • S’adapte «automatiquement» au support • Plus de problème de maintenance, de gestion des thèmes, etc... • Site «complet» pour tout le monde
  • 49. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 49 Le résultat • Etonnamment simple à réaliser avec Twitter Bootstrap • Tatami fonctionne sur desktop, mobile (iPhone, Android, Blackberry, Windows Phone) ou tablette (iPad, Android)...
  • 50. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 50 Problèmes rencontrés • Pas de support «natif», par exemple les notifications • Quelques contraintes à connaitre • Fini les «onmouseover» (ne fonctionnent pas en mode «touch»)
  • 51. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 51 En conclusion... • HTML5 : capacités impressionnantes, nous ne sommes qu’au début • Spring 3.1: performance et simplicité de développement • NoSQL : ouvre un monde de possibilités, encore complexe à utiliser • Mobilité : application native vs. responsive design
  • 52. JugSummerCamp 2012 «HTML5, Spring, NoSQL et mobilité» - 52 Merci ! Tatami est hébergé sur : https://tatami.ippon.fr Le code source est disponible sur GitHub : https://github.com/ippontech/tatami