Frequently Asked Questions

Basics

  1. What JRebel is/isn't?
  2. How does JRebel work?
  3. Aren't there any free/open source alternatives that do that already?
  4. What about configuration changes?
  5. Can JRebel be used in production?

Pricing/Licensing 

  1. Free trial
  2. Corporate license
  3. Personal license
  4. Open source developer license
  5. Refunds
  6. Can I use my license on several machines?
  7. Can I use personal license at work?

Installation

  1. How do I install JRebel?
  2. What is exploded and packaged deployment?
  3. What do I have to change in my application for JRebel to work?
  4. How do I know that JRebel is working?
  5. Does JRebel support JVM vendor X version Y?
  6. Does JRebel support application container X?
  7. Does JRebel support framework X?
  8. Do I have to run JRebel in a debugger session?
  9. Can I debug the application with JRebel enabled?
  10. Where can I find installation instructions for my particular environment?
  11. How do I configure my IDE to work with JRebel?
  12. How do I get JRebel working with Maven?

Runtime

  1. How does JRebel know what classes have been changed?
  2. Does JRebel scan all my classes all the time? Isn't that slow?
  3. Does JRebel slow my system down?
  4. Does JRebel make the server start up slower?

Troubleshoot

  1. I installed JRebel and my application doesn't start. What do I do?
  2. I installed JRebel and it doesn't reload classes. What do I do?
  3. I'm getting Java.lang.OutOfMemoryError: PermGen space!??
  4. I get "Too many open files" message?
  5. Why does my IDE show an error “hot code replace failed”?
  6. Why setting a breakpoint in debugger does not work?
  7. Why can’t I evaluate some of the expressions in debugger?
  8. Why do I have trouble setting a conditional breakpoint?
  9. Why do I get NullPointerException when accessing a newly added field?
  10. Why are there extra lines in the exception stack trace?
  11. How to report errors to you? What kind of information include?

Tools/IDEs

Plugins/Extending

  1. What do I need plugins for?
  2. How do I install plugins?

Misc

  1. Where are you guys based at?
  2. Is it true, that Skype, Kazaa and Microsoft are also from Estonia?

Basics

What JRebel is/isn't?

JRebel is JRebel isn't

back to top

How does JRebel work?

JRebel integrates with the JVM and application servers mainly on the class loader level. It does not create any new class loaders, instead, it extends the existing ones with the ability to manage reloaded classes.

When a class is loaded JRebel will try to find a corresponding .class file for it. It will search from the classpath (including an application classpath, like WEB-INF/classes) and from the places specified in the rebel.xml configuration file. If it find a .class file JRebel instruments the loaded class and associates it with the found .class file. The .class file timestamp is then monitored for changes in the loaded class and updates are propagated through the extended class loader, to your application.
JRebel can also monitor .class files in JARs if they are specified in rebel.xml.

Importantly, when loading updates to a class, JRebel preserves all of the existing instances of that class. This allows the application to just continue working, but also means that when adding a new instance field it will not be initialized in the existing instances, since the constructor will not be rerun.

Some common misconceptions:

back to top

Aren't there free/open source alternatives that do that already?

In one word: no. However there are several partial solutions:

back to top

What about configuration changes?

Reloading changes to Java classes is not always enough. Applications include configurations for Java code, annotations, XML files, property files and so on. JRebel uses configuration-specific plugins to reload those changes instantly, just as it does changes to classes. JRebel comes with plugins for Spring, Guice, Stripes, Tapestry 4 and others out of the box. To find out more check out the plugin directory and the plugin section in the faq.

back to top

Can JRebel be used in production?

JRebel is meant and licensed only as a development tool. If you're interested in using the same engine for production updates, check out LiveRebel.

back to top

Pricing/Licensing

Free trial

JRebel's free download includes a fully featured 30-day trial license. If you think that 30 days is not enough you can ask for an extension from support@zeroturnaround.com.

back to top


Corporate license

The Corporate License is licensed to legal entities, including corporations, academical and non-profit entities. When purchasing, just specify the number of developer seats. This number limits the number of simultaneous concurrent employees that can use the software at the same time. 

E.g. when purchasing a corporate 30 seat license the maximum number of developers cannot exceed 30. The license can be transferred to new employees from old ones, but once the number of users exceeds 30 you have to purchase more licenses.

Note, that the only limitation is the number of concurrent users, so you can have JRebel installed on as many machines as you like, as long as the user number is within the limit.

