Sortie de RESThub 1.1-rc1

Sébastien Deleuze Commentaires

A l’occasion de la sortie de la première Release Candidate de RESThub 1.1 , voici une synthèse des principales améliorations par rapport à la version 1.0.

Premier changement majeur, la séparation en 2 projets distincts (mais complémentaires) :

  • Une stack Java basée sur Spring 3 et des webservices REST qui visent à fournir des classes génériques réutilisables et des principes d’architectures pour développer plus rapidement vos applications Java.
  • Une stack Javascript basée sur jQuery, visant à fournir l’outillage et les repères nécessaires au développement d’applications professionnelles (cf. l’excellent article Building Large-Scale jQuery Applications). Elle peut se câbler sur n’importe quelle technologie serveur qui expose des webservices REST (Java, PHP, Python, Ruby, NodeJS). Le projet est désormais hébergé sur 2 dépôts différents (resthub et resthub-js), ce qui permettra de les faire évoluer de façon indépendante, et d’encourager l’utilisation de la stack JS dans d’autres contextes.

RESThub 1.1 rc1

Le nouveau site http://resthub.org héberge désormais la documentation du projet que nous allons encore compléter d’ici au lancement de la version finale.

Le développement de cette version 1.1 a été pour nous l’occasion de réaliser un gros travail visant à améliorer la pertinence des tests génériques proposés par le framework. Les 3 points clefs sont :

  • Désactivation du rollback transactionnel à la fin des tests unitaires proposés par défaut par Spring. C’est pratique pour de petits prototypes mais ça limite la pertinence des tests (pas de vérification des contraintes d’intégrités BDD par exemple).
  • Nouvelle classe de test AbstractResthubTransactionAwareTest destinée à tester vos classes transactionnelles comme celles de la couche service. Cette classe gère les transactions des méthodes qui y sont appelées, mais elle-même n’est pas transactionnelle. Elle simule en quelque sorte le comportement du filtre OpenSessionInViewFilter de Spring.
  • Une intégration Spring DBUnit permet une gestion simple et puissante des données de tests (jeux de données propres à chaque méthode de test).

La sérialisation JSON a été changée. Toujours basée sur l’excellent Jackson (mis à jour pour l’occasion en version 1.7), les annotations Jackson sont maintenant utilisées par défaut au lieu des annotations JAXB. Ces dernières étaient pratiques (une seule annotation pour les sérialiations XML et JSON) mais pas assez souples pour les besoins liés au développement d’applications riches Javascript.

La stack Javascript a elle été complètement réécrite afin de ne plus dépendre de Sammy.JS qui comportait de nombreuses fonctionnalités que nous n’utilisions pas. Nous avons donc réimplémenté une gestion des routes qui garde le même principe, mais qui est beaucoup plus légère. L’autre point qui était gênant avec Sammy.JS est sa notion de contexte, assez problématique quand on essaye de développer une application modulaire utilisant des composants.

La nouvelle stack RESThub JS 1.1 est composée des modules suivants développés sur une base jQuery et jQuery UI :

  • Chargement des scripts : gestion des dépendances transitives et de l’ordre de chargement des fichiers Javascript (basé sur RequireJS)
  • Logging : fonctionnalité de gestion des logs conforme à la norme CommonJS
  • Routes : gestion des routes à la Sammy.JS, permettant l’utilisation de marque-pages même sur une interface riche. Actuellement basée sur les évènements hashchange, le support du Push State HTML5 est prévu prochainement.
  • Bus d’évènements : bus d’évènements permettant de découpler les fonctionnalités de votre application (principe classique publish/subscribe)
  • Templating : Dynamisation de templates côté client, basé sur jQuery Tmpl
  • Repositories : permet de regrouper tous les échanges avec le serveur. Très utiles pour Mocker votre application JS pour la tester sans serveur.
  • Controller : implémentation côté client du pattern MVC, librement inspiré de jQuery MVC.
  • Class : héritage en Javascript, basé sur la version améliorée par Javascript MVC du code proposé par John Resig dans son article Simple JavaScript Inheritance
  • Stockage : abstrait les différents moyens de stockage disponibles dans le navigateur (cookie, localstorage, sessionstorage …)
  • Internationalisation : gestion de l’internationalisation (similaire à ce qui se fait en Java)

Nous aurons l’occasion de présenter ces nouveautés ce soir au LyonJUG.

Tags :