| Hello all, 
 I wanted to share my experiences with running web applications with
    m2e-wtp and Webby combined with JRebel [1]
 JRebel is a tool that enhances JVM Hot Swap mechanism, so that most
    changes can be applied dynamically to classes already loaded in
    memory.
 It aims to fix the very common problem in J2EE application
    development - unacceptably long time between introducing a change in
    the code and seeing the result in a running application.
 It is a commercial tool, but the price is reasonable and free
    licenses for OSS projects are available.
 
 JRebel is available both as a standalone application that plugs into
    JVM using javaagent mechanism, and as pulgins for Eclipse, IDEA and
    NetBeans.
 
 First, I've tried m2e-wtp + JRebel Eclipse plugin. The installation
    went smoothly, and I was able to enable JRebel agent for the Tomcat
    server that I used as the target for m2e-wtp assembled webapp.
 I've run into a minor problem - disabling automatic publishing from
    WTP server UI did not work, I had to edit server.xml by hand. This
    is probably not related to neither m2e-wtp nor JRebel.
 The application startup was considerably slower than without JRebel
    - I expected that because classes had to be instrumented. Reloading
    changes in the code worked as advertised, however build times after
    changing a single Java source file were very noticeable - about 5s.
    This certainly depends on the speed of the machine and size of the
    application, so your mileage may vary.
 
 Then I decided to try JRebel with Webby. I've uninstalled m2e-wtp
    (and most WTP also) and installed Webby. Of course Webby run
    configuration editor does not have JRebel tab, but I'm sure one
    could be added as an optional extension if there's interest from the
    community.
 Fortunately standalone JRebel can be plugged in very easily. In the
    JRE / VM arguments for a Webby launch configuration, I've added the
    following:
 
 -javaagent:${env_var:JREBEL_HOME}/jrebel.jar
          -Dworkspace.root=${workspace_loc}
 
 This way I could share the configuration with other people on my
    team. workspace.root system property is used in rebel.xml
    configuration file, that specifies the filesystem location of the
    classes that need to be monitored and reloaded on demand by JRebel.
 I've placed this file in src/main/resources folder in my top level
    webapp module and it looks like this:
 
 <?xml version="1.0" encoding="UTF-8"?>
 <application
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://www.zeroturnaround.com"
 xsi:schemaLocation="http://www.zeroturnaround.com
        http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
 <classpath>
 <dir
        name="${workspace.root}/coral-api/target/classes"/>
 <dir
        name="${workspace.root}/coral-browser/target/classes"/>
 ...
 </classpath>
 </application>
 
 I am not using any <web> tags, because Webby
    takes care of providing the J2EE container with up to date resource
    files.
 
 With this configuration I was able to achieve reasonable startup
    time - Webby is really much faster than WTP, and also excellent
    build times - below 1s. Everything worked very smoothly. I was able
    to code and see the results with barely any latency at all! Compared
    to m2e 0.12 + WTP the boost is incredible :)
 
 cheers,
 Rafał
 
 [1] http://www.zeroturnaround.com/jrebel/
 |