VT2018 Thorntail Demo

From air
Jump to: navigation, search

Introduction

Auteur : CHANET Zoran
E-mail : zoran.chanet@laposte.net
Technologie : Thorntail
Contexte : Démonstration effectuée à l'occasion de la présentation pendant le cours de Veille Technologique et Stratégique du 19/11/2018

Prérequis

Les prérequis de la démonstration sont les mêmes que pour utiliser Thorntail :

  • Maven 3.2.5 ou supérieur
  • Java JDK8 ou supérieur

Base

Capture d'écran du générateur Thorntail

Pour des questions de simplicité, nous allons utiliser le générateur Thorntail. Nous créons un projet ayant comme nom de groupe vt2018.Thorntail.example et nom d'artifact demo. Nous retrouverons ces attributs plus tard, dans le pom.xml du projet généré. Nous choisissons comme fraction (dépendance) JAX-RS, qui va nous permettre de former l'API nécessaire à notre démonstration. Pour le but de cette démonstration, il n'est pas besoin de choisir plus de fractions. Dans un projet réel, il est possible d'en cumuler autant que nécessaire.

Validation de la génération

Voici les section à observer dans le pom.xml.
Les ID demandés ont bien été pris en compte :

5 <groupId>vt2018.Thorntail.example</groupId>
6 <artifactId>demo</artifactId>
7 <name>Thorntail Example</name>

La référence au BOM a été créée :

19 <dependencyManagement>
20   <dependencies>
21     <dependency>
22       <groupId>io.thorntail</groupId>
23       <artifactId>bom-all</artifactId>
24       <version>${version.thorntail}</version>
25       <scope>import</scope>
26       <type>pom</type>
27     </dependency>
28   </dependencies>
29 </dependencyManagement>

Le plugin io.thorntail pour Maven est bien importé :

34 <plugin>
35   <groupId>io.thorntail</groupId>
36   <artifactId>thorntail-maven-plugin</artifactId>
37   <version>${version.thorntail}</version>
38   
39   <executions>
40     <execution>
41       <goals>
42         <goal>package</goal>
43       </goals>
44     </execution>
45   </executions>
46 </plugin>

La fraction JAX-RS est bien utilisée :

52 <dependency>
53   <groupId>io.thorntail</groupId>
54   <artifactId>jaxrs</artifactId>
55 </dependency>

Création de l'API

Maintenant que notre projet Thorntail a bien été créé, à notre tour de produire l'API que nous souhaitons. Pour cela, nous allons déclarer un premier fichier, RestApplication.java, dans les sources de l'application (à l'emplacement src/main/java/demo).
src/main/java/demo/RestApplication.java :

1 package demo;
2 
3 import javax.ws.rs.core.Application;
4 import javax.ws.rs.ApplicationPath;
5 
6 @ApplicationPath("/thorntail-demo")
7 public class RestApplication extends Application {
8 }

Ce fichier déclare simplement une API à l'adresse /thorntail-demo (ligne 8) du server sur lequel elle sera déployé. Donnons maintenant un comportement à notre API. Pour cela, créons le fichier demoGET2.java.
src/main/java/demo/demoGET2.java :

 1 package demo;
 2 
 3 import javax.ws.rs.Path;
 4 import javax.ws.rs.GET;
 5 import javax.ws.rs.Produces;
 6 import javax.ws.rs.core.Response;
 7 
 8 @Path("/Cool_VT_Demo")
 9 public class demoGet2{
10 	
11 	@GET
12 	@Produces("text/html")
13 	public Response doGet() {
14 		return Response.ok("<h2>What a cool demo.</h2>").build();
15 	}
16 
17 }

Ce fichier produit une réponse html à une requête GET (lignes 11 et 12) lancée à l'adresse /Cool_VT_Demo (ligne 8) de l'application, soit à l'adresse /thorntail-demo/Cool_VT_Demo du serveur sur lequel l'API sera déployée. Enfin, pour rajouter un peu d'interactivité et prouver l'usage de l'html, créons le fichier demoGET.java.
src/main/java/demoGET.java :

 1 package demo;
 2 
 3 import javax.ws.rs.Path;
 4 import javax.ws.rs.GET;
 5 import javax.ws.rs.Produces;
 6 import javax.ws.rs.core.Response;
 7 
 8 @Path("/index")
 9 public class demoGet{
10 	
11 	@GET
12 	@Produces("text/html")
13 	public Response doGet() {
14 		return Response.ok("<h2><a href=\"Cool_VT_Demo\">Clic to see a cool demo</a></h2>").build();
15 	}
16 
17 }

Ce fichier produit une réponse html à une requête GET (lignes 11 et 12) lancée à l'adresse /index (ligne 8) de l'application, soit à l'adresse /thorntail-demo/index du serveur sur lequel l'API sera déployée. La réponse sera un lien cliquable renvoyant sur l'adresse /Cool_VT_Demo de l'application, soit demoGET2.

Démonstration

fig.1 : Capture d'écran de l'API de démonstration (1)
fig.2 : Capture d'écran de l'API de démonstration (2)

Enfin, voyons à quoi ressemble notre API. Pour cela, nous allons provoquer la création par Thorntail de l'UberJAR exécutable et son exécution sur l'adresse locale par une seule commande :

mvn thorntail:run

Si aucune erreur n'est produite, notre API est maintenant disponible à l'adresse localhost:8080/thorntail-demo/index (fig.1), et nous permet bien d'accéder à localhost:8080/thorntail-demo/Cool_VT_Demo (fig.2) en cliquant sur le lien.
De plus, nous pouvons constater l'apparition dans le dossier target de demo.war, contenant les composants de l'application, et de l'UberJAR demo-thorntail.jar (que nous pouvons également exécuter par la commande classique, java -jar demo-thorntail.jar).