Latest news

JavaRebel is a Jolt Awards finalist

The Jolt Awards finalists have been announced and JavaRebel is shortlisted in the Utilities category. ...

ZeroTurnaround at Devoxx

Devoxx is an annual European Java conference with a total of 3200 attendees from 35 countries and again has been completely sold o...

Christmas sale - everything is 40% off!

Christmas sale for ZeroTurnaround products has started and will last till 4th of January 2009. Everything is 40% off. ...

Author Archive

Develop Spring applications without restarts

Thursday, August 7th, 2008

For the impatient: see the screencast and download.

Spring is nowadays one of the most popular frameworks for developing enterprise Java applications. It is therefore our greatest pleasure to announce that with the release of JavaRebel 1.2-M2 and the JavaRebel Spring plugin 1.0-M1 it is now possible to develop Spring applications without redeploying the container.

JavaRebel Spring plugin takes advantage of JavaRebel class reloading to reload Spring dependencies. It supports registering new Spring beans, adding/removing dependencies and adding new MVC controllers and handler methods. These can be done using either XML configuration or annotations.

We have prepared a screencast that demonstrates extending Petclinic sample application on-the-fly. You can also check out the Spring plugin installation manual or just proceed to download.

Although we have tested the plugin in several environments it should be considered a beta release and is not guaranteed to work perfectly in your application. However the plugin is open source and we welcome both your feedback and contributions to make future releases better.

JavaRebel 1.2-M2 Released

Thursday, August 7th, 2008

Although this release has mainly bugfixes in the changelog it has a lot of changes under the hood. We have significantly changed the underlying logic so JavaRebel will handle some corner cases without troubles it may have had before. We have also updated the SDK and improved the plugin support with changes necessary to support the Spring plugin we are releasing simultaneously.

Download it right away or check out the changelog first.

JavaRebel 1.1.2 Released

Wednesday, July 23rd, 2008

The last incremental update to the stable branch fixes a few bugs and backports the OSGi support from the development branch. Check out the changelog or download it now.

Get a free JavaRebel license

Thursday, July 17th, 2008

UPDATE: The campaign has finished and the registration is closed. Congratulations to all who won and everyone who didn’t can still grab the discounted personal license.

This week we ran a campaign at DZone giving away 150 JavaRebel personal licenses for free. The campaign was so successful that we decided to extend it to everyone and give 50 licenses extra to those who register here first. Please provide you real name as we find it hard to apply the EULA to “Mr Chocolate Bear”.

As another part of our summer promotional campaign we will discount the personal licenses for JavaRebel to $49 until the end of summer, so if you don’t get the free license you can still grab one cheaply. This offer extends only to single seat licenses, not organizational ones.

Note also that we plan to change the JavaRebel licensing policy in the near future. The license will become a yearly subscription and will be priced differently. The details will be announced two weeks before the change, but we advice everyone who wants to take advantage of the current prices and perpetual licensing policy to make your purchase soon.

Screencast: Developing Swing with JavaRebel

Thursday, June 12th, 2008
We prepared a short screencast that demonstrates how easy it is to develop Swing applications with JavaRebel. We used the simple Metalworks example (a multiwindow mail client mockup) that comes with the Java SDK and played around with adding fields and buttons.

We start by launching the application with “-noverify -javaagent:javarebel.jar” added to the VM params in the Eclipse launch profile. We first add new field “BCC”, which immediately appears in a new window. We then also add a Send button, which first does nothing. We then proceed to add a listener that points to the new send() method. After we make the body of the method to show a message box it is visible in both new and old windows that had a listener added. Finally we refactor the class adding a field and showing its value in the message box. Note that old instances have the field, but it’s initialized to null, while the new instance works properly.

Since most of the Swing initialization will happen only once, a nice trick we found for making a component reinit itself is using the JavaRebel SDK as follows:

JAVA:
  1. ReloaderFactory.getInstance().addClassReloadListener(
  2.     new ClassEventListener() {
  3.   public void onClassEvent(int eventType, Class klass) {
  4.     if (MyClass.class == klass) {
  5.       java.awt.EventQueue.invokeLater(new Runnable() {
  6.         public void run() {
  7.           reinit();
  8.         }
  9.       });
  10.     }
  11.   }
  12. });

JavaRebel 1.2-M1 Released

Monday, June 9th, 2008

The first release of the new development branch focuses mainly on ease of integrating JavaRebel with third-party frameworks and containers. The following main changes can be found in the 1.2 branch:

  • JavaRebel SDK. The SDK has been refactored with added functionality for processing class bytecode and managing JavaRebel configuration.
  • JavaRebel Plugins. It is now possible to register JavaRebel plugins that can make use of the SDK APIs to integrate with custom containers or frameworks. A howto on creating plugins is also available
  • JavaRebel Integration Project. To test the new SDK APIs and plugins we created the open-sourced Integration project and moved almost all of the custom container/framework integration processors there. This was done partially to simplify the integration process for us and partially to provide an example for creating your own integration plugins. The Integration project is bundled (including source) with JavaRebel, so you can depend on it to create your own plugins. A renamed version of Javassist (to avoid version conflicts) is also included in the Integration project.
  • Package filtering. JavaRebel now allows filtering the instrumented packages using the system properties “-Drebel.packages”, “-Drebel.packages_include”, “-Drebel.packages_exclude” described in the configuration manual included with the distribution.

