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
4. 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
5. 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
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 App engine?
• 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
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
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 de GAE
URL Fetch
Memcache
Mail
Image
XMPP
Google Accounts
Cron jobs: Traitements réguliers
14
15. Les services de GAE
•Communiquer via http/https
•Mémoire cache distribuée persistente
•Service stable, robuste
15
16. 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
17. 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
18. 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
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
27. 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
28. Guice?
Les ingrédients
•IOC
•Guice Module
• Injection
•Binding
• Scope
• AOP
• Autres
28
29. 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
30. 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
31. 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
32. 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
33. 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
34. injection de dépendances avec Guice
Principe de fonctionnement:
•Utilise des abstractModule pour faire la liaison
interfaceimplé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é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
36. 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
37. 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
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
41. 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
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
44. Integration
frameworks
•Struts
•GIN - GWT
•Seam
•Guice and JSF
•JPA
Mobile
RoboGuice - Guice for Android.
44
45. 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
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