google appengine&guice
TRANSCRIPT
1
App Engine Et Guice
2
PlanGoog
le AppEngin
e
• Introduction • Qu’est ce le cloud computing ?• Vue globale de GAE• Architecture• Services• Stockage des données
Guice
• Qu’est ce que Guice ?• Injection de dépendance• AOP• Conclusion
3
Introduction
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 !
5
Trois modèles de service
Infrastructure as a service
Platform as a service
Software as a service
• Serveurs virtuels• Architectes réseau
• Environnement pour déployer une application
• Développeurs d’application
• Logiciels web configurables prêt à être utilisés
• Les utilisateurs finaux
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
7
Présentation de GAEGoogle 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
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
9
Pourquoi Google App engine?
• Montée en charge• Distribution• Authentifications• Performance• Évolutivité• Coûts réduits
10
Architecture globale
Cloud Computing Google
Web Server / Jetty
Application
Services
Cron
URL Fetch
MemCache
Images JPA / JDO
BigTable
GFS(Google File
System)
ConsoleAdministration
(Stats, logs, Quotas)
Déploiement
(Stats, logs, Quotas)
Security
WWWHTTP/S
Utilisateurs
Communication
Déploiement
UtilisateursAdministrateurs
API BigTable
11
Java ou Python?
Vous êtes libres !La même infrastructureLes mêmes services spécialisésLa même console d’administration
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 …)
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/
14
Les services de GAE
URL Fetch
Memcache
Image
XMPP
Google Accounts
Cron jobs: Traitements réguliers
15
Les services de GAE
•Communiquer via http/https
•Mémoire cache distribuée persistente•Service stable, robuste
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
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
[email protected]@appspot.com
18
Les services de GAE
cron.xml<cronentries><cron><url> /tasks/summary</url><description> daily summary job </description> <schedule> every 24 hours</schedule></cron></cronentries>
•Service App Engine CRON configurer des tâches planifiées qui s'exécutent à des heures définies ou à intervalles réguliers.
19
Stockage de données Le stockage de données s’appuie sur BigTableBig 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
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
21
Stockage de données
L’accès aux données:
•API de bas niveau•API de haut niveau Datanucleus : JPA & JDO
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.
23
Stockage de données
Deux options de stockage de données
High Replication Datastore Master/Slave
• Le type par défaut•les données sont répliquées dans les centres de données d’une manière synchrone
•Il réplique les données de manière asynchrone dans les centres de données.• un seul centre de données peut avoir le rôle de maître lors de l'écriture.
24
Stockage de données
25
26
Guice?
C’est un Framework proposé par Google en 2007Fondé par Bob Lee
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
28
Guice?
Les ingrédients
•IOC•Guice Module• Injection•Binding • Scope• AOP• Autres
29
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
Les injections de dépendances
30
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
Les injections de dépendances
31
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é
Les injections de dépendances
32
Avec une factory:
• Un seul «new» de la classe B dans tout le code
•Pattern Factory est lourd à implémenter
Les injections de dépendances
33
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.
Les injections de dépendances avec GuiceDON’T CALL US ;
WE WILL CALL YOU
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
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)
36
injection de dépendances avec Guice
Principe de fonctionnement (l’injection):
Trois formes
injection sur un attribut
injection sur un constructeur
injection sur une méthode
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
38
Les scopes
Il existe 4 scopes :
UnscopedCréer un objet à chaque
utilisation
@Singletoncréer une seul instance par
application
@RequestScopedune instance par requête
web ou RPC
@SessionScopedune instance par http
Session
39
Démo
Etudiant
Filière
Injector
Module
Filière GL
40
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.
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.
43
Guice AOP
44
Integration
frameworks
• Struts
• GIN - GWT
• Seam
• Guice and JSF
• JPA
MobileRoboGuice - Guice for Android.
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. . . . . . .
46
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
Conclusion
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.
48
Merci pour votre attention
Questions