Pages

mercredi 21 mai 2014

Application Web moderne en Java "the codestory way" à Mix-IT

Je ne me rappelle pas avoir pris le temps de faire un atelier dans les éditions précédentes de Mix-IT car à chaque fois je préférais suivre un maximum de talks : un atelier équivaut à deux talks. Mais j'avais une approche différente pour l'atelier proposé par David Gageot et Jean-Laurent de Morlhon car d'une part je me suis fait refouler à ce même atelier à Devoxx France et d'autres parts on m'a toujours donné de bons retours sur tout ce qu'ils font.

Le binôme est à l'origine du site codestory, le concours de développement qu'ils organisent depuis 3 ans. Le site de codestory est développé avec un framework qu'ils ont créé eux mêmes, fluent-http. On pourrait se demander pourquoi créer un nouveau framework alors qu'il en existe des dizaines sur le marché ?
ce n'est pas le logo du produit mais comme il n'y en a pas... :)

Tout simplement parce qu'aucune solution existante (hormis peut être spring-boot qui vient d'arriver) ne permet en quelques lignes de créer une application web Java. On peut le faire simplement d'en d'autres langages comme par exemple avec NodeJs mais pas en Java. A croire que les javaïstes sont des fans de la complexité.

Je ne vais pas refaire le contenu de l'atelier qui est décrit ici mais je vais tout de même reprendre un exemple pour montrer la simplicité. La seule contrainte est d'avoir un JDK 8 sur votre environnement et un IDE qui le supporte.

Si vous utilisez  gradle vous n'avez qu'à ajouter la dépendance suivante
compile group:'net.code-story', name:'http', version: '1.51'

Après pour démarrer un serveur web sur le port 8082 vous n'avez qu'une classe à écrire
public class Application {

    public static void main(String[] args) {
        new WebServer(routes -> routes.get("/", "Hello World")).start(8082);
    }
}

Plutôt simple non? Prenons un autre exemple un peu plus évolué où l'on passe un paramètre dans une route et où on fait appel à un controller

public class Application {

    public static void main(String[] args) {
        new WebServer(routes -> routes
                .get("/", "Welcome")
                .get("/hello/:who", (context, name) -> "Welcome " + name)
                .add(HourController.class)
        ).start(8082);
    }
}

public class HourController {
    @Get("/date")
    public Date date() {
        return new Date();
    }
}

Nous avons toujours besoin de générer des pages statiques côté serveur pour afficher quelques informations, de la documentation, ou lancer des tâches particulières. fluent-http interprète automatiquement les documents que vous placerez dans le répertoire app. Par défaut ils sont traités en mode
  • HTML (.html, .md, markdown, .asciidoc)
  • CSS (.css, .less)
  • Javascript (.js, .coffee, .litcoffee)
  • PDF (.pdf)
  • Images (.jpg, .jpeg, .gif, .png)
  • Archive (.zip, .gz)
  • Text pour tout le reste

Nous allons enrichir notre exemple en créant une page Web index.html dans le répertoire app.
---
layout: default
title: Hello
yourname : Javamind
---

<h1>Hello [[yourname]]</h1>

Vous pouvez utiliser YAML pour définir vos propres variables (exemple ici de yourname). D'autres variables sont utilisées par fluent-http pour utiliser un template handlebars (layout). Vous pouvez définir vos propres templates.

fluent-http ne réinvente pas la poudre non plus et intègre différentes librairies externes
  • jekyll pour générer rapidement des écrans HTML à partir d'un serveur Java. C'est le moteur utilisé par github
  • handlebars comme moteur de template
  • coffeescript est supporté en natif pour écrire du JS avec une écriture simplifée
  • selenium pour les tests d'intégration pour ceux qui veulent faire les tests d'intégration sur le serveur. Pour ceux qui préfère les faire côté application web (Angular dans le TP) vous pouvez utiliser protactor (solution préconisée par l'équipe Angular)
  • ...
Pour revenir à l'atelier, David et Jean Laurent ont confirmé qu'ils étaient de bon speakers, rodés qui se connaissent parfaitement. Au final tout se déroule super bien et il n'y a pas de points de blocage et je  je suis reparti avec l'envie d'essayer fluent-http.

Références
Le site de fluent-http
Un retour  de Nicolas de Loof sur son blog
Les article liés sur le blog de David Gageot où plusieurs projets exemples sont proposés
Le contenu de l'atelier et le point de démarrage

Aucun commentaire:

Enregistrer un commentaire

Remarque : Seul un membre de ce blog est autorisé à enregistrer un commentaire.