********************************************
  JavaRebel Changelog                    
********************************************

2.1.1
* Support for Jetty 7
* Preliminary support for GlassFish v3 Preview
* Log4J plugin now reloads changes to log configuration on-the-fly.
* Fixed an issue causing the annotations on constructors to disappear after class reload.
* Fixed an issue with Google Web Toolkit client side classes in hosted mode
* Fixed an issue with FileNotFoundException thrown by JavaRebelResourceServlet
* Fixed an issue with ClassCastException when defining web services in web.xml
* Fixed several issues in the Wicket plugin.

2.1a (7th October)
* Fixed the issue with usage reporting including all classes processed by AspectJ in the report
* Fixed Spring plugin backward compatibility with Spring 2.5.1, 2.5.2 and 2.5.3 (see http://www.zeroturnaround.com/forum/topic.php?id=435)

2.1 (6th October)
* Reworked Struts 2.x plugin
* Brand-new Struts 1.x plugin
* JavaRebel renamed to JRebel
* GlassFish v3 Prelude now supported
* Felix OSGi container now supported
* Apache Tomcat will no longer automatically reload applications when JRebel agent is enabled.
* Updated statistics reporting with the latest redeploy & restart survey report (http://www.zeroturnaround.com/blog/java-ee-container-redeploy-restart-turnaround-report/)
* JRebel will now report anonymous usage stats, including jvm version, container name and other stats that can help us improve the product. You can see the text file with reported data next to jrebel.jar as jrebel.info. To disable reporting add -Drebel.usage_reporting=false to the JVM command line.  
* Improved logging options (-Drebel.log=echo and -Drebel.log=trace).
* Fixed an issue with private static native methods sometimes not called correctly.
* Fixed ArrayIndexOutOfBoundsException when using -Drebel.packages on Weblogic
* Fixed an issue with Spring MVC plugin being disabled
* Fixed a problem that could cause a NoSuchMethodError when updating a Spring bean.
* Fixed an issue with Spring property placeholder configurers not applying
* Fixed an issue with deadlock of Spring plugin
* Fixed an issue with Spring MVC plugin requiring Spring AOP
* Fixed an issue with Resin up to 3.1.5 not starting
* Fixed issues with FileNotFoundException and NullPointerException 
* Fixed an issue with ServletContext paths starting with './'.
* Fixed an issue with JRockit reflection

2.0.3 (25th August 2009)
* Significantly improved Spring classpath* resolution which could previously lead to duplicate beans and conf files to be found.
* Support for IBM WebSphere 6.0
* Statistics now displays the number of elapsed days if less than 30.
* Fixed an issue causing IllegalMonitorStateException to be thrown from changed synchronized methods.
* Fixed an issue that caused AccessControlException on Sun App Server 8.2.
* Fixed an issue that caused a wrong SerialVersionUID to be generated.
* Fixed and issue with Class.getMethods() returning in random order (caused Flex failure).
* Fixed an issue that caused CurrentModificationException in Spring plugin.

2.0.2b (22nd July 2009)
* Fixed a problem with try-catch not working properly
* Fixed Spring plugin compiled with Java 5 in 2.0.2a
* Fixed an issue with autoupdater and Java 1.4.
* Fixed Eclipse not starting with JavaRebel enabled (when developing Eclipse plugins).
* Spring MVC plugin wasn't enabled by default.
* Velocity plugin is now included.
* Reflection performance improvements.

2.0.2a (15th July 2009)
* (Critical) Disabled Spring singleton autoinstantiation after reload (caused too eager instantiation in some complex configurations)

2.0.2 (14th July 2009)
* Property resource bundles now reflect the changes to the property files. This should work without any special configuration from your part, just change the property file and see the changes reflected in your application
* Startup performance improvements.
* JavaRebel will now show usage statistics on startup.
* Resin 3.1, 3.2 and 4.0 are now fully supported
* SAP NetWeaver 7.0 and 7.1 are now fully supported
* Preliminary support for Google App Engine. It should work, but let us know if it doesn't, we're not quite ready to vouch for it yet.
* Directories defined in rebel.xml are now also case sensitive on Windows.
* Spring plugin is now considered stable and enabled by default.
* Spring plugin will now refresh XML files even when no classes were changed and no Spring MVC is used.
* Spring plugin will now instantiate and initialize new singletons eagerly (even if they are not referenced elsewhere).
* Spring plugin now supports springmodules-validator annotation changes.
* Fixed a deadlock in resource lookup (could cause infinite startup on JBoss).
* Fixed a problem with enums being "X is not an enum type"
* Fixed a file handle leak when deploying a web application with rebel.xml.
* Fixed an issue that caused "Class (x) was removed" messages.
* Fixed an issue with backslashes in include/exclude elements of rebel.xml. 
* Fixed an issue that caused NullPointerException on JBoss 5.
* Fixed an issue with @Deprecated annotation and AspectJ.
* Fixed an issue that caused NoSuchMethodError on some (otherwise valid) reloads.
* Fixed an issue with wrong class redefinition causing e.g. problems with JBoss 5 (http://www.zeroturnaround.com/forum/topic.php?id=303)
* Fixed an issue that caused DuplicateMemberException on Jetty.
* Fixed an issue in Spring plugin that could cause an infinite loop when reloading a bean.
* You can now use -Xbootclasspath install option with Java 5+ (it works better on some older JVM versions and JRockit JVM).

2.0.1 (25th May)
* Fixed a deadlock that caused infinite startup.
* Fixed new method parameter annotations not parsed correctly.
* Fixed "this" not resolving in debugger.
* Fixed Spring plugin trying to reconfigure beans created by a FactoryBean.
* Fixed AspectJ plugin with Spring reparsing aop.xml.
* Fixed a NoClassDefFound in Struts 2.x and potentially others.
* Fixed EJB modules not-reloading in JBoss and WL when configured with rebel.xml
* Fixed NullPointerException on WL startup
* Fixed Velocity engine startup
* Improved Servlet Context performance when configured with rebel.xml
* Spring plugin now autowires changed beans that don't have BeanDefinition.
* Added Wicket @SpringBean plugin.

2.0 (25th March)
* Improved ClassLoader().getResources() method behaviour by introducing a new fallback mode (default) for rebel.xml.
* Logging no longer starts without -Drebel.log=true.
* Couple of minor issues.

2.0-RC3 (19th March)
* It's no longer necessary to make changes to web.xml in your project for rebel.xml/<web> to work.
* rebel.xml/<web> now supports nested <include>/<exclude>
* Updated Stripes plugin to 1.0.10
* Fixed a bunch of issues.

2.0-RC2 (11th March)
* Stripes plugin now included
* AspectJ plugin with support for load-time weaving is now included
* Improved Spring plugin performance 
* Numerous fixes to container compatibility
* Numerous Spring plugin fixes
* Fixed issue with signed JARs throwing exceptions.
* Fixed issue with null assignment to added fields.
* Fixed issue with "synchronized" not appearing in Method.getModifier() (could cause NPE).
* Fixed issue with protected inner classes.
* Fixed issue causing ClassNoDefFoundError.
* Fixed issue causing mvn jetty:run to fail.
* Numerous minor and compatibility issues fixed.

2.0-RC1 (20th February)
* rebel.xml now supports patterns, includes, excludes and system property substitution
* Tapestry4 and Struts2 plugins are now also included in the distribution
* Deleting the application WAR will no longer cause exceptions 
* Fixed an issue with Eclipse compiler producing invalid bytecode causing a NoSuchMethodError
* Fixed several minor issues causing a NullPointerException on changes
* Fixed an issue with some classes not processed correctly when loaded after a reflection call.
* Known issue: IllegalArgumentException: com.mypackage.Enum is not an enum type
* Known issue: NullPointerException from switch statement over enums
* Known issue: Resin 3.1, see http://bugs.caucho.com/view.php?id=3339

2.0-M2 (13th February 2009)
* New support for unexploded/packaged deployment including classpath and web resources (rebel.xml)
* Fast boot optimization loads and executes classes much faster before the first change.
* Optimized reflection on unchanged classes.
* Improved debugging on unchanged classes.
* Stack trace in exceptions will be two-three times shorter in many cases.
* Groovy supported out-of-the-box
* EL in JSP 2.1 now sees class changes
* New step-by-step installation manual.
* -Drebel.dirs and -Drebel.packages_include settings are deprecated in favor of the new rebel.xml configuration
* Included plugins (Spring and Guice) are now disabled by default.
* Fixed a problem with security providers now found in the classpath
* Fixed some problems with IBM WebSphere (changed installation instructions!) 
* Fixed several issues in Spring and Guice plugins
* There is a known issue with Resin 3.1, see http://bugs.caucho.com/view.php?id=3339

2.0-M1a (19th December 2008)
* Fixed getField() and getFields() behaving wrong
* Fixed virtual classpath not working with Jetty6
* Fixed an initialization problem with parent-child circular dependencies
* Fixed JBoss, some versions of OC4J and Eclipse/Equinox failing on startup (AbstractMethodError or NoClassDefFoundError)
* Fixed abstract methods appearing as non-abstract via Method.getModifier() (caused CMP on Weblogic to fail among others)
* Fixed a problem with the JBoss proxies
* Fixed a problem with accessing a public method of a deafult visibility class via a public subclass (e.g. StringBuilder.substring() on Java 5+)
* Fixed plugins not working properly on classes already instrumented by JavaRebel

2.0-M1 (3rd December 2008)
This version has too many individual changes to bring them out. Therefore we only outline the major goals. 
 * Startup time and performance overhead. 
   Performance was one of the main goals for this release and we have optimized or otherwise eliminated 
   most of the bottlenecks that made the previous versions so slow for some of the users. 
   There is some work to be done before the final release, but you should see a noticeable difference already.
 * Compatibility. 
   Compatibility was also a large concern for this release. We have devoted a lot of time to tweak 
   reflection and annotations support as well as integration with specific frameworks. 
   We also compiled an extensive test suite that should make JavaRebel work out of the box for most users.
 * Embedded plugins: Spring and Guice.
   We now support distributing the plugins along with JavaRebel instead of downloading and installing them separately.
   With this release we included Spring and Guice, so you should be able to load new components and dependencies
   without redeploying. More plugins will be included as they are stabilized or contributed.
 * Virtual classpath.
   Another concern for many of our users is configuring the existing build/deploy environment to make use 
   of JavaRebel class reloading. Not everyone can use exploded development and -Drebel.dirs have limitations
   in support of added classes and resource propagation. That's why we implemented something we call a 
   _virtual classpath_. The -Drebel.path property behaves similar to the -Drebel.dirs, except that instead of directories 
   you can add WARs directly, with EARs and more advanced options coming soon. 
   Virtual classpath will also propagate new classes and update your resources, like HTML or JSP files. 
   It does require some extra configuration so take a look at the configuration manual (Configuration.html).
   NB! Virtual classpath is only supported on Tomcat, Jetty and WebLogic containers in this release.    
 * Improved API.
   Besides the embeddable plugins we also now support third-party instrumentation. This will allow us to support
   e.g. AspectJ load-time weaving. Unfortunately the plugin itself didn't make it into this release, but since
   the required infrastructure is now in place we can release it retroactively as a plugin. 

1.2.2 (2nd December 2008)
* Fixed a NPE in Method.getParameterTypes()
* Fixed Class.getMethods() not showing some of the added methods
* Fixed a classloader deadlock
* Added support for JBoss 5 

1.2.1 (24th September 2008)
* Missing dependencies are no longer logged to console to avoid confusion
* Fixed an issue with IBM J9 JVM that resulted in a StackOverflowException on some setups (mainly with IBM WebSphere)
* Fixed a regression on Java 1.4 that resulted in an ExceptionInInitializerError
* Fixed an issue with JAR relative paths
* Fixed an issue with OC4J system classloader 
* Fixed an issue with -Drebel.packages loading JARs as (corrupted) classes, could cause ArrayIndexOutOfBoundsException
* SpringSource Application Platform is now supported (see instructions in the installation manual)

1.2 GA (25th August 2008)
* General availability release

1.2-RC1 (15th August 2008)

* Fixed regression in accessing super methods
* Fixed broken setPrimitive() method behavior in java.lang.reflect.Field
* Fixed "native" methods causing a ClassFormatError
* Fixed a error occurring when super classes have a static and non-static field with the same name.
* Added support for time-limited licenses

1.2-M2 (30th July 2008)

* Spring dependency reloading is now available via an external plugin.
* Fixed Reloader.isReloadEnabled() returning true if agent wasn't enabled, but JavaRebel was in classpath
* Fixed a Java 1.4 incompatibility in javarebel-bootstrap.jar generation logic
* Fixed an infinite recursion on some super calls (http://www.zeroturnaround.com/forum/topic.php?id=87).
* Fixed several possible MethodNotFoundErrors
* Fixed Method.getGenericParameterTypes() returning wrong signature (needed for Spring integration)
* Fixed wrong modifiers returned by Method.getModifier() causing problems with AspectJ (http://www.zeroturnaround.com/forum/topic.php?id=91)
* Fixed a race condition in core logics that could manifest as a NPE.
* Fixed CgLib proxies throwing exceptions on initialization. To enable CgLib proxy bypass "-Drebel.allow_bytecode_proxy=true" should be now added to the JVM command line.
* Fixed some JavaRebel messages (like monitored dirs) not showing up properly.
* Improved reflection correctness and performance.

1.2-M1 (9th June 2008)

* 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.
* JavaRebel Integration Project. To test the new SDK APIs and plugins we created an open-source integration project and moved almost all of the custom container/framework integration processors there.
* Full support for Eclipse plugins (and OSGi bundles generally)
* Initial support for IBM WebSphere, please check the installation manual included in the distribution.
* Integration with Commons-EL, to update metadata when classes change.

1.1.4 (15th August 2008)

* Fixed regression in accessing super methods
* Fixed broken setPrimitive() method behavior in java.lang.reflect.Field
* Fixed "native" methods causing a ClassFormatError
* Fixed a error occurring when super classes have a static and non-static field with the same name.
* Added support for time-limited licenses

1.1.3 (12th August 2008)

* Fixed wrong modifiers returned by Method.getModifier() causing problems with AspectJ (http://www.zeroturnaround.com/forum/topic.php?id=91)
* Fixed update notifier choking when update.zeroturnaround.com is unavailable, forbidden or replaced.

1.1.2 (22nd July 2008)

* Fixed a race condition in core logics that could manifest as a NPE.
* Fixed method modifiers not being updated in reflection.
* Fixed an NPE when getting updated method data via reflection.
* Fixed CgLib proxies throwing exceptions on initialization. To enable CgLib proxy bypass "-Drebel.allow_bytecode_proxy=true" should be now added to the JVM command line.
* Improved reflection correctness and performance.
* Backported full support for Equinox OSGi/Eclipse plugins. 

1.1.1 (26th May 2008)

* Fixed package visibility constructors sometimes causing a NullPointerException (http://www.zeroturnaround.com/forum/topic.php?id=63).
* Fixed a NullPointerException sometimes occuring on class reload (http://www.zeroturnaround.com/forum/topic.php?id=78).
* Fixed an IllegalAccessException occuring when calling a super protected method via reflection (http://www.zeroturnaround.com/forum/topic.php?id=65). 
* Fixed Class.getMethods() not returning methods for indirectly implemented interfaces when JavaRebel was enabled.
* Fixed changes to method return type or field type not propagating to reflection (http://www.zeroturnaround.com/forum/topic.php?id=68). 
* Fixed site licenses being displayed as personal licenses.
* Improved compatibility with proxies when "-Drebel.forbid_bypass=true" is enabled.
* Added an experimental hook for receiving class loading notification to the SDK. To enable it add "-Drebel.class_load_notify=true" to the command line.
* Added support for licenses that work only on Scala classes.

1.1 (30th April 2008)

* Changed -Drebel.dirs semantics to always override classes in classpath.
* Fixed Eclipse integration
* Added some helpful messages connected to -Drebel.dirs and Java 1.4 bootstrap generation

1.1-RC2 (28th April 2008)

* Fixed a problem with synthetic attributes messing up with some frameworks. Mainly manifested as NPE when using Spring AspectJ support.

1.1-RC1 (16th April 2008)

* Full support for Java 1.4. Now 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 (http://www.zeroturnaround.com/javarebel/installation/) for details.
* Interface changes are now visible through reflection including changes to annotations.
* Fixed: If you added a primitive non-static uninitialized field to a class JavaRebel would throw a NullPointerException.  

1.1-M3 (9th April 2008)

* JavaRebel now supports unexploded deployment (e.g. WAR, JAR or EAR) by specifying the paths that .class files are compiled to by the IDE (or command line) using the property "-Drebel.dirs=/path/to/classes1,/path/to/classes2,..."
* JavaRebel now supports reloading changes made to classes in JAR files, for that you need to specify "JavaRebel-Reloadable: true" in MANIFEST.MF or name the JAR file ending with a "-reloadable.jar" suffix.
* Improved logging, now all information on where the class is loading from goes to plaintext log ("-Drebel.log=true").
* Added performance statistics logging that goes to plaintext log ("-Drebel.log.perf=true").
* Fixed a problem with Hibernate JPA implementation caused by Synthetic attribute
* Fixed a problem with "AbstractMethodError __rebel_bypass__()"
* Code base refactored to prepare for SDK expansion in 1.1-M4

1.1-M2 (10th March 2008)

 * Enhanced support for dynamic proxies (JDK, CGLib, Javassist)
 * Improved support for missing dependencies
 * Improved classloading behaviour
 * Support for stepping through generated methods in debugger (all generated methods marked "synthetic")
 * JavaRebel log is no longer encrypted (use -Drebel.log=true to see it)
 * JavaRebel will now flush all JavaBean Introspector caches when a class changes
 * Improved error reporting
 * Fixed static methods showing up with suffix "__RS__" in reflection
 * The development of Spring Framework with JavaRebel tested

1.1-M1b (20th February 2008)

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

1.1 M1a (4th February 2008)

 * SDK implementation classes are no longer obfuscated.

1.1 M1 (29th January 2007)

 * Improved reflection support. Now added/removed methods and fields in the reloaded classes will always be reflected correctly in the Java Reflection API. At the moment this does not include constructors.
 * Annotation reloading. Annotations on classes, methods and fields will be updated when the class is reloaded. At the moment this does not include annotations on constructors and method parameters.
 * JavaRebel SDK. For integrating custom frameworks with JavaRebel and getting the next step in turnaround time check out the SDK at our Google Code project. 

1.0.3 (20th February 2008)

 * JBoss support has been greatly improved, side-by-side SAR deployments are now supported
 * GlassFish now no longer crashes because of missing LogManager
 * AbstractMethodError could occur in some cases
 * Final fields were wrongly reported as non-final via Reflection API
 * Minor fixes

1.0.2  (24th January 2008)

 * Fixed an IllegalAccessError with package visibility classes in method return type (e.g. Wicket AbstractChoice).

1.0.1  (17th December 2007)

  * Support for GlassFish v2+.
  * Fixes to reflection support, caused NPE on JBoss and issues with Annotation inheritance.

1.0  (5th December 2007)

 * 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. 
 * All known issues fixed.

1.0 M3 (5th November 2007)

 * No more need for "-Xbootclasspath/a:javarebel.jar" if the name of the JAR is not changed. JavaRebel will detect if the name of JAR is changed and suggest to either rename it or add to boot classpath.
 * Major improvements in performance. Startup time should in many cases improve two or more times (if slower than vanilla JVM). JavaRebel should also no longer use CPU when the application is idle.
 * Improved support for anonymous classes. Since compiler names anonymous classes consequently, adding a new one may rename all the rest and change their super classes and interfaces. Now JavaRebel handles such renaming without problems. This feature is disabled by default since some problems have been tracked to it. To enable add "-Drebel.enable_anon=true" to the command line.
 * Update notification. JavaRebel will now notify you when a newer version is available. No personal information (not even the currently installed version) is going ot ZeroTurnaround. To disable the feature add "-Drebel.disable_update=true" to the command line.
 * Support on Java 1.4 for Tomcat 4.x, Oracle 9.x, Oracle 10.x. Installation instructions have also been updated.
 * Fixed problems with reloading partially compiled classes present when doing a full rebuild.
 * Fixed an incompatibility with Scala Array construction.
 * Fixed an incompatibility with Tapestry 4.
 * Fixed obfuscated class name conflict.
 * Fixed a problem with Log4J Level constructor throwing an NPE.
 * Fixed problems with shared classloader on Tomcat.
 * Fixed problems with classloading on JBoss.
 * Fixed Class.getPackage() returning null.
 * Fixed problems with serialization when serialVersionUID was missing.
 * Fixed problems with circular class dependency 
 * Minor fixes
