TP Web Service
S. Salva

Heroku, services Web Jersey


1. Prérequis

Installer le toolset Heroku (fait normalement), sous linux: wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

Installer Maven et Git (fait normalement)

La doc: le cours, doc java Heroku, doc Jersey

un compte gratuit Heroku !!!!


2. Création d'un SW et déploiement sur Heroku

A

Préparez un projet avec Maven

mvn archetype:generate -DarchetypeArtifactId=jersey-heroku-webapp \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=**a changer** -DartifactId=**a changer** -Dpackage=**a changer** \
-DarchetypeVersion=2.35

Vous trouverez le code source dans src/main/java et les tests dans src/test/java
De base, vous trouverez une classe Myressource contenant un service et un test pour ce service

B

Créez un service Web simple qui prends un parametre via URL et qui retourne un affiche HTML

C

Modifiez votre test pour qu'il soit adapté à votre service (sinon la cmd mvn clean package ne se fera pas)

En gros, vos tests se font comme suit:

final String responseMsg = target().path("wsrest/appel").request().get(String.class);

        assertEquals("Hello, Heroku!", responseMsg);

target() donne un objet Webtarget qui peut être appelé avec une méthode HTTP
Un Webtarget possède aussi une méthode queryParam(String name, Object... values)

voir ici: doc jersey,

3. Vérification en local


Créez un package de votre application.
Testez votre application en local avec Jetty (serveur Web légé pour applications Web servlet, WS, etc.) en faisant:
  1. mvn clean package jetty:run
  2. ou  java -jar jetty-runner.jar application.war
Appelez votre service via un navigateur http://localhost:8080/

4. Déploiement sur Heroku

A

Les étapes sont les suivantes (voir doc)
  1. creation d'un repo git local sur projet (git init)
  2. création d'une appli sur Heroku (heroku create -> demande login/mdp)
  3. crzation package git local (git add et git commit)
  4. envoi du dépot sur Heroku (git push: git push heroku master -> envoi et compilation sur heroku)
  5. A la fin du push, Vous trouverez un lien
    https://**nom appli**.herokuapp.com/
Déployez votre application et appelez la sur Heroku (via un navigateur, postman ou Curl)

B

Vérifiez que vous avez un dyno fonctionnel (et un seul) avec les commandes heroku ps et heroku ps:scale web=1

Vérifiez ce qui a été fait en regardant vos logs (si vous avez des erreurs aussi !) avec heroku logs --tail

C
Regardez votre interface Web d'administration (retrouvez l'appli et  ses  statistiques, vous etes toujours en mode gratuit ?)

5. Utilisation d'une base de donnée

Documentation

A

Vérifiez si PostgreSQL est installé en tant que module (il est gratuit, attention les autres souvent non)
Vous pouvez trouver des détails sur votre Bd dans votre console d'admin (contenu, suppresion) et avec la commande heroku pg

B

Reprenez le code donné en exemple dans la documentation ci dessus.

Créer une méthode de service qui ajoute des éléments dans une table (ticks en exemple)

Puis créez une seconde méthode pour lister le contenu de la table.

Pour que votre code soit déployable, il faut suivre ces étapes:
  1. ajouter les imports dans le code
  2. modifier pom.xml section dependencies et ajouter la dépendance liée à Postgresql
                <dependency>
                    <groupId>org.postgresql/groupId>
                    <artifactId>postgresql</artifactId>
                    <version>***42.2.8***</version>
                </dependency>

  1. ajouter les dépendances: mvn clean install

Pour déployer, il faut aussi refaire:
  1. git add puis git commit (ou git -a commit, c'est pareil)
  2. git push
C

Pour vérifier le contenu de votre base distante, vous pouvez utiliser votre console d'administration ou faire la commande heroku pg:psql (\q pour quitter)

6. Composition de services


Créez un service composite à partir de 2 Web services déployés sur Heroku (votre compte et /ou celui d'un de vos collègues). Un service doit contenir du code client pour appeler le second. La gestion des exceptions doit être complete (les erreurs doivent être retransmises de service en service jusqu'au client)

Testez via le navigateur, puis en créant un client Java.