Plugins administered by Hotswap agent are usually targeted towards a specific framework. For example Spring plugin uses agent services to:

  • Modify root Spring classes to get Spring contexts and registered scan path
  • Watch for any resource change on a scan path
  • Watch for a hotswap of a class file within a scan path package
  • Reload bean definition after a change
  • … and many other

Java frameworks plugins:

  • CXF (3.x) - redefine JAXRS resource after resource class redefinition, reinject instance if integrated with Spring and CDI (Weld/OWB).
  • Deltaspike (1.x, Jakarta: 2.x) - messages, ViewConfig, repository, proxy reloading.
  • ELResolver 2.2 (JuelEL, Appache Commons EL, Oracle EL 3.0)- clear ELResolver cache on class change. Support hotswap for #{…} expressions.
  • FreeMarker - clear the Apache Freemarker beans class-introspection cache on class definition change.
  • Hibernate v3 (3.x) - Reload Hibernate configuration after entity create/change.
  • Hibernate v4,v5 (4.x, 5.x, Jakarta: 5.5 - 6.x) - Reload Hibernate configuration after entity create/change.
  • iBatis - iBatis configuration reload.
  • IDEA - support for IntelliJ IDEA development in IDEA
  • Jackson - clears Jackson internal caches when a class is redefined.
  • Jersey 1 - reload Jersey1 container after root resource or provider class definition or redefinition.
  • Jersey 2 - reload Jersey2 container after root resource or provider class definition or redefinition.
  • JSF (Mojarra, MyFaces) - support for application resource bundle changes (properties files).
  • Logback - Logback configuration reload.
  • Log4j2 - Log4j2 configuration reload.
  • MyBatis (3.5) - reload configuration after mapper file changes
  • MyBatis-Plus (3.2 - 3.5) - reload MyBatis-Plus configuration after mapper file changes.
  • OmniFaces - support for ViewScoped beans reinjection/reloading.
  • OpenWebBeans (CDI) (1.x, 2.x) - reload bean class definition after class definition/change. Beans can be reloaded according strategy defined in property file. Jakarta: 4.x.
  • OsgiEquinox - Hotswap support for Eclipse plugin or Eclipse platform development.
  • RestEasy (2.x, 3.x) - Cleanups and registers class redefinitions.
  • Spring (3.x - 7.0) - Reload Spring configuration after class definition/change.
  • Spring Boot - reload Spring Boot after a change of application.properties / application.yaml.
  • Sponge (11) - register newly added listeners of a changed listener class.
  • Thymeleaf (3.0) - clear the template cache when a template is modified.
  • Vaadin (up to 25.x) - Update routes, template models and in practice anything on the fly.
  • WebObjects - Clear key value coding, component, action and validation caches after class change.
  • Weld (CDI) (2.2, 2.3, 3.x, Jakarta: 5.x) - reload bean class definition after class definition/change. Beans can be reloaded according strategy defined in property file.
  • Velocity - enhance Spring’s VelocityEngineFactory.
  • Wicket - clear wicket caches if property files are changed
  • WildFlyELResolver - Clear BeanELResolver after any class redefinition.
  • ZK (5x-7x) - ZK Framework (http://www.zkoss.org/). Change library properties default values to disable caches, maintains Label cache and bean resolver cache.

Servlet containers and application servers plugins:

  • GlassFish - support for the GlassFish server (GlassFish 7).
  • JBossModules - add extra class path to JBoss’s module class loader. (Wildfly)
  • Jetty - add extra classpath to the app classloader. All versions supporting WebAppContext.getExtraClasspath should be supported.
  • Tomcat (7.x - 9.x) configure Apache Tomcat with extraClasspath property.
  • Undertow - add extra classpath, watchResources and webappDir to the undertow’s resource manager.
  • Weblogic - add extra classpath to the app classloader.

JVM plugins - hotswapping enhancements:

  • AnonymousClassPatch - Swap anonymous inner class names to avoid not compatible changes.
  • ClassInit - initializes new static members/enum values after class/enum redefinition and keeps surviving static values. (Fix of known DCEVM)
  • Hotswapper - with autoHotswap=true, watch for any class file change and reload (hotswap) it on the fly (Instrumentation API, or JPDA with autoHotswap.port).
  • JDK - clears java.beans.Introspector and serialization caches of the JDK after class redefinition.
  • Proxy (supported com.sun.proxy, CGlib) - redefines proxy classes that implement or extend changed interfaces or classes.
  • WatchResources - support for the watchResources configuration property.
Tags: