Feenix

NOTICE: Feenix 3.0-beta is now out. This version has fixed several critical bugs and should be dramatically less flakey than previous versions!

Feenix is a class- and web-reloading tool similar to JRebel. Feenix has been slowly evolving. It originally supported only class reloading as allowed by the Instrumentation API. It now handles class reloading similar to JRebel. Further, the latest version provides some web-reloading functionality. Feenix web-reload functionality can do the following:

  • Allows you to test incremental JSF changes in your project, without building or re-deploying. Both Mojarra Reference Implementation and MyFaces are supported.
  • Allows you to test incremental JSP changes in your project, without building or re-deploying.
  • Reload updated static web content (images, css, html, etc) and discover new content that exists only in your project, not in your deployment unit.

Feenix supports most versions of Jetty, JBoss, and WebLogic. To find out more, see the web support matrix or read the User Guide to find out more. The Feenix road map includes support for the following:

  1. Web Frameworks (Spring, Struts, etc)
  2. Other web/application servers (Tomcat, WebSphere, GlassFish, etc)

You can download the Feenix distribution here.

Version History

DateReleaseDescription
February 15, 2020 3.0-beta Fixed major classloader-related bugs.
January 30, 2017 2.6.20-beta Fixed bug caused by a custom classloader passing a null class name to the defineClass(...) method.
November 9, 2016 2.6.19-beta No functional updates. Last version expired. New expiry date is 12 months from release date.
April 29, 2016 2.6.18-beta Fixed some complications resulting from the last change.
April 27, 2016 2.6.17-beta Rewrite of classloader instrumentation to fix casting errors.
April 18, 2016 2.6.15-beta Fixed bug regarding the reloading of classes which have a final method in their super type. This has been a problem confirm with Jetty and JBoss.
April 12, 2016 2.6.14-beta More bugs fixed.
April 11, 2016 2.6.13-beta Fixed edge case bug causing ClassNotFoundExceptions
April 09, 2016 2.6.12-beta Switched on inner class support. Its not perfect, but better to have this much than nothing.
March 22, 2016 2.6.11-beta Fixed bugs with accessing final variables and accessing fields that change modifiers (i.e. public -> private etc). Also, updated configuration so you no longer need inclusions, exclusions. or a project name. Just needs a classpath for reloading. Syntax is: -javaagent:<path to feenix agent>=reload-classpath=<comma-delimited list of classpaths>
March 21, 2016 2.6.10-beta More bugs.
March 17, 2016 2.6.9-beta Fixed bugs related to accessing private fields and methods (from inner classes etc).
March 17, 2016 2.6.8-beta More bug fixes. Added access to private methods normally accessed via access$ methods. Added functionality to handle serialization of reloadable objects.
March 16, 2016 2.6.7-beta More bug fixes. Added access to private variables normally accessed via access$ methods.
March 15, 2016 2.6.6-beta More bug fixes.
March 7, 2016 2.6.5-beta Fixed verification error Expecting a stackmap frame at branch target....
March 3, 2016 2.6.4-beta Fixed errors invoking reloaded methods from reloaded class.
March 1, 2016 2.6.3-beta More bugs fixed.
February 29, 2016 2.6.2-beta Should fix java.lang.LinkageError: loader constraint violation: loader previously initiated loading for a different type... errors.
February 26, 2016 2.6.1-beta 2.6 causes a ClassNotFoundException on ClassHashTracker due to misconfigured obfuscation. This version fixes it. Oops.
February 25, 2016 2.6-beta More serious bugs fixed. This version should be more reliable.
February 22, 2016 2.5-beta More bugs fixed (related to handling synthetic methods inserted by the compiler).
February 20, 2016 2.4-beta More bugs fixed (looking up members in inherited by interfaces and accidentally assign more than one of public, private, protected to a method.).
February 18, 2016 2.3-beta Bug fixed in accessing phantom objects.
February 11, 2016 2.2-beta Major bugs fixed. Tested with JBoss 7 and JSF Managed Beans.
February 2, 2014 2.1-beta First non-Instrumentation release. Only tested with simple Swing app. Some major bugs. Kind of a dud. Sorry.
October 28, 2014 1.2 Original Instrumentation based design.