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 the ‘blog’ Category

JavaRebel offers free licenses to JavaBlackBelt brown belts

Tuesday, July 8th, 2008

JavaRebel offers permanent 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.

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$.

JavaRebel Tutorial - Tomcat & Windows

Thursday, April 3rd, 2008

Everybody does not have a standard installation of a JEE container and a development environment. As JavaRebel installation is a matter of adding -javaagent:path/to/javarebel.jar -noverify flags to the JVM, it can always be installed but exact configurations differ from one development environment to another. Rob Sinner has documented how he configured his environment on Windows running Tomcat as a service to support zeroturnaround with JavaRebel.

JavaRebel Goes AI

Tuesday, April 1st, 2008

If anyone still doubts this announcement was an April Fool’s hoax. Thank you all for laughing!

As the Java programmers embrace JavaRebel we hear the same complaint again and again:

I used to take a coffee and chat with my friends while my application was deploying. Now that code reloads instantly I just can’t explain the breaks to my manager!

Since our customer satisfaction is most important to us we started working on making breaks painless. Since JavaRebel anyway must monitor all of the changes to the code, we projected that it could continue programming in the same pattern even when you’re away. After investigating the latest in machine learning we chose to use Support Vector Machines with a proprietary kernel that quickly learns your personal programming style.

This way, when you go to a break JavaRebel will continue to make changes to the code in the same pattern as before. Which means that your breaks are just as productive as working! Of course JavaRebel will not see the specification, therefore it is limited to writing unit tests and fixing simple bugs in the code.

David Pollak, father of lift and JavaRebel enthusiast:

I tried the JavaRebel AI module… it’s clearly smarter than I am and a better programmer… I just hope no-one in the lift community finds out.

Nathan Hamblen, of Coderspiel, had the following to say

I was surprised to learn that the singularity had arrived through an elaborate extension of “generate getters and setters.” But now that my JavaRebel AI has decompiled and rewritten itself (and most troubling of all, broken its license restrictions), I’d like to be the first to welcome our new robot overlords. Can I get you anything?

Not all responses were positive. Andreas Andreou, Tapestry committer and official Apache troll hunter:

From a recent study we conducted within our company, it was found that the JavaRebel AI module, however ingenious, can seriously harm one’s health. More specifically, out of 6 smokers that were forced to quit it due to Javarebel (not much spare time left for it), 5 have picked up their old habit again (too much spare time) and the sixth has left his PC in auto-pilot and gone on never-ending vacations.

The JavaRebel AI Module 1.0-M1 is available for download. Check out the screencast introducing the new features. A free trial is available, for the quote e-mail support at zeroturnaround dot com. No refunds.

Integrating JavaRebel with Spring

Wednesday, March 12th, 2008

We have started working on integrating JavaRebel with the Spring Framework. First we are concentrating on annotation based configuration and then see what can we do with changes in the XML configuration files.

JavaRebel detects added/removed/changed annotations so reloading the changes is a matter of finding the right spots in the code that test for existence of certain classes and their annotations. The simplest solution on failure is to just refresh the context and try one more time. If it fails anyway the extra time relooking is not expensive.

Lets take an example. We are using the Petclinic sample that comes with Spring. Lets add a new controller.

package org.springframework.samples.petclinic.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class NewController {
    public NewController() {}

    @RequestMapping(“/newWelcome.do”)
    public void welcomeHandler() {}
}

And create a newWelcome.jsp also. Lets try to visit the url petClinic/newWelcome.do now. Of course we get an 404. Lets look at the code in DispatcherServlet that looks for the mappings.

Iterator it = this.handlerMappings.iterator();
while (it.hasNext()) {
   // looking for the handler
   …..
   return handler;
}
return null;

Lets make this code refresh the application context if null is returned and after the refresh try one more time.

if (AbstractRefreshableApplicationContext.class.isAssignableFrom(getWebApplicationContext().getClass())) {
 ((AbstractRefreshableApplicationContext)getWebApplicationContext()).refresh();
 // look for the handler again
 // …
}

