vendredi 30 mai 2014

Services REST avec SimpleWeb4J

Cet article est le deuxième article de la série sur SimpleWeb4j

Dans le première article on a vu comment démarrer SimpleWeb4j en une ligne de code, dans l'article d'aujourd'hui, nous allors voir comment exposer des services REST en json.

Premiers cas : exposer une String "Hello World"

J'espère que le code est suffisamment simple pour ne pas avoir besoin d'explication.

On peux voir qu le résultat est entouré de guillemets, ceci est du au fait que SimpleWeb4j transforme la chaîne de caractère en json.


Deuxième cas : utilisation d'une variable de route

Cet exemple mérite peut-être un peu plus d'explications. SimpleWeb4j permet d'ajouter des paramètres à la route, ces paramètres sont préfixés de ':'. Pour les récupérer on utilise le paramètre RouteParameters qui est le deuxième argument de notre lambda. Le premier argument quand à lui contient l'objet envoyé dans le request body de la requête, nous ne l'utilisons donc pas.


Troisième cas : objet complexe

Nous avons vu que renvoyer une chaîne de caractère était plutôt simple, voyons maintenant comment renvoyer un objet plus complexe.

On peut donc voir que renvoyer un objet n'est pas plus compliqué, SimpleWeb4j s'occupe de transformer celui-ci en json



J'espère vous avoir donner envie de regarder SimpleWeb4j de plus près, si quelque chose vous manque, n'hésitez pas à le dire ou à faire une pull request sur github.

jeudi 29 mai 2014

ConcurrentHashMap et LongAdder

Le sujet du jour est de réaliser un petit filtre de Servlet pour stocker le nombre d'appels pour chaque url.

Pour réaliser cela, il suffit de lire la javadoc de ConcurrentHashMap et plus particulièrement :
A ConcurrentHashMap can be used as scalable frequency map (a form of histogram or multiset) by using LongAdder values and initializing via computeIfAbsent. For example, to add a count to a ConcurrentHashMap<String,LongAdder> freqs, you can use freqs.computeIfAbsent(k -> new LongAdder()).increment();

L'implémentation est donc très simple :

L'affichage n'est pas plus compliqué :

On a donc une gestion de stats thread safe et performante en une ligne de code :)

mercredi 28 mai 2014

SimpleWeb4J - quick start

Ceux qui me suivent connaissent sans doute déjà SimpleWeb4j. Il s'agit d'encore un framework web donc le but est de pouvoir faire du web en java de manière très simple.

Je n'ai jamais écrit d'article sur SimpleWeb4j, je vais donc écrire une série d'articles sur ce sujet afin de vous montrer la simplicité de ce framework.

Je vais commencer par le classique Quick Start, ou comment démarrer un serveur Web capable de servir des ressources statiques.

Dépendance maven

Ressources statiques

Mettez vos ressources statiques au sein d'un package "public" dans votre classpath.

Classe main

Il vous suffit ensuite de démarrer le serveur :

Et voilà, vous avez un serveur prêt sur http://localhost:9999, pas besoin de déclaration xml ou autre complexité, un simple appel à start suffit.

mardi 27 mai 2014

Scheduler en Java

Si je vous demande comment déclencher une tache récurrente en Java, je suis sûr que certains d'entre vous répondront Quartz...

Ceux qui répondent ça ne connaissent sans doute pas les ExecutorService de Java, et plus particulièrement l'interface ScheduledExecutorService (apparue en Java 1.5...).

Voici donc un petit exemple permettant d'afficher l'heure courante toute les secondes :

Ne vous habituez pas à un article par jour, ça ne va pas durer :)

lundi 26 mai 2014

Un cache en java

Après bientôt un an sans écrire d'article, je vais essayer de me remettre à écrire des trucs... Je ne garanti pas que ce soit intéressant :)

Le premiers de cette renaissance sera sur les caches simples en Java.

Je parle ici de cache non révocable (j'en ai eu besoin très récemment). Voici la classe permettant de faire ceci :

Vous l'aurez compris, cet article cherche a vous présenter la méthode ConcurrentHashMap.computeIfAbsent, cette méthode est apparue en Java 8.

Cette dernière permet donc de remplir notre Map si la clé est absente, et ce de manière Thread safe!

J'espère pouvoir publier le prochain article dans moins d'un an, à bientôt donc :)