Déjà ninja ? Devenez Rebel !

Si vous aussi vous perdez 3 minutes à chaque fois que vous faites un redéploiement, calculez donc combien cela coute à votre client sur : http://www.zeroturnaround.com/jrebel/

JRebel est un outil payant permettant d’effectuer des rechargements à chaud d’applicatif Java. C’est clairement l’outil qui fera de vous un développeur plus productif. Voilà une bonne façon de se faire bien voir, de rentrer plus tôt à la maison ou d’augmenter sa facturation :)

Vous pouvez, en tant que personne, acheter une « Personnal license » et l’utiliser dans le cadre de votre travail. Cette licence ne peut pas être remboursée par votre entreprise. L’achat d’une licence « standard » n’est pas rentable, même payé par votre EURL. Votre client peut également acheter des licences standard mais personnellement, je pense qu’il vaut mieux lui permettre de faire cette économie. Un client n’est pas éternel et un geste commercial est toujours bien vu non ?

Fonctionnement

JRebel est ce que l’on appelle un « java agent » (see : http://blog.xebia.fr/2008/05/02/java-agent-instrumentez-vos-classes/ ). C’est à dire qu’il va instrumenter le bytecode.

Pour que cela fonctionne il faudra donc spécifier à la JVM l’agent JRebel (jrebel.jar).

Cette agent fonctionne de manière très simple, il scrute le classpath à la recherche des fichiers rebel.xml. Ces fichiers permettent de faire un mapping entre l’application (bytecode et ressources) et votre code source. JRebel scan les sources et les mets à jour dans l’application en cours d’exécution. C’est aussi simple que cela.

Vous l’avez compris, pour recharger à chaud votre projet et toutes vos dépendances vous devez avoir un fichier rebel.xml dans chacun des projets (.jar  .war) que vous souhaitez recharger à chaud.

Installation

L’installation de JRebel va simplement copier l’agent jrebel.jar dans le répertoire de votre choix. Il existe également un plugin Eclipse (optionnel).

Comme nous l’avons vu, nous devons fournir un fichier rebel.xml dans chacun de nos projets. Avec Maven, il suffit simplement d’ajouter le plugin maven-rebel, dans le fichier pom.xml :

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

On pourra lancer la génération manuellement via « mvn javarebel:generate »

Ensuite, il suffit de lancer l’application en spécifiant l’agent à la JVM :

-noverify
-javaagent: »C:Program FilesZeroTurnaroundJRebeljrebel.jar »

Si vous lancer votre application via maven (mvn jetty:run par ex), vous pouvez utiliser la variable système  MAVEN_OPTS, ou utiliser « Run configuration » dans Eclipse. Il doit sans doute exister un moyen de le faire dans le pom (via un profil « rebel » par exemple).

Voilà ça fonctionne !

Have fun !

3 Responses to “Déjà ninja ? Devenez Rebel !”

  1. zepouet dit :

    Je me demande bien pourquoi il n’existe aucune JSR à ce sujet. Hotswap certes c’est pas mal mais bon on en est loin :(

    Merci pour l’info. Je vais tester

  2. gorgoroth dit :

    Bonjour,

    Cela fait 8mois que j’utilise JRebel
    Voilà mes conclusions ….
    1 – Changement à chaud d’EJB…bof bof, j’ai souvent du recompiler et redéployer
    2 – JRebel et le mode debug…8 fois sur 10, le mode debug plante, ou pire des variables qui n’existent plus influent sur du code inexistant
    3 – C’est franchement de l’arnaque d’avoir un outil tierce comme JRebel alors que ces problématiques devraient être inclu dans des outils avec J2EE, non? Le fait de perdre autant de temps est synonymes que les développeurs J2EE se trainent des usines à gaz démentes. C’est navrant de voir déployer un JRebel pour voir le résultat lors d’un changement xhtml…
    4 – l’installation complète pour utiliser le mode debug passe par les ‘step filters’ sous eclipse (totalement user friendly)
    5 – Seam et JRebel ne s’aiment pas beaucoup, les injections déconnent au bout de 2,3 hotdeploy

  3. Nicolas dit :

    @gorgoroth : ton retour m’intéresse, quoi exactement dans le changement d’EJB? Dans le cas de rechargement non standard, il semble qu’il faille configurer un plugin :
    http://www.zeroturnaround.com/resources/jrebel-plugins/

Leave a Reply