JRebel licenses are granted for one year and must be renewed every year.

back to top

Personal license

A Personal License is meant for individuals. Unlike the corporate license it has two restrictions:

It can be used on any number of machines as long as you're the only one using JRebel on them. 

JRebel licenses are granted for one year and must be renewed every year.

back to top

Open source developer license

The Open source developer license is granted for non-commercial development of open-source projects. It can be requested here. We're happy to support folks working on open source projects.

back to top

Refunds

Refunds are available within 30 days from purchase — with no questions asked.

back to top


Can I use my license on several machines?

Yes.

back to top

Can I use a personal license at work?

Yes.

back to top

Installation

How do I install JRebel?

JRebel installation involves registering the -javaagent (in Java 5 or later) and configuring your application. Please see the installation manual for details.

back to top

What is exploded and packaged deployment?

The classic way of deploying a (web) application to a Java EE container involves packaging all the classes and resources into one file (WAR or EAR) and uploading it to the server, or pointing the server to it. We refer to such type of deployment as packaged.

Most containers also support an alternative way of deploying an application, where you create a directory with a WAR or EAR structure and point the container to it. This is usually referred to as exploded.

back to top

What do I have to change in my application for JRebel to work?

If you are using exploded deployment you just have to set your IDE to compile to the directories in the application classpath (e.g. WEB-INF/classes). 

If you're using packaged deployment you should create a rebel.xml configuration file and put it in the application classpath (e.g. WEB-INF/classes). 

Please see the installation manual for details.

back to top

How do I know that JRebel is working?

If JRebel is installed successfully, the following banner should be displayed in the console or standard output:

##########################################################

ZeroTurnaround JRebel 2.0-RC2 (200903112032)
(c) Copyright Webmedia, Ltd, 2007-2009. All rights reserved.

You are running JRebel evaluation license.
You have 25 days until the license expires.

You will see this notification until you obtain a
full license for your installation.

Visit www.JRebel.com for instructions on obtaining
a full license. If you wish to continue your evaluation
please e-mail to support@zeroturnaround.com.

If you think you should not see this message contact
support@zeroturnaround.com or check that you have your
license file in the same directory as the JAR file.

##########################################################

back to top

Does JRebel support JVM vendor X version Y?

JRebel supports Java starting from 1.4 by all prominent JVM vendors, including Sun, IBM and Oracle. The list of the JVM vendors that JRebel has been tested on can be found on the JRebel product page.

back to top

Does JRebel support application container X?

JRebel supports all prominent application containers including Oracle Weblogic, IBM WebSphere, JBoss AS, Oracle OC4J, Sun GlassFish, Tomcat and Jetty. For a full list see JRebel product page.

back to top

Does JRebel support framework X?

JRebel will reload classes managed by any framework. JRebel also has special support for some frameworks to enabled reloading their configuration. To find out more check out the plugin directory and the plugin section in the faq.

back to top

Do I have to run JRebel in a debugger session?

No.

back to top

Can I debug the application with JRebel enabled?

Yes. You can find out more about configuring your IDE to work better with JRebel in the installation manual, by checking the corresponding box in the Tools category.

back to top

Where can I find installation instructions for my particular environment?

Select your platform in the installation manual.

back to top

How do I configure my IDE to work with JRebel?

Check your IDE box in the Tools in the installation manual.

back to top

How do I get JRebel working with Maven?

Check the Maven box in the Tools in the installation manual.

back to top

Runtime

How does JRebel know what classes have been changed?

JRebel checks the file timestamps of the class files on the filesystem. If the timestamp has changed the new class is reloaded. Timestamps checks happen only when the class is used in the program. Either there is a field lookup, method invocation, static method invocation etc.

back to top

Does JRebel scan all my classes all the time? Isn't that slow?

No, it doesn't. It only checks the class file timestamp if the class is being used in the application.

back to top

Does JRebel slow my system down?

No.  If you see significant decrease in performance please contact support@zeroturnaround.com.

back to top

Does JRebel make the server start up slower?

JRebel needs to do more work on startup (search more places for classes and resources, instrument classes, etc), so some slowdown can be expected. If it's larger than 50% please contact support@zeroturnaround.com.

Troubleshoot

I installed JRebel and my application doesn't start. What do I do?

back to top

I installed JRebel and it doesn't reload classes. What do I do?

