App Engine Et
   Guice


                1
Plan
            •   Introduction
            •   Qu’est ce le cloud computing ?
            •   Vue globale de GAE
 Google     •   Architecture
AppEngine   •   Services
            •   Stockage des données


            •   Qu’est ce que Guice ?
 Google     •   Injection de dépendance
 Guice      •   AOP
            •   Conclusion




                                                 2
Introduction




               3
Qu’est ce que le cloud computing?


 •Avec le cloud computing, les utilisateurs ou les
 entreprises ne sont plus gestionnaires de
 leurs serveurs informatiques.
 • Ils peuvent accéder à une multitude de services en
 ligne sans avoir à gérer l'infrastructure inhérente,
 souvent complexe.
 • Les applications et les données ne se trouvent plus
 sur l'ordinateur local mais dans un «cloud »
 •On déploie dans les nuages et ils se débrouillent
 pour que ça marche !




                                                         4
Trois modèles de service

        Infrastructure as a   • Serveurs virtuels
              service         • Architectes réseau


                              • Environnement pour
          Platform as a         déployer une application
             service          • Développeurs
                                d’application

                              • Logiciels web
          Software as a         configurables prêt à être
                                utilisés
             service
                              • Les utilisateurs finaux




                                                            5
Présentation de GAE
 GAE est un service qui permet de déployer des

 applications web sur l’infrastructure Google

 Au début GAE supporte uniquement Python

 Le service Python n’a pas eu un grand succès

 Java était le langage le plus demandé (devant PHP)

 Google a annoncé le support de Java pour GAE le 07 avril

 2009
                                                        6
Présentation de GAE
 Google App Engine propose un conteneur de Servlet

et une base de données qui permettent d'héberger des

application Java sur les serveurs de Google.

  un environnement de développement local complet

qui simule Google App Engine sur votre ordinateur




                                                       7
Présentation de GAE
 Toutes les applications peuvent utiliser jusqu'à 500 Mo

d'espace de stockage, et assez de temps processeur et

de bande passante gratuitement.

  Basé sur des quotas d’utilisation

 Possibilité de limiter le budget quotidien




                                                           8
Pourquoi Google App engine?

                  •   Montée en charge
                  •   Distribution
                  •   Authentifications
                  •   Performance
                  •   Évolutivité
                  •   Coûts réduits




                                   9
Architecture globale
                                                                 Utilisateurs

                   Administrateurs                                         Utilisateurs




                                                 Cloud Computing Google




Déploiement
                                                                                                   Communication



                                                                                          HTTP/S




                         Déploiement




                                         (Stats, logs, Quotas)
                 (Stats, logs, Quotas)




                                                                                                           10
Java ou Python?




 Vous êtes libres !
 La même infrastructure
 Les mêmes services spécialisés
 La même console d’administration

                                    11
appengine-web.xml
  Fichier de configuration de App engine
 Placé dans le répertoire WEB-INF/
 Il inclut :l’identifiant de l’application , numéro de version et
des listes de fichiers statiques (images ou les feuilles de style
CSS …)




                                                             12
Démo
• Les ingrédients:
  – Java 5 ou 6
  – Eclipse 3.3 ou plus
  – Plugin GAE
     • Site (Eclipse): http://dl.google.com/eclipse/plugin/3.x
     • Doc: http://code.google.com/intl/fr/appengine/docs/java/tools/eclipse.html
  – Un compte GAE
     • http://appengine.google.com/

• La recette:
  – Nouveau projet: « Web Application Project »
  – Deploy to App Engine
  – http://xxxxxxx.appspot.com/

                                                                               13
Les services de GAE
 URL Fetch
 Memcache
 Mail
 Image
 XMPP
 Google Accounts
 Cron jobs: Traitements réguliers




                                    14
Les services de GAE


         •Communiquer via http/https




         •Mémoire cache distribuée persistente
         •Service stable, robuste




                                                 15
Les services de GAE

          •Stockage des images.
          •Manipulation des images
                          (rotation, translation….)



          •Pour les envois , on utilise JavaMail
          •L’expéditeur est le compte administrateur
          •Reception des messages sous la forme de
          requêtes HTTP par App Engine qui va les
          transmettre à l’application



                                                  16
Les services de GAE
        •Protocole messagerie instantanée
         •Votre application se connecte aux
         messageries instantannées compatibles
         XMPP (Google Talk)

         •Une URL particulière traite les messages
         entrants

         anything@app-id.appspotchat.com
         App-id@appspot.com




                                                     17
Les services de GAE
    •Service App Engine CRON
     configurer des tâches planifiées qui
    s'exécutent à des heures définies ou à
    intervalles réguliers.
 cron.xml
<cronentries>
<cron>
<url> /tasks/summary</url>
<description> daily summary job </description>
<schedule> every 24 hours</schedule>
</cron>
</cronentries>


                                                 18
Stockage de données
  Le stockage de données s’appuie sur BigTable
  Big table:
• développé en interne par Google
• scalable (capacité de montée en charge)

  Big Table n’est pas
•Une base de données relationnelle classique

  Mais plutôt :
• C’est une base de donnée NoSQL




                                                 19
Stockage de données
        • Dans le Datastore on peut stocker des entités.

        • Une entité se définit par :
          Son genre (Kind)
          Son identifiant
          Un ensemble de propriétés

        • L'application peut exécuter des requêtes sur
          les entités.

         • AppEngine maintient un index pour chaque
            type de requête qu’on peut exécuter dans
            l’application.
   garantir des résultats rapides sur des
   ensembles de données très volumineux             20
Stockage de données
 L’accès aux données:

 •API de bas niveau
 •API de haut niveau Datanucleus : JPA & JDO




                                               21
Fonctionnalités de JPA & JDO non prises en charge


  Relations d'appartenance plusieurs-à-plusieurs
  Requêtes de "jointure".
  Requêtes d'agrégation (GROUP BY, HAVING, SUM,
AVG, MAX, MIN).
  Requêtes polymorphes : Vous ne pouvez pas exécuter
une requête d'une classe pour récupérer des instances
d'une sous-classe.



                                                        22
Stockage de données

   Deux options de stockage de données

High Replication Datastore    Master/Slave

                             •Il réplique les
   •Le type par défaut
                             données de manière
   •les données sont
                             asynchrone dans les
   répliquées dans les
                             centres de données.
   centres de données
                             • un seul centre de
   d’une manière
                             données peut avoir
   synchrone
                             le rôle de maître lors
                             de l'écriture.
                                                      23
Stockage de données




                      24
25
Guice?




C’est un Framework proposé par Google en 2007
Fondé par Bob Lee




                                                26
Guice?

 Un Framework léger d’injection de dépendance pour Java 5

et au dessus

 La version actuelle 3.0 (lancée 4 mars 2011)

 Google Guice est apparu après la solution de Spring
 Développé pour être « meilleur » que Spring IoC

 Utilisé dans la plupart des applications de Google


                                                       27
Guice?
                Les ingrédients
•IOC
•Guice Module
• Injection
•Binding
• Scope
• AOP
• Autres
                                  28
Les injections de dépendances
  Présentation
•Les injections de dépendances ont été inventées par
 Martin Fowler.
• Dérivé du principe d’inversion de contrôle
•Utilisé pour avoir des applications modulaires
•Permet de réduire les dépendances entre les classes
•Utilisé pour la programmation orientée aspect




                                                       29
Les injections de dépendances
  Cas de base:
• Dépendance : utilisation de méthodes d’une autre
classe
•Généralement fait par un « new » dans le code
•Pas modulaire, difficile à maintenir, ne permet pas le
changement




                                                   30
Les injections de dépendances
  Avec une interface
• Permet à la classe A d’utiliser une interface

•Plusieurs implémentations de l’interface

•Toujours un « new » dans le code de A

•Pas beaucoup avancé




                                                  31
Les injections de dépendances
  Avec une factory:
• Un seul «new» de la classe B dans tout le code

•Pattern Factory est lourd à implémenter




                                                   32
Les injections de dépendances avec Guice

  Le principe est simple !
  vous n’avez plus besoin d’instancier les objets ou
d’utiliser des factories, c’est les objets qui viennent à
vous.

  le Framework instancie pour vous et vous n’avez
qu’à les utiliser.




                                                     33
injection de dépendances avec Guice

  Principe de fonctionnement:
•Utilise des abstractModule pour faire la liaison
interfaceimplémentation
•Utilise l’annotation @Inject pour déclarer les classes
à injecter
•Utilise un Injector pour charger le module dans
notre application


                                                    34
injection de dépendances avec Guice

  Principe de fonctionnement (Les modules):

•Étendent la classe AbstractModule de Guice

•Un module peut effectuer plusieurs associations

•Une application peut avoir plusieurs modules

(1module = 1configuration)



                                                   35
injection de dépendances avec Guice
 Principe de fonctionnement (l’injection):


                            injection sur un attribut


Trois formes             injection sur un constructeur


                          injection sur une méthode




                                                         36
injection de dépendances avec Guice

 Principe de fonctionnement (l’injecteur):
• Injecteur Guice pour charger le module dans
notre application
•Injecter les dépendances à sa charge
•Créer une instance de la classe injectée




                                                37
Les scopes
                                Unscoped
                         Créer un objet à chaque
                                utilisation

                              @Singleton
                       créer une seul instance par
                               application
Il existe 4 scopes :
                          @RequestScoped
                       une instance par requête
                             web ou RPC

                           @SessionScoped
                         une instance par http
                                Session
                                                 38
Démo
  Injector    Etudiant



  Module       Filière



 Filière GL
                         39
40
Programmation orientée aspect AOP
C’est un paradigme de programmation qui permet de
séparer les considérations techniques (aspect en anglais)
des descriptions métier dans une application.




                                                        41
Guice AOP
  Comment ça marche ?
• On peut appliquer des méthodes intercepteurs sur
des objets injectés.
•Guice AOP génère des proxies (impersonators)
•Enveloppe un objet cible pour appliquer des aspects
avant et après l’appel à cet objet
•le code entre l’objet et method invocation est appelé
interceptors.



                                                         42
Guice AOP




            43
Integration
 frameworks
    •Struts
    •GIN - GWT
    •Seam
    •Guice and JSF
    •JPA



Mobile
RoboGuice - Guice for Android.
                                 44
Les nouveautés de Guice 3.0
  supporte JSR 330 : une proposition lancée par
Springsource et Google visant à standardiser un jeu
d’annotation pour gérer l’injection de dépendance.

  Building avec Maven

  D’autres annotations:
• @ImplementedBy
• @providedBy
• @Singleton
• @Provides
• @CheckedProvides
• @RequestScoped
• @SessionScoped
.......                                               45
Conclusion
Guice VS Spring
 Spring : le paramétrage des classes se fait via un fichier
de configuration XML
 Guice: se fait directement dans le code via des
annotations.
 Frameworks très similaires

 Spring reste très utilisé pour l’IoC

  Mais lourd et format compliqué

 Guice très léger et plus facile à utiliser
                                                              46
perspectives




                    RoboGuice
RoboGuice est un petit framework permettant d’adapter
Google Guice au cycle de vie particulier des applications
Android. De plus, il ajoute des fonctionnalités
qui simplifient le développement Android.

                                                        47
48

Google appengine&guice

  • 1.
  • 2.
    Plan • Introduction • Qu’est ce le cloud computing ? • Vue globale de GAE Google • Architecture AppEngine • Services • Stockage des données • Qu’est ce que Guice ? Google • Injection de dépendance Guice • AOP • Conclusion 2
  • 3.
  • 4.
    Qu’est ce quele cloud computing? •Avec le cloud computing, les utilisateurs ou les entreprises ne sont plus gestionnaires de leurs serveurs informatiques. • Ils peuvent accéder à une multitude de services en ligne sans avoir à gérer l'infrastructure inhérente, souvent complexe. • Les applications et les données ne se trouvent plus sur l'ordinateur local mais dans un «cloud » •On déploie dans les nuages et ils se débrouillent pour que ça marche ! 4
  • 5.
    Trois modèles deservice Infrastructure as a • Serveurs virtuels service • Architectes réseau • Environnement pour Platform as a déployer une application service • Développeurs d’application • Logiciels web Software as a configurables prêt à être utilisés service • Les utilisateurs finaux 5
  • 6.
    Présentation de GAE GAE est un service qui permet de déployer des applications web sur l’infrastructure Google Au début GAE supporte uniquement Python Le service Python n’a pas eu un grand succès Java était le langage le plus demandé (devant PHP) Google a annoncé le support de Java pour GAE le 07 avril 2009 6
  • 7.
    Présentation de GAE Google App Engine propose un conteneur de Servlet et une base de données qui permettent d'héberger des application Java sur les serveurs de Google. un environnement de développement local complet qui simule Google App Engine sur votre ordinateur 7
  • 8.
    Présentation de GAE Toutes les applications peuvent utiliser jusqu'à 500 Mo d'espace de stockage, et assez de temps processeur et de bande passante gratuitement. Basé sur des quotas d’utilisation Possibilité de limiter le budget quotidien 8
  • 9.
    Pourquoi Google Appengine? • Montée en charge • Distribution • Authentifications • Performance • Évolutivité • Coûts réduits 9
  • 10.
    Architecture globale Utilisateurs Administrateurs Utilisateurs Cloud Computing Google Déploiement Communication HTTP/S Déploiement (Stats, logs, Quotas) (Stats, logs, Quotas) 10
  • 11.
    Java ou Python? Vous êtes libres ! La même infrastructure Les mêmes services spécialisés La même console d’administration 11
  • 12.
    appengine-web.xml Fichierde configuration de App engine Placé dans le répertoire WEB-INF/ Il inclut :l’identifiant de l’application , numéro de version et des listes de fichiers statiques (images ou les feuilles de style CSS …) 12
  • 13.
    Démo • Les ingrédients: – Java 5 ou 6 – Eclipse 3.3 ou plus – Plugin GAE • Site (Eclipse): http://dl.google.com/eclipse/plugin/3.x • Doc: http://code.google.com/intl/fr/appengine/docs/java/tools/eclipse.html – Un compte GAE • http://appengine.google.com/ • La recette: – Nouveau projet: « Web Application Project » – Deploy to App Engine – http://xxxxxxx.appspot.com/ 13
  • 14.
    Les services deGAE URL Fetch Memcache Mail Image XMPP Google Accounts Cron jobs: Traitements réguliers 14
  • 15.
    Les services deGAE •Communiquer via http/https •Mémoire cache distribuée persistente •Service stable, robuste 15
  • 16.
    Les services deGAE •Stockage des images. •Manipulation des images (rotation, translation….) •Pour les envois , on utilise JavaMail •L’expéditeur est le compte administrateur •Reception des messages sous la forme de requêtes HTTP par App Engine qui va les transmettre à l’application 16
  • 17.
    Les services deGAE •Protocole messagerie instantanée •Votre application se connecte aux messageries instantannées compatibles XMPP (Google Talk) •Une URL particulière traite les messages entrants anything@app-id.appspotchat.com App-id@appspot.com 17
  • 18.
    Les services deGAE •Service App Engine CRON configurer des tâches planifiées qui s'exécutent à des heures définies ou à intervalles réguliers. cron.xml <cronentries> <cron> <url> /tasks/summary</url> <description> daily summary job </description> <schedule> every 24 hours</schedule> </cron> </cronentries> 18
  • 19.
    Stockage de données Le stockage de données s’appuie sur BigTable Big table: • développé en interne par Google • scalable (capacité de montée en charge) Big Table n’est pas •Une base de données relationnelle classique Mais plutôt : • C’est une base de donnée NoSQL 19
  • 20.
    Stockage de données • Dans le Datastore on peut stocker des entités. • Une entité se définit par : Son genre (Kind) Son identifiant Un ensemble de propriétés • L'application peut exécuter des requêtes sur les entités. • AppEngine maintient un index pour chaque type de requête qu’on peut exécuter dans l’application. garantir des résultats rapides sur des ensembles de données très volumineux 20
  • 21.
    Stockage de données L’accès aux données: •API de bas niveau •API de haut niveau Datanucleus : JPA & JDO 21
  • 22.
    Fonctionnalités de JPA& JDO non prises en charge Relations d'appartenance plusieurs-à-plusieurs Requêtes de "jointure". Requêtes d'agrégation (GROUP BY, HAVING, SUM, AVG, MAX, MIN). Requêtes polymorphes : Vous ne pouvez pas exécuter une requête d'une classe pour récupérer des instances d'une sous-classe. 22
  • 23.
    Stockage de données Deux options de stockage de données High Replication Datastore Master/Slave •Il réplique les •Le type par défaut données de manière •les données sont asynchrone dans les répliquées dans les centres de données. centres de données • un seul centre de d’une manière données peut avoir synchrone le rôle de maître lors de l'écriture. 23
  • 24.
  • 25.
  • 26.
    Guice? C’est un Frameworkproposé par Google en 2007 Fondé par Bob Lee 26
  • 27.
    Guice? Un Frameworkléger d’injection de dépendance pour Java 5 et au dessus La version actuelle 3.0 (lancée 4 mars 2011) Google Guice est apparu après la solution de Spring Développé pour être « meilleur » que Spring IoC Utilisé dans la plupart des applications de Google 27
  • 28.
    Guice? Les ingrédients •IOC •Guice Module • Injection •Binding • Scope • AOP • Autres 28
  • 29.
    Les injections dedépendances Présentation •Les injections de dépendances ont été inventées par Martin Fowler. • Dérivé du principe d’inversion de contrôle •Utilisé pour avoir des applications modulaires •Permet de réduire les dépendances entre les classes •Utilisé pour la programmation orientée aspect 29
  • 30.
    Les injections dedépendances Cas de base: • Dépendance : utilisation de méthodes d’une autre classe •Généralement fait par un « new » dans le code •Pas modulaire, difficile à maintenir, ne permet pas le changement 30
  • 31.
    Les injections dedépendances Avec une interface • Permet à la classe A d’utiliser une interface •Plusieurs implémentations de l’interface •Toujours un « new » dans le code de A •Pas beaucoup avancé 31
  • 32.
    Les injections dedépendances Avec une factory: • Un seul «new» de la classe B dans tout le code •Pattern Factory est lourd à implémenter 32
  • 33.
    Les injections dedépendances avec Guice Le principe est simple ! vous n’avez plus besoin d’instancier les objets ou d’utiliser des factories, c’est les objets qui viennent à vous. le Framework instancie pour vous et vous n’avez qu’à les utiliser. 33
  • 34.
    injection de dépendancesavec Guice Principe de fonctionnement: •Utilise des abstractModule pour faire la liaison interfaceimplémentation •Utilise l’annotation @Inject pour déclarer les classes à injecter •Utilise un Injector pour charger le module dans notre application 34
  • 35.
    injection de dépendancesavec Guice Principe de fonctionnement (Les modules): •Étendent la classe AbstractModule de Guice •Un module peut effectuer plusieurs associations •Une application peut avoir plusieurs modules (1module = 1configuration) 35
  • 36.
    injection de dépendancesavec Guice Principe de fonctionnement (l’injection): injection sur un attribut Trois formes injection sur un constructeur injection sur une méthode 36
  • 37.
    injection de dépendancesavec Guice Principe de fonctionnement (l’injecteur): • Injecteur Guice pour charger le module dans notre application •Injecter les dépendances à sa charge •Créer une instance de la classe injectée 37
  • 38.
    Les scopes Unscoped Créer un objet à chaque utilisation @Singleton créer une seul instance par application Il existe 4 scopes : @RequestScoped une instance par requête web ou RPC @SessionScoped une instance par http Session 38
  • 39.
    Démo Injector Etudiant Module Filière Filière GL 39
  • 40.
  • 41.
    Programmation orientée aspectAOP C’est un paradigme de programmation qui permet de séparer les considérations techniques (aspect en anglais) des descriptions métier dans une application. 41
  • 42.
    Guice AOP Comment ça marche ? • On peut appliquer des méthodes intercepteurs sur des objets injectés. •Guice AOP génère des proxies (impersonators) •Enveloppe un objet cible pour appliquer des aspects avant et après l’appel à cet objet •le code entre l’objet et method invocation est appelé interceptors. 42
  • 43.
  • 44.
    Integration frameworks •Struts •GIN - GWT •Seam •Guice and JSF •JPA Mobile RoboGuice - Guice for Android. 44
  • 45.
    Les nouveautés deGuice 3.0 supporte JSR 330 : une proposition lancée par Springsource et Google visant à standardiser un jeu d’annotation pour gérer l’injection de dépendance. Building avec Maven D’autres annotations: • @ImplementedBy • @providedBy • @Singleton • @Provides • @CheckedProvides • @RequestScoped • @SessionScoped ....... 45
  • 46.
    Conclusion Guice VS Spring Spring : le paramétrage des classes se fait via un fichier de configuration XML Guice: se fait directement dans le code via des annotations. Frameworks très similaires Spring reste très utilisé pour l’IoC Mais lourd et format compliqué Guice très léger et plus facile à utiliser 46
  • 47.
    perspectives RoboGuice RoboGuice est un petit framework permettant d’adapter Google Guice au cycle de vie particulier des applications Android. De plus, il ajoute des fonctionnalités qui simplifient le développement Android. 47
  • 48.