Suite au premier article  Google Cloud Plateform :  1. La prise en main, nous allons vous présenter dans ce qui suit un tutoriel sur le déploiement d’une application Java sur App Engine.

L’application en question est un livre d’or (Guestbook). Afin de stocker les données, on se basera dans un premier temps, sur le Datastorage de l’App Engine et dans un second temps, sur le Cloud SQL, on pourra ainsi faire un tour sur l’implémentation de trois services proposé par Google Cloud.

Noter que durant ce tutoriel, on assume que vous connaissez le langage Java, Maven et Git. L’utilisation d’un terminal est fortement recommandé.

Tout le code de cet article sera présent sur le répo Github de Neoxia à travers ce lien.

 

Etape 0 : Initialisation du projet

Création du projet

Dans un premier temps, on va avoir besoin de Maven pour générer la structure de notre projet et les fichiers nécessaire au déploiement sur l’App Engine. Pour ce faire, Google nous offre un artifact Maven nomé appengine-skeleton-archetype

  1. Créer un dossier vide dans lequel vous voulez mettre votre projet
  2. Depuis l’invite de commande, invoquer la commande Maven suivante: 
    mvn archetype:generate
  3. Vous allez être invité à choisir entre appliquer un filtre ou à choisir un nombre, taper juste la valeur suivante: com.google.appengine.archetypes:skeleton-archetype
  4. Vous allez ensuite être invité à choisir un nombre ou un filre, sélectionner le numéro 1 qui correspond à: appengine-skeleton-archetype
  5. Pour la valeur du « groupId« , insérer la valeur suivante: com.neoxia.gcloud
  6. Pour la valeur du « artifactId« , insérer la valeur suivante: gae_guestbook
  7. Vous pouvez laisser par défaut les valeurs de « version » et « package » puis confirmer votre choix

A ce moment, vous devez avoir un projet avec une structure basique, vous pouvez remarquer la présence d’un dossier nommé gae_guestbook qui contient un fichier pom.xml et deux autres répertoires gae_guestbook-ear et gae_guestbook-war. On décrira plus tard qu’est ce qu’on va faire dans ces deux répertoires.

 

Configuration du projet

  1. Dans gae_guestbook, ouvrir dans un éditeur le fichier pom.xml et changer la valeur de la balise  avec la dernière et la plus récente version de l’App Engine Java SDK (à l’écriture de ces lignes, c’est la version 1.9.2)
  2. Dans gae_guestbook-war, ouvrir le fichier pom.xml (attention, il est différent du premier), sous la balise  , localiser la ligne version, et sous cette dernière ajouter 

    remplacer le commentaire avec la dernière version du App Engine Java SDK (exemple: 1.9.2)

  3. Visiter la Google Developers Console pour créer et configurer votre premier projet.
  4. Choisir un nom pour votre projet (exemple: Guestbook) veuillez a bien noter le Project ID auto généré pour vous, on va en avoir besoin pour plus tard, puis validez.
  5. De retour sur le terminal, allez jusqu’à gae_guestbook/gae_guestbook-ear/src/main/application/META-INF/ et ouvez le fichier appengine-application.xml dans un éditeur de texte.
  6. Modifier la valeur de  par le Project ID que vous avez noté précédemment.

Nous avons terminé la configuration de l’étape 0. Dans le cas où vous avez rencontré des problèmes, vous pouvez cloner le répo du projet :

git clone https://github.com/neoxia/gae-guestbook

et pointer vers l’état initial :

git checkout -f step-0

Etape 1: Ajout du code de l’application et de l’UI

Durant cette étape, il est fortement recommandé d’avoir cloné le répo du projet et d’être pointé sur le tag step-0, du fait que le template du projet propose une intégration de Bootstrap, ce dernier n’étant pas fourni par défaut pendant la génération Maven, nous avons donc pris soin de le rajouter.

Nous allons donc créer une application qui interagit avec les comptes Google afin que les utilisateurs peuvent se connecter en utilisant leurs identifiants Google. Cette fonctionnalité est implémenté en utilisant le service « Users » de App Engine.

L’application aura ces deux principaux parties logiques:

  1. Une page JSP que les utilisateurs vont utiliser pour envoyer des requêtes à l’application.
  2. Une servlet nommé GuestbookServlet.java qui demande à l’utilisateur de s’authentifier et affiche un message personnalisé.

 

Creation de l’UI en utilisant JSP

  1.  Dans gae_guestbook/gae_guestbook-war/src/main/webapp, créer un fichier nommé guestbook.jsp avec le contenu suivant:

     

    Remarquez les « imports » pour le services « Users » de l’App Engine, Aussi, par défaut, tout fichier dans war/ ou dans un sous répertoire de war/ (autre que WEB-INF/) et que son nom se termine par .jsp est automatiquement mappé vers le lien de l’URL qui est en fait le chemin du fichier .jsp. Cette JSP sera automatiquement mappé vers /guestbook.jsp.

  2. Dans gae_guestbook/gae_guestbook-war/src/main/webapp/WEB-INF, ouvrir web.xml et assurez vous que les éléments  ont un mapping correct:

     

Creation de la servlet

Pour créer notre servlet:

  1. Dans gae_guestbook/gae_guestbook-war/src/main/java, créer les sous répertoires com/neoxia/gcloud/gae_guestbook.
  2. Dans gae_guestbook/gae_guestbook-war/src/main/java/com/neoxia/gcloud/gae_guestbook, créer les fichiers nommé GuestbookServlet.java.
  3. Ajouter le contenu de ce fichier:

     

    La servlet vérifie si un utilisateur est déjà loggé. Si c’est le cas, elle affiche un message personnalisé; sinon, l’utilisateur sera redirigé sur une page d’authentification.

    Note: Le serveur de développement sait comment simuler le mécanisme d’authentification de Google. Quand vous lancer l’application sur votre machine locale, la redirection s’appliquera sur une page qui va simuler l’authentification, par contre, sur un serveur de production App Engine, la redirection passe directement par le service de Google.

Build et Test de l’application

  1. Aller au répertoire gae_guestbook, et invoquer la commande: 
    mvn clean install

    Attendre la fin du Build

  2. Changer vers gae_guestbook/gae_guestbook-ear, (et non gae_guestbook-war) puis lancer l’application sur votre serveur de développement local avec l’invocation de cette commande: 
    mvn appengine:devserver

    Attendre un message de succès, il doit ressembler à ça:

    [INFO] INFO: The admin console is running at http://localhost:8080/_ah/admin
    [INFO] Mar 18, 2014 5:35:04 PM com.google.appengine.tools.development.DevAppServerImpl doStart
    [INFO] INFO: Dev App Server is now running
  3. Visiter localhost:8080 pour accéder et tester votre application.

Nous avons terminé la configuration de l’étape 1. Dans le cas où vous avez rencontré des problèmes, vous pouvez initialiser votre répo local à une version fonctionnelle 

git checkout -f step-1

N’oubliez pas de vérifier la configuration du projet (remettre en place votre propre Project ID)

 

Etape 2: Stocker les données dans le Datastore

Dans cette étape du tutoriel, on va étendre notre application en ajoutant l’UI qui va permettre aux utilisateurs d’envoyer des messages POST et d’afficher ceux qui son déjà enregistré. Pour ce faire, on va ajouter une nouvelle servlet qui se chargera des intéractions POST avec notre base de donnée.

La base de donnée qu’on va utiliser, n’est autre que le Datastore de l’App Engine, qui est enfait un modèle NoSQL. Elle est disponible pour votre application sans aucune activation ni enregistrement. Vu que c’est une base sans schémas, vous n’avez pas besoin de définir les objets dans la base avant de commencer à enregistrer dans cette dernière. Vous devez tout simplement faire un « import » des classes du Datastore.

On appliquera cette liste de changement dans notre projet actuel:

  1. Editer la page JSP pour envoyer et afficher les messages.
  2. Créer une nouvelle servlet qui gère l’interaction avec le Datastore.
  3. Ajouter les routes nécessaire dans le fichier web.xml

 

Envoyer et afficher les messages

  1. Dans gae_guestbook/gae_guestbook-war/src/main/webapp, ouvrir guestbook.jsp dans un éditeur et ajouter cette liste d’import:
  2. Juste avant la fermeture de la
     

     ajouter ce code:

    Quand la page est chargé, le Datastore fait une recherche pour tous les messages enregistré dans le Datastore et les liste. Une textarea permet l’envoi du message avec une requete POST, ce dernier sera géré par une nouvelle servlet qu’on va créer dans la prochaine étape.

 

Création de la nouvelle servlet

  1. Dans gae_guestbook/gae_guestbook-war/src/main/java/com/neoxia/gcloud/gae_guestbook, créer le fichier  SignGuestbookServlet.java.

    Cette servlet joue le rôle du POST pour les messages envoyé. Elle prend le message (content) depuis la requête et l’enregistre dans le Datastore dans une entité nommé  Greeting, elle enregistre aussi les propriété liée comme l’utilisateur et la date d’envoi. (Pour plus d’information sur les entités dans App Engine, visiter ce lien).

  2. Ouvrir gae_guestbook/gae_guestbook-war/src/main/webapp/WEB-INF/web.xml et assurez vous que le mapping de la nouvelle servlet est en place. La version finale devrait ressembler à ça:

 

Build et Test de l’application

  1. Aller au répertoire gae_guestbook, et invoquer la commande: 
    mvn clean install

    Attendre la fin du Build

  2. Changer vers gae_guestbook/gae_guestbook-ear, (et non gae_guestbook-war) puis lancer l’application sur votre serveur de développement local avec l’invocation de cette commande: 
    mvn appengine:devserver

    Attendre un message de succès, il doit ressembler à ça:

    [INFO] INFO: The admin console is running at http://localhost:8080/_ah/admin
    [INFO] Mar 18, 2014 5:35:04 PM com.google.appengine.tools.development.DevAppServerImpl doStart
    [INFO] INFO: Dev App Server is now running
  3. Visiter localhost:8080 pour accéder et tester votre application.
  4. Vous pouvez maintenant tester l’envoi de message et de voir l’historique de notre Livre d’or.

 

Deploiement de l’application

  1. Aller au répertoire gae_guestbook, et invoquer la commande: 
    mvn clean install

    Attendre la fin du Build

  2. Changer vers gae_guestbook/gae_guestbook-ear, (et non gae_guestbook-war) puis lancer la commande Maven suivante: 
    mvn appengine:update
  3. Pendant le premier deploiement, vous devez vous entrer vos identifiants de connexion, pour ce faire vous allez être automatiquement redirigé vers une page web, suivez les étapes et tout sera en place.
  4. Visiter http:// .appspot.com pour accéder et tester votre application, n’oubliez pas de remplacer votre Project ID dans l’URL.

 

Nous venons de terminer la première partie de ce tutoriel, dans le prochain article, nous verrons comment substituer l’enregistrement sur le Datastore par une instance Cloud SQL.

Stay tuned !