JRebel : Retour d’XP

De fgaujous dans Menu mobile

20 déc 2012

Vous êtes développeur Web JAVA et vous passez des heures à regarder la console de votre Serveur d’application lors des redémarrages pour prendre en compte vos modifications ? JRebel est fait pour vous !

What is it ?

JRebel est développé par une société américaine ZeroTurnaround (site officiel : http://zeroturnaround.com/). Il est composé de 2 parties JRebel (L’objet de cet article) et Live Rebel (Pour un futur article ;-) ).

Pour résumer rapidement, JRebel est, en tant qu’utilisateur,  un plugin Eclipse, qui permet de recharger à la volée des modifications de votre code source sans avoir à redémarrer le serveur.

Voici la liste des modifications prises en compte en comparaison avec la JVM Hot Swap (Processus depuis la JVM 1.4 ) : :http://zeroturnaround.com/software/jrebel/features/#headline

Tests :

Nous avons testé JRebel sur des projets avec différentes technologies : Spring MVC, Struts 2, Tiles, Hibernate, Portlet (JSR286) Liferay.

Voici une liste non exhaustive des différents changements pris en compte à la volée qui nous facilite maintenant la vie  :

  • Hibernate : HBM et annotation JPA
  • Templates Tiles
  • Fichier Struts.xml (Modification des Routes…)
  • Modifications des Annotations Spring à la fois MVC (@RequestMapping,@PathVariable…) et des annotations Spring IOC (@Autowired…)
  • Et même des changements importants comme l’ajout de nouveaux controlleurs ou d’entités.

En ce qui concerne Maven, toutes les dépendances sont elles aussi rechargées correctement (Si les projets sont configurés en dépendance type « projet » dans le ClassPath d’Eclipse).

Pour une architecture en couche WEB / Service / Core (métier) , vous pouvez mettre à jour toute la chaine sans redémarrer ou sans lancer « maven clean install…. »

Voici des cas d’utilisation qui nous font gagner vraiment beaucoup de temps :

  • Portlet Liferay developpées avec Spring MVC et Hibernate
  • Développement de front office en JS avec appel AJAX : Les différents Web Services JSON peuvent être ajoutés ou modifiés à la volée pour continuer les développements de l’interface sans perturbation.
  • Ajout de nouvelles URLs avec Controlleurs associés
  • Injection de nouveaux services ou DAO (oubliés avant démarrage du serveur ou pour ajouter de la logique métier)

Après des tests concluants avec la version d’essai (gratuite mais limitée à 14 jours), nous avons, sans hésitation, acheté des licences pour l’équipe de développement car ça fonctionne vraiment bien.

Serveurs d’applications :

Nous avons utilisé ce plugin avec Tomcat 6 directement intégré à Eclipse mais la plupart des autres fonctionnent également (JBoss, Resin, WebSphere…Voir plus)

JRebel peut être exécuté avec un plugin Maven et permet ainsi, d’utiliser JRebel avec Jetty lancé depuis Maven :

<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>jrebel-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>

 

Interface JRebel

JRebel possède une interface de configuration (JRebel Config Center) permettant de configurer les serveurs et projets lancés avec JRebel ainsi que les différents frameworks qui doivent être analysés :

 

 

Gain de temps

En moyenne, par jour, environs 20 redéploiements ( ~= 30 s) par développeur sont supprimés (Des démarrages assez longs à cause du chargement d’un grand nombre de classes Hibernate et du contexte Spring) . En effet, le redémarrage s’effectue maintenant, 3 à 4 fois dans la journée.

Pour une équipe de 10 développeurs le gain est considérable :  10 * 20 * 30 = 6000 s ou 1h40 par jour.

 

Prix

Tout ceci a un prix, JRebel possède 3 catégories de licences :

  • Personnel  : 1 développeur
  • Basic : Multiples licences mais non flottantes
  • Entreprise : Multiples licences flottantes avec serveur de licences.

Pour notre entreprise, nous avons choisi, la licence entreprise. Le serveur de licences installé en interne dans notre société, nous permet d’avoir des statistiques d’utilisation :

 

 

 Problèmes

Quelques problèmes ont été remontés par l’équipe de développement :

  • Modification à la volée impossible des HBMs ou annotations JPA pour rajouter des champs ou modifier le nom des colonnes
  • La modification d’une classe parent n’est pas prise en compte dans les classes enfants sans modifier (ajout d’un espace..) et sauvegarde de celles-ci.
  • Le lancement d’un serveur avec JRebel nécessite plus de mémoire allouée (MaxPermSize).
  • Quelques difficultés à la première utilisation à bien configurer JRebel sur les projets.

 Retours d’expérience des développeurs

Après maintenant 6 mois d’utilisation, le constat est unanime, il serait très difficile de revenir à l’ancien temps sans JRebel :

« L’essayer c’est l’adopter ! »

« JRebel, ou l’impression de coder en php ! »

« JRebel apporte un réel gain de temps en évitant les redémarrages intempestifs et évite la déconcentration en attendant le redémarrage du serveur. Avec JRebel, la vie est belle ;-) . »

 

 

Commentaire

4 − = deux

iMDEO recrute !

REJOIGNEZ-NOUS

A la recherche de nouveaux talents (développeurs web et mobile, chefs de projet,...)

Voir les annonces