RestyGWT et Jersey

Jour 2 !

Arnaud Tournier, le 28-01-2015

RestyGWT et Jersey

Présenté par David Chandler. http://turbomanage.wordpress.com

##

Seulement 15 personnes aux US pour cette conférence (il y avait Singular en même temps). Aujourd’hui la salle est pleine.

Pourquoi RestyGWT ?

GWT-RPC:

  • Gwt-RPC est très facile à utiliser
  • Il ne fonctionne pas avec les clients mobiles natifs (protocole spécifique à GWT)

Avantages de RestyGWT:

  • Faicilté d’utilisation, comme GWT-RPC,
  • Puissance du pattern Commande. Permet entre autres de mettre en placer un cache centralisé, vérifications de sécurité,
  • Peu de boiler plate,
  • Les tests sont faciles à mettre en place.

Allons-y !

http://resty-gwt.github.io

github.com/turbomanage/listmaker

La première chose a faire est de mapper ses données JSON sur des classes Java. (photo) (pas d’annotation !)

Ensuite créer une API de service, contient le path du service, et de chaque méthode. Plus une annotation pour les paramètres de requête.

Il rest à invoquer le servecie. Pour cela, un GWT.create(), puis exactement comme en GWT-RPC : appel asynchrone, récupération des données dans une callback.

Supporte l’héritage

On peut définir un service générique (par exemple un CRUD) puis en hériter pour des types d’objets différents. Bon, dans la vie réelle c’est quand même assez rare que l’application se limite à faire du CRUD.

Pattern Commande

Utilise en interne un dispatcher qui peut être customisé. Par exemple :

    dispatcher.addFilter( new CORSFilter() );
    Defaults.setDispatcher( dispatcher );

Côté serveur ?

On utilise par exemple Jersey qui utilise les annotations JAX-RS.

On crée une classe annotée avec @Path, @GET, …

Dépendance maven à jersey-container-servlet-core qui binde Jersey au contexte Servlet et deux trois autres.

La configuration de Jersey cîté serveur consite en quelques servlets à ajouter dans le web.xml

Authentification ?

Par exemple un filtre

Exceptions ?

Un des aspects les plus faibles du framework ! La technique utilisée est de recharger l’application si une erreur 500 est reçue (envoyée par le serveur si une exception est levée pendant le traitement de l’appel).

Subtilités

  • JSON, plus XML et Text avec l’API directe.
  • CachingRetryingDispatcher.
  • ModelChangeEvent pour configurer le dispatcheur à envoyer des requêtes déclenchée par des événements sur un EVentBus.
  • Gère les champs final (@JsonCreator)
  • Supporte le polymorphisme (@JsonSubTYpes)

Arnaud Tournier, le 28-01-2015