What does it give us? Adding/changing new controllers is a matter of refreshing the context. Basically all integrations boil down to reiniting some internal state to take into account the changes.

On error we are falling back to give it one more try. Actually this example will find the newly added controller without JavaRebel because the refresh of the context will scan for the new class files. Of course all the other adding/changing/removing classes/methods/annotations etc. will need on-the-fly class reloading.

The status of integrating JavaRebel with different projects can be seen from our Google Code page. If you need help with your own integration just use the forum or drop us a line at support email.

JavaRebel 1.1-M2 Released

Monday, March 10th, 2008

The second milestone of the 1.1 release is available for download!

The changes include improved support for dynamic proxies (JDK, CGLib and Javassist variaties), better classloading behaviour, better debugging experience and more. Also the JavaRebel log (enabled by adding “-Drebel.log=true” to the JVM command line) is no longer encrypted, providing you with much better feedback on JavaRebel’s behaviour.

The next release will focus on integration with frameworks (Spring being the most important), improved SDK and JAR reloading support. We expect to release 1.1 GA in mid-April.

ZeroTurnaround team blog at dow.ngra.de

Thursday, March 6th, 2008

Since in the past there were some misunderstandings between what are the official announces of ZeroTurnaround and what is the team personal opinion we decided to use this site for official announces and articles only. However same members of our team that entertained you here have for some time been writing at dow.ngra.de. This is their personal blog which does not in any way represent the policy or opinions of our company.

Configuring IDE Debugging with JavaRebel

Tuesday, March 4th, 2008

One of the inconveniences that our users frequently report is stepping in/out of the code managed by JavaRebel. However we have found that most IDEs today provide a way to filter out JavaRebel methods and in this article we will show how to configure Eclipse and IDEA to make your debugging as pleasant as ever.

To configure Eclipse go to Window -> Preferences and from there to Java -> Debug -> Step Filtering (or just search for “Step filtering”). Enable step filters and “Filter synthetic methods”. Make sure that “Step through filters” is also on. Now enable all the default filters and add three package ones:

  • RebelMethodAccessor*
  • com.zeroturnaround.*
  • org.zeroturnaround.*

Result should look like this:

In IntelliJ Idea open up debugger properties (File - Settings - Debugger). On the lower left corner of the debugger settings page make the necessary changes. Be sure to tick “Skip synthetic methods” checkbox and add the necessary class filters. See screenshot:

ZT patched Commons-EL - lookup newly added properties

Tuesday, March 4th, 2008

Commons-EL is a widely used JSP 2.0 Expression Language Interpreter from Apache. It lets you easily access and manipulate application data in JSP files without requiring the use of scriptlets. Of course commons-el has caching mechanism in place so that newly added/changed fields are not visible in the EL until application redeploy. We have released a small patch and a custom build of the commons-el that lets you access the newly added/changed fields without the limitations. Hopefully this patch will be accepted to the unplanned commons-el 1.1 version.

JavaRebel 1.0.3 and 1.1-M1b Released

Wednesday, February 20th, 2008

Thanks to an influx of users that we have gotten lately we have found and fixed a number of issues in JavaRebel. The following fixes went into both stable and development releases:

  • JBoss support has been greatly improved, side-by-side SAR deployments are now supported
  • GlassFish no longer crashes because of missing LogManager
  • Fixed AbstractMethodError occuring in some cases
  • Final fields now appear as final also through Reflection API

The following fix was considered more dangerous and went only to development release:

  • Fixed a JavaRebel failure on a virtual and static method with same names and similar parameters.

We suggest to users of JBoss and GlassFish that had trouble before to try using the new release. Special thanks goes to Jürgen Denzel, who helped us identify and fix most of the issues.

We are working on 1.1-M2 that should be released next week, but since a lot of you use the 1.1-M1 release we decided to refresh that one as well.