There can be tons of reasons but usually the following step-by-step approach solves most of them:

back to top

Why doesn’t JRebel reload the changes in the TEST I made?

There are also some limitations that apply for small tests only. Please read Testing JRebel if you intend to try it on small tests.

back to top

I'm getting Java.lang.OutOfMemoryError: PermGen space!??

If you have a large number of classes the default value of PermGen might no be enough. We recommend increasin your PermGen size at least to 128 MB. Use the flag -XX:MaxPermSize=128m or change 128 to something even larger.

back to top

I get "Too many open files" message?

JBoss's approach for monitoring application descriptor files can cause a message "Too many open files" on *nix machines with a low limit of per user open files. The current solution is to increase the number of filehandles or disabling JBoss URLDeploymentScanner from jboss-service.xml.

The limit of open files can be verified by ulimit -a. Increasing of the limit requires root privileges and can be done for the running of the application server via sudo bash -c 'ulimit -n 8192; sudo -u yourUserName ./appServerStartupScript'. Permanent per user configuration is via editing the /etc/security/limits.conf and adding the lines yourUserName hard nofile 8192 and yourUserName soft nofile 8192 at the end of the file.

back to top

Why does my IDE show an error “hot code replace failed”?

Since JRebel replaces hotswapping it is normal that IDE will show an error when trying to replace the code. Just ignore it, JRebel does not depend on any IDE and will reload the changes when the class in question or its instance is accessed.

back to top

Why setting a breakpoint in debugger does not work?

Sometimes debugger will fail to set a breakpoint. To remedy this just change the file randomly (e.g. add a space in the end of the line). This will resynchronize the lines and class name between the debugger and JRebel and breakpoint will be set successfully.

back to top

Why can’t I evaluate some of the expressions in debugger?

Due to limitations in the Eclipse Java Debugger (among others) we had to alter the current instance “this” variable name to “that”. This means that accessing instance methods and fields directly will fail and you should use “that” instead:

getMySomething() -> that.getMySomething()
this.getMySomething() -> that.getMySomething()

Another problem is that Eclipse does not allow expressions accessing private members (fields and methods). The easiest way to solve it is to temporary change the access modifier to protected.

This means that in many cases just clicking on an expression in class text and inspecting it is likely to fail (if it refers to current instance or private members). What you should do is copy and modify it adding that in front.

An alternative solution to viewing expressions is to assign them to local variables in the class text and then watch the local variable:

String mySomething = getMySomething()

Same trick works for quickly viewing private members.

back to top

Why do I have trouble setting a conditional breakpoint?

For the same reason described above setting a conditional breakpoint can fail, if the expression is not altered. To save some thinking you can just write the condition in the class text and then set the breakpoint inside the condition:

if (myCondition) {
System.out.println(); //Breakpoint
}

back to top

Why do I get NullPointerException when accessing a newly added field?

JRebel will always reload changes to the fields, however newly added fields will not always be initialized:

back to top

Why are there extra lines in the exception stack trace?

JRebel adds some generated classes and methods to allow for class reloading. To distinguish these methods them from the original ones in the stack trace we mark them as ““. The original file names and line numbers are preserved in the stack trace next to the original methods.

back to top

How to report errors to you? What kind of information to include?

When you're reporting issues to us please try to include a JRebel log file with it.

back to top

Tools/IDEs

Plugins/Extending

What do I need plugins for?

Although class reloading is extremely sexy and gives you a great productivity boost there is more that you can do. Reloading framework configuration or framework configured components means that you don't have to redeploy when adding a new Spring bean or configuring a new Tapestry listener. See the plugin page for more information.

back to top

How do I install plugins?

Official plugins at the plugin page and included in the JRebel JAR file (if not stated otherwise). You will need to enable them depending on which framework you are using. JRebel will print out the list of found plugins on application startup and instructions on how to enable those specific plugins.

If you happen to find a JRebel plugin that is not listed at the plugin page and there are no specific instructions on how to install then probably the solution is to drop the plugin in the WEB-INF/lib and check standard output for messages regarding the plugin.

back to top

Misc

Where are you guys based at?

We are based in Estonia , in a small university town named Tartu. Estonia is a small country with a population of the size of San Diego, California.

back to top

Is it true, that Skype, Kazaa and Microsoft are also from Estonia?

Skype and Kazaa were founded in Estonia, Microsoft was founded in the US.

back to top