Latest news

JavaRebel 1.1.2 Released

An incremental update to the stable branch of JavaRebel....

Get a free JavaRebel license

We will give away 50 personal JavaRebel licenses to those who register first. Also personal licenses will be discounted to $49 unt...

JavaRebel offers free licenses to JavaBlackBelt brown belts

JavaRebel offers permanent licenses to all JavaBlackBelt's brown belts. This is a personal 1 seat commercial license that you can ...

Archive for November, 2007

JavaRebel 1.0 Final Release Countdown

Tuesday, November 27th, 2007

With the release of the first release candidate the final release of JavaRebel is approaching fast. Although there will be no new features in the final release we will also release an Eclipse plugin that integrates JavaRebel directly with WTP. You can expect the final release before mid-December.

Let us remind you that the early adopter discount will only be valid until the final release. After it is over the price of a JavaRevel 1 seat license will be 150$ with volume discounts adjusted accordingly. Hurry up with your JavaRebel purchases!

JavaRebel 1.0 RC1 Released

Tuesday, November 27th, 2007

We have finished working on JavaRebel features for the 1.0 release and will now focus on fixing the last issues. The first release candidate includes the following changes as compared to the previous milestone:

  • Reflection support. Methods added to classes will be properly visible via the Reflection API under Java 5+.
  • Eclipse PDE support. Plugin code can now be reloaded using JavaRebel. See this post and screencast for details. Instructions are in the installation manual.
  • IntelliJ IDEA plugin development support. Plugin code can now be reloaded using JavaRebel. Instructions are in the installation manual.
  • Java EE container support. We now support Orion and Caucho Resin under Java 5. Instructions are in the installation manual.
  • Custom classloader support. If JavaRebel doesn’t officially support your container or you use a custom classloader there is a good chance it will work now. See this article for details.

Reworked IDEA JavaRebel Debugger Plugin

Wednesday, November 21st, 2007

IDEs can be cranky when it comes to debugging applications that use JavaRebel. To fix this issue with IntelliJ IDEA we have a released a plugin. The plugin can be downloaded or updated straight from your IDEA installation. The current version requires at least IDEA build 7364.

This plugin uses a different approach to adding breakpoints and is tested to work with JavaRebel enabled and disabled projects. In some cases IDEA adds an exclamation mark to the breakpoint indicator, the breakpoint still gets set.

The plugin is licensed under Apache License v. 2 and is bundled with source code. If any of the community readers use IDEA, please give the new version a go and let us know how it went.

If you don’t know how to setup IDEA and JavaRebel read the JavaRebel and IntelliJ IDEA tips.

Note the plugin is an effort started by Pieter Degraeuwe to enable support for debugging JavaRebel enabled applications under IntelliJ IDEA.

Debunking JavaRebel Myths

Tuesday, November 20th, 2007


As JavaRebel matures and gets more and more into the spotlight we get the same arguments against it repeated again and again. It seems that it is hard for the skeptics out there to believe that we and not “insert your any huge company here” came up with such a useful and long needed invention. We decided to spread some light on the most outrageous claims out there.

Myth nr. 1: JavaRebel doesn’t do anything

Usually formulated as “JavaRebel just runs redeploy when classes are changed. My container already does that!” or even “It just compiles classes in a loop, a 3 line Perl script would do better!”.

The answer is simple: JavaRebel reloads compiled classes without redeploying the application. By reloading we mean that whatever changes you did to the code are instantly visible in your application. This is subject to some constraints (extends and implements changes cannot be propagated this way), but there is definitely no redeploying happening behind the curtain. All object instances are preserved, which means that your application just continues running. And as far as we know there are no comparable tools out there at the moment.

Myth nr. 2: JavaRebel just uses hotswapping/class redefinition

Nope. In fact although JavaRebel uses the “-javaagent” it does not use hotswapping for any of the reloaded classes. What’s more JavaRebel works fine on Java 1.4 where no hotswapping is available without tapping through JNI. It is not a simple hack/wrapper on top of hotswapping and uses an approach that would work even if there would not be any hotswapping in Java at all.

Myth nr. 3: Container/Framework/Application X already does this

Perhaps. There is a well-know approach for reloading “managed” classes that we have even documented some time ago. However it only works when the object graph can be completely reconstructed — for example it is serializable. This works for some classes in some frameworks (e.g. RIFE, Tapestry 5), but it is only limited to that. JavaRebel works on all classes, all objects, always. You don’t need to worry, which code are you changing, it will always get reloaded.

JavaRebel Boosting Eclipse Plugin Development

Wednesday, November 14th, 2007

Update: the Eclipse support has made it to the final 1.0 release of JavaRebel and development snapshots are not needed to use JavaRebel for Eclipse plugin development.

JavaRebel’s latest development snapshot includes support for the Eclipse Platform. The speedup that we can see with JEE servers when using JavaRebel applies also to other containers. In this case it is Eclipse. Developers can launch their plugins and as they change the source code they can see the results without restarting the new Eclipse instance.

We’ve prepared a small screencast (~5 min) that shows JavaRebel in action speeding up Eclipse plugin development.

The Camtasia Studio video content presented here requires JavaScript to be enabled and the latest version of the Macromedia Flash Player. If you are you using a browser with JavaScript disabled please enable it now. Otherwise, please update your version of the free Flash Player by downloading here.

Configuring JavaRebel for Eclipse is as easy as adding VM arguments -noverify and -javaagent:path/to/javarebel.jar and launch as usual as a Eclipse Application Configuration.

JavaRebel Integration and Custom Class Loaders

Tuesday, November 13th, 2007

The functionality described in this article is available at the moment only in JavaRebel nightly builds.

One of the main problems that comes up with JavaRebel is compatibility with a multitude of platforms for application development. Just recently we implemented support for Orion, Resin and Eclipse, with many more awaiting our attention. The main reason for this is that to reload the classes we first need to determine where they are located on the file system. The only place to get such knowledge is the classloader, which does the actual resolving. And different classloaders may do that differently — therefore the trouble in supporting them all.

However in some cases integration should be easier. Specially, many custom classloaders will just inherit from URLClassLoader and delegate the actual loading to it. Other classloaders will override some of the logics, but provide the correct location of classes on the file system via getResource() URLs with “file://” protocol. We have implemented generic support for both these cases and will review the necessary steps here.

The following steps will currently only work with Java 5 installation mode (”-javaagent:javarebel.jar -noverify”).

Step 1: URLClassLoader support

So what do you need to do to enable generic support for URLClassLoaders? Absolutely nothing! If this is the case your application (or server, or platform) should just start working and reloading those classes. We have tested this with Tomcat and Jetty, which both feature URLClassLoader derivatives and it works like a charm.

Step 2: Custom class loader support

So what if it doesn’t “just start working”? This means that either your classloader isn’t a derivative of URLClassLoader or it does inherit some functionality, but overrides the critical one. For this case we have another trick up our sleeves.

First you need to determine the class name of the classloader in question. The easiest way to do it is put the following line in any class that will be loaded by that classloader (e.g. in a web application case it could be a servlet class):

System.out.println(getClass().getClassLoader().getClass().getName());

This will print the name of the classloader class right out to the console. Let’s assume the name was “com.acme.CustomClassLoader”. In that case all we need to do is pass it to the JavaRebel agent like this:

-noverify -javaagent:javarebel.jar=com.acme.CustomClassLoader

Sometimes there could be several different custom classloaders and in such a case a comma-separated syntax should be used:

-noverify -javaagent:javarebel.jar=com.acme.CustomClassLoader1,com.acme.CustomClassLoader2,...

This should get most of the custom classloaders to work.

Step 3: Contact ZeroTurnaround

The features described in this article will work in most cases. However sometimes class loaders are trickier and we need to do some work to support them. As an example, both Orion and Resin were integrated using the generic methods, whereas Eclipse was not. The problem with Eclipse was that it features OSGi classloaders, which have an internal “bundle://” resource protocol and some work needs to be done to determine the actual files behind the resources. So if you find that no matter what you do you can’t get the classes to reload just contact ZeroTurnaround via support@zeroturnaround.com and we will be glad to help!

JSP Weaver 1.0 M2 Released

Tuesday, November 6th, 2007

Usually JSP is first translated to regular Java code and then compiled into a Java servlet. JSP Weaver eliminates the Java generation and compilation stage by interpreting the JSP files on-the-fly. This reduces the time taken to reload a JSP up to 50 times bringing it from seconds down to milliseconds.

We have launched the next milestone of the JSP interpreter JSP Weaver. This release brings you the long awaited JSP standard syntax support and includes several fixes. All the known limitations have been addressed we are getting ready to release the final version. Now JSP Weaver supports full JSP specification from 1.0 to 2.1. However we do not support Java 5 language changes like generics and enums in scriptlets at the moment.

JavaRebel 1.0 M3 Released

Monday, November 5th, 2007

We are glad to announce the immediate availability of JavaRebel 1.0 M3! Thanks to all the feedback we received from our users this release is greatly improved in terms of installation simplicity, compatibility, stability and performance.

Since previous version suffered from some problems that stopped our users from taking full advantage of JavaRebel we decided to restart the evaluation period with this release. So you are free to try JavaRebel for 14 days whether you have used the previous version or not.

JavaRebel 1.0 M3 features the following changes:

  • Simpler installation. Now to install JavaRebel on Java 5 you need only to add “-noverify -javaagent:javarebel.jar” to the command line.
  • Better performance. This especially concerns startup times and background CPU usage. Some users have reported 2-3 times faster application server startup with this version than with previous.
  • Improved compatibility. We have worked hard to make JavaRebel play well with others. Special thanks to Scala, Tapestry and Mule communities.
  • Expanded support for Java 1.4. We now support in addition to BEA Weblogic 8.x also Oracle OC4J 9.x, 10.x and Tomcat 4.x.
  • Numerous bugfixes. Thanks to your bug reports we have fixed a large number of problems with the previous version. This release should be considerably stabler and work out-of-the-box on all supported systems.

See changelog for details.

Visa/MasterCard Direct Payment is Available

Thursday, November 1st, 2007

Since we received some complaints that MoneyBookers is less than comfortable to use in United States we have put up a direct credit card payment system. Sorry to all of you inconvenienced by this!

We also have now some backup payment methods so if neither credit card nor MoneyBookers.com suits you please let us know via sales[at]zeroturnaround.com.

In addition to this we have specified our policy on updates and refunds: all updates will be free, refunds are available with no questions asked during 30 days.