Using the new APIs and the Integration project we have added full support for Eclipse plugins (and OSGi bundles generally) and initial support for IBM WebSphere. We have also integrated with Commons-EL, to update metadata whenever classes change.

As you can see we put a lot of effort into making third-party frameworks as easy to integrate with as possible. Although we will continue to add support for more of the popular frameworks you are also welcome to contribute to the Integration project or write your own plugin. All open-source projects (including SDK and Integration) are hosted at the zt-oss Google Code project and the discussion list for this is ZeroTurnaround Community.

JavaRebel 1.1.1 Released

Monday, May 26th, 2008

This stable release fixes a number of bugs and introduces a few minor improvements. It also includes support for the free Scala-only license previously available only in nightly builds. Check the full changelog or just download it now.

Scala Goes Dynamic with JavaRebel

Wednesday, May 21st, 2008

As a scalable language Scala can be used both for scripting and for large enterprise applications. We at ZeroTurnaround respect and support the vision of a statically typed and powerful language that builds on the Java platform to improve the productivity and maintainability of Java language.

One of the challenges to productivity is the failure of Java platform to provide a facility to reload changes to classes, i.e. exactly the problem that we solve with JavaRebel. Dynamic languages like Ruby tend to have instant turnaround, whereas developing Java web software is a constant cycle of redeployment.

At the Scala Lift Off unconference we met with the representatives of the Scala/Lift community and decided that we can facilitate the Scala adoption by putting its productivity on par with the dynamic languages. To do that we have created a special JavaRebel license that can only be used to reload Scala classes, which we donated to the Scala community for free use for a year. We will extend this license on a yearly basis to help drive Scala adoption.

We are currently discussing with the Scala and Lift communities the necessary licensing for embedding JavaRebel in Scala and Lift distributions, but until then you can just download the nightly build that includes support for Scala-only licenses and the free license itself (just put it in the same directory as javarebel.jar).

Using the free Scala-only JavaRebel license you can now evolve your application non-stop getting the powerful Scala static type system, higher-level abstractions and dynamic code reloading all in one package.

ZeroTurnaround at JavaOne 2008

Monday, May 5th, 2008

Two ZeroTurnaround core developers will be welcoming you this year at booth #1310. Come by if you have any questions, suggestions or just want to see an awesome demo of JavaRebel in action.

JavaRebel 1.1 Released

Wednesday, April 30th, 2008

JavaRebel is a JVM plugin (-javaagent) that enables reloading changes made to Java class files on-the-fly, saving developers the time that it takes to redeploy an application or perform a container restart. It is a generic solution that works for Java EE and Java standalone applications.

It is our greatest pleasure to announce the immediate availability of JavaRebel 1.1 final release! The release is a result of more than 6 months of work from the ZeroTurnaround team and includes the following changes in comparison to 1.0.x:

  • Unexploded development. Now you can run JavaRebel without having to change your build cycle in the least. See the installation manual and this article.
  • Improved debugging. No need to step through generated methods anymore, see this article.
  • Full reflection support. All changes to methods, fields and annotations will show up also via Reflection API.
  • Dynamic proxy support. Support for JDK, CGLib and Javassist dynamic proxies allows to add methods to classes behind proxies.
  • Full support for Java 1.4. All of the features available in Java 5 are also available in Java 1.4. The installation is also now simpler and supports more containers. See installation manual for details.
  • JavaRebel SDK. With the SDK you have full access to the JavaRebel API and can use it for custom integration or to enable configuration reloading. The community site includes additional support for Google Guice, Stripes and Commons-EL.

To celebrate this release and to prove that 1.1 is stable we will give one free unrestricted personal license for any issue that you help us fix until 1st June. The campaign rules follow:

  • Bug reports must be registered on our support forum.
  • We must be able to fix the bug from your reports and it must require a code change, not just configuration change.
  • All bug reports filed before 1st June (including currently open ones) are eligible even if the issue is fixed later.
  • Duplicate bug reports will receive a free license at our discretion, if we think that the new information helped us fix the bug.

To receive the license send an e-mail to support at zeroturnaround dot com with a link to your bug report and this announcement.

Watch the demonstration screencast (~2 mins), read the feature list or download JavaRebel from ZeroTurnaround.com and give it a try. JavaRebel is commercial software with a free trial for 21 days and developer seat cost at 149$.