Class Hotswapper

java.lang.Object
com.vaadin.flow.hotswap.Hotswapper
All Implemented Interfaces:
ServiceDestroyListener, SessionDestroyListener, SessionInitListener, UIInitListener, Serializable

Entry point for application classes hot reloads.

This class is meant to be used in combination with class live reloading tools like JRebel, Hotswap agent and Spring Boot Developer Tools, to immediately apply changes on components that should be updated when classes have been added or modified. Currently, class deletion is not supported because of issues with several hotswap agents.

Hotswap tools should obtain an instance of this class by calling the register(VaadinService) method, providing an active VaadinService instance. For example, an agent can inject the following code at the beginning of the VaadinService.init() method:
 
 com.vaadin.flow.hotswap.Hotswapper.register(this);
 
 

The component delegates specific hotswap logic to registered implementors of VaadinHotswapper interface.

By default, Hotswapper determines the best browser page refresh strategy, but a full page reload can be forced by setting the vaadin.hotswap.forcePageReload system property. Hotswap tools can alter the behavior at runtime by calling forcePageReload(VaadinService, boolean)

For internal use only. May be renamed or removed in a future release.
Since:
24.5
Author:
Vaadin Ltd
See Also:
  • Field Details

    • FORCE_RELOAD_PROPERTY

      public static final String FORCE_RELOAD_PROPERTY
      Configuration name for the system parameter that determines whether Hotswapper should always trigger a full page reload instead of computing an appropriate UI refresh strategy.
      See Also:
  • Method Details

    • onHotswap

      public void onHotswap(String[] classes, Boolean redefined)
      Called by hotswap tools when one or more application classes have been updated.

      This method delegates update operations to registered VaadinHotswapper implementors. invoking first VaadinHotswapper.onClassLoadEvent(VaadinService, Set, boolean) and then invoking VaadinHotswapper.onClassLoadEvent(VaadinSession, Set, boolean) for each active VaadinSession.
      Parameters:
      redefined - true if the classes have been redefined by hotswap mechanism, false if they have been loaded for time by the ClassLoader.
      classes - the set of affected classes.
      See Also:
    • onHotswap

      public void onHotswap(URI[] createdResources, URI[] modifiedResources, URI[] deletedResources)
      Called by hotswap tools when one or more application resources have been changed.

      Parameters:
      createdResources - the list of potentially newly created resources. Never null.
      modifiedResources - the list of potentially modified resources. Never null.
      deletedResources - the list of potentially deleted resource. Never null.
    • sessionInit

      public void sessionInit(SessionInitEvent event) throws ServiceException
      Description copied from interface: SessionInitListener
      Invoked when a new Vaadin service session is initialized for that service.

      Because of the way different service instances share the same session, the listener is not necessarily notified immediately when the session is created but only when the first request for that session is handled by a specific service.

      Specified by:
      sessionInit in interface SessionInitListener
      Parameters:
      event - the initialization event
      Throws:
      ServiceException - a problem occurs when processing the event
    • sessionDestroy

      public void sessionDestroy(SessionDestroyEvent event)
      Description copied from interface: SessionDestroyListener
      Called when a Vaadin service session is no longer used.
      Specified by:
      sessionDestroy in interface SessionDestroyListener
      Parameters:
      event - the event with details about the destroyed session
    • serviceDestroy

      public void serviceDestroy(ServiceDestroyEvent event)
      Description copied from interface: ServiceDestroyListener
      Invoked when a service is destroyed.
      Specified by:
      serviceDestroy in interface ServiceDestroyListener
      Parameters:
      event - the event
    • uiInit

      public void uiInit(UIInitEvent event)
      Description copied from interface: UIInitListener
      Notifies when UI is initialized .
      Specified by:
      uiInit in interface UIInitListener
      Parameters:
      event - event for the initialization
    • register

      public static Optional<Hotswapper> register(VaadinService vaadinService)
      Register the hotwsapper entry point for the given VaadinService.

      The hotswapper is registered only in development mode.
      Parameters:
      vaadinService - the VaadinService instance for hotswapper registration.
      Returns:
      the hotswapper instance wrapped into an Optional, or an empty Optional if Vaadin is running in production mode.
    • forcePageReload

      public static void forcePageReload(VaadinService vaadinService, boolean forceReload)
      Instructs the Hotswapper if a full page reload should always be triggered instead of detecting the best UI refresh strategy.
      Parameters:
      vaadinService - the VaadinService instance.
      forceReload - true to always force a page reload, false to let the Hotswapper decide the refresh strategy.
    • isForcedPageReload

      public static boolean isForcedPageReload(VaadinService vaadinService)
      Gets whether a forced full page reload is triggered on class changes.
      Parameters:
      vaadinService - the VaadinService instance.
      Returns:
      true if full page reload if forced, otherwise false.