Utilisation de JavaRebel avec Eclipse WTP

On a tous plus ou moins entendu parler de JavaRebel, la solution magique qui permet d’apporter la touche PHP à Java en offrant le rechargement instantanée des classes Java modifiées sans avoir à redémarrer le conteneur.

Dans ce billet, je vais montrer comment utiliser JavaRebel avec WTP sur Eclipse (c’est pas si évident que ça).

[Suite:]

Le problème vient surtout du fait qu’Eclipse WTP offre une fonction plus ou moins similaire (moins magique en tout cas) qui consiste à recharger le contexte en cas de changement dans l’un des fichiers de l’application en cours d’exécution.

Pour commencer, téléchargez si ce n’est pas déjà fait JavaRebel.
Il faut noter que JavaRebel est un produit commercial. Il faut donc acquérir une license pour pouvoir l’utiliser ou encore télécharger une version d’évaluation ce qui offre 21 jours d’essais.

J’ai testé avec la dernière version de développement : la version 1.2-M1 est téléchargeable ici (à vos propres risques).

Décompressez ensuite l’archive de JavaRebel quelque part dans votre disque (“/home/djo/java/tools/javarebel-1.2-M1” dans mon cas).

Dans Eclipse, et en supposant que vous avez un projet web nommé “test” par exemple, procédez comme suit:

  1. Lancez le projet comme d’habitude (je déploie sur Tomcat par exemple). Le but est de créer une configuration de lancement.
  2. Arretez le serveur
  3. Ouvrez la fenêtre “Run Configurations” : cliquez sur le flêche à droit du bouton “Run” pour trouver l’entrée concernée.
  4. Localisez et sélectionnez l’entrée correspondante à votre configuration de lancement (“Tomcat v6.0 Server at localhost” par exemple dans mon cas) et Activez l’obglet “Arguments”:

    JVM Arguments

  5. Dans la zone de texte “VM Arguments”, ajoutez:

    -noverify -javaagent:/home/djo/java/tools/javarebel-1.2-M1/javarebel.jar

    Il faut bien sûr adapter le chemin vers JavaRebel.
    Validez.

  6. Jusque la, JavaRebel fonctionne bel et bien. Essayez de lancer le projet et de modifier ensuite une classe quelconque.
    Vous devriez voir dans la console d’Eclipse:

    JavaRebel: Reloading class '.**.**.web.TestPage'.

    Seul hic, WTP recharge lui aussi le contexte, annulant ainsi l’atout de JavaREbel:

    INFO: Reloading this Context has started 
    JavaRebel: Reloading class '.**.**.web.TestPage'. 
    Jun 19, 2008 7:02:49 PM org.apache.catalina.core.ApplicationContext log 
    INFO: Closing Spring root WebApplicationContext 
    Jun 19, 2008 7:02:50 PM org.apache.catalina.core.StandardContext addApplicationListener
  7. Pour régler celà, localisez votre serveur dans la vue “Servers”:

    Vue Servers

    Double-cliquez sur votre serveur, ce qui devrait afficher l’éditeur suivant (après avoir sélectionné la page “Modules” en bas):

    Modules

    Sélectionnez votre module, et cliquez sur le bouton “Edit” (à droite).
    DAns la boite de dialogue qui s’affiche, décochez l’option “Auto Reloading Enabled”:

    Auto reloading

    Validez et enregistrez.

  8. Mainteant, démarrez votre projet et essayez de faire quelques modifications sur vos classes : un simple F5 sur les pages de l’application et les modifications sont incorporés instantanément.

Seul hic: les modifications sur les ressources autres que Java (html, css, etc.) ne sont plus prises en comptes, à moins de redémarrer manuellement le serveur :( (Je continue mes recherches de ce côté là, si vous avez des idées, je suis preneur !)

En fait, c’etait plutôt un bug de WTP je crois … après quelques essais, rechargement à chaud des ressources marche sans problème et ce indépendamment de JavaRebel.

—-

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: