Blog

As we have previously announced we are going to introduce pricing changes to JavaRebel licenses after 15th September.

The current perpetual license price will be changed to $249 per license. The volume discounts will apply as follows:

Seats 1 – 9 10 – 24 25 – 49 50 – 99 100 – …
Cost $249 $224 $199 $174 $149

We will also introduce a new annual subscription license priced per year as follows:

Seats 1 – 9 10 – 24 25 – 49 50 – 99 100 – …
Cost $99 $89 $79 $69 $59

A new support package with annual subscription will be introduced. The package will include direct contact with the developer team, guaranteed response times and early access to fixes and plugins.

We will continue to sell a non-transferrable personal license priced at $99. We will also continue to issue free licenses to open-source projects.

You may purchase licenses at the current price until September 15th.

This double release is a result of our active users submitting quite a few bugs. 1.1.4 includes among others fixes to regression that 1.1.3 still failed to fix, while 1.2-RC1 starts the countdown to the stable release of the 1.2.x branch. These releases also include support for time-limited licenses. Proceed to download.

There has been a lot of discussion regarding the use of JavaRebel with Eclipse Web Tools Project (WTP). JavaRebel does work with WTP but the configuration is not that straightforward. In this article we’ll try to give step by step instructions on how to make WTP and JavaRebel get along.

The article is divided into two parts. If you have JavaRebel installed under WTP you can skip to the configuration section. If you are an old time WTP user just enable autopublishing and disable auto reloading for modules.

JavaRebel Installation under WTP

Lets get started by downloading the JavaRebel zip archive from the download page. Unzip the archive somewhere on your harddisk. Copy the javarebel.jar from the uncompressed folder to a location that you can use later on. We’ll assume on Windows that this is c:\javarebel.jar and on Linux /home/john/javarebel.jar.

We’ll configure the startup of the container next. I will be using Tomcat v6.0 version. Open up the “Run Configurations” dialog from the Eclipse menu Run » Run Configurations. You should see the following dialog.

Click for original size - Run Configurations dialog

Next open the (x)= Arguments tab in the dialog and edit the VM arguments text area as seen on the next screenshot. Add the following option to the end of the area.

Windows
-noverify -javaagent:c:\javarebel.jar

Linux
-noverify -javaagent:/home/john/javarebel.jar

Click for original size - Run Configurations JavaRebel Configured

Now apply the settings and run the configuration. You should see the following message in the console output.

Installation Confirmation

You have installed JavaRebel under WTP now. Next you need to configure some WTP options so that WTP auto publish would not interfere with JavaRebel class reloading.

Automatic publishing should be enabled in the server configuration. Double click on your server name and a configuration page opens. Under the Publish section you should have the Automatically publish when resources change option selected. I’ve outlined the automatic publishing settings in the following screenshot.

Click for original size - Automatic Publishing Settings

All your modules should have Auto Reload disabled. You can achieve this by opening the Modules tab of the server configuration and editing each module to disable auto reloading.

Click for original size - Disable Auto reloading

This is it. Once you have these configurations in place and you have restarted the container you are ready to use JavaRebel with WTP.

Make changes to your Java source files and they will be reloaded by JavaRebel. Make changes to your static content under you WebContent and they will be copied by WTP to your deployment folder.

If you have any questions or problems about setting up WTP and JavaRebel leave a comment or send an email to support [at] zeroturnaround.com.

Eclipse 3.4 and WTP 3.0 were used to test the functionality. The article is inspired by Utilisation de JavaRebel avec Eclipse.

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.

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.

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.

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.

JavaRebel offers permanent (licensing policy changed on 9th of March) annual licenses to all JavaBlackBelt‘s brown belts. This is a personal 1 seat commercial license that you can use to speed up your Java development. If you don’t have a brown belt yet, start taking the exams. This is the fifth and currently strongest belt offered so it won’t come easily.

To apply for a free license just send a link to your brown belt profile from the email used at JavaBlackBelt to support[at]zeroturnaround dot com. We’ll get back to you with your license.

JavaBlackBelt is a community for Java & open source skills assessment. It is dedicated to technical quizzes about Java related technologies. Read the full announcement from their news archive.

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]
ReloaderFactory.getInstance().addClassReloadListener(
new ClassEventListener() {
public void onClassEvent(int eventType, Class klass) {
if (MyClass.class == klass) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
reinit();
}
});
}
}
});
[/java]

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.

« Newer Entries | Older Entries »

Join the Rebellion Facebook Twitter RSS feed