Class ReloadableSpringService<T>

Type Parameters:
T - The precise service being implemented.
All Implemented Interfaces:
Component, DestructableComponent, IdentifiableComponent, IdentifiedComponent, InitializableComponent, UnmodifiableComponent, ReloadableService<T>, Aware, BeanNameAware, ApplicationContextAware, Lifecycle

@ThreadSafe public class ReloadableSpringService<T> extends AbstractReloadableService<T> implements ApplicationContextAware, BeanNameAware, Lifecycle
This class provides a reloading interface to a ServiceableComponent via Spring. This class extends Lifecycle. and thus it acts as the bridge between this interface and InitializableComponent and DestructableComponent
  • Field Details

    • log

      @Nonnull private final org.slf4j.Logger log
      Class logger.
    • serviceConfigurations

      @Nonnull @NonnullElements private List<Resource> serviceConfigurations
      List of configuration resources for this service.
    • factoryPostProcessors

      @Nonnull @NonnullElements private List<BeanFactoryPostProcessor> factoryPostProcessors
      List of bean factory post processors for this service's content.
    • postProcessors

      @Nonnull @NonnullElements private List<BeanPostProcessor> postProcessors
      List of bean post processors for this service's content.
    • beanProfiles

      @Nonnull @NonnullElements private Collection<String> beanProfiles
      Bean profiles to enable.
    • conversionService

      @Nullable private ConversionService conversionService
      Conversion service to use.
    • theClaz

      @Nonnull private final Class<T> theClaz
      The class we are looking for.
    • serviceStrategy

      @Nonnull private final Function<ApplicationContext,ServiceableComponent<T>> serviceStrategy
      How to summon up the ServiceableComponent from the ApplicationContext.
    • parentContext

      @Nullable private ApplicationContext parentContext
      Application context owning this engine.
    • beanName

      @Nullable private String beanName
      The bean name.
    • cachedComponent

      @Nullable private ServiceableComponent<T> cachedComponent
      The last known good component.
    • lastLoadFailed

      private boolean lastLoadFailed
      Did the last load fail? An optimization only.
    • resourceLastModifiedTimes

      @Nullable private Instant[] resourceLastModifiedTimes
      Time when the service configuration for the given index was last observed to have changed. A null indicates the configuration resource did not exist.
  • Constructor Details

  • Method Details

    • getParentContext

      @Nullable public ApplicationContext getParentContext()
      Gets the application context that is the parent to this service's context.
      Returns:
      application context that is the parent to this service's context
    • setParentContext

      public void setParentContext(@Nullable ApplicationContext context)
      Sets the application context that is the parent to this service's context. This setting can not be changed after the service has been initialized.
      Parameters:
      context - context that is the parent to this service's context, may be null
    • getServiceConfigurations

      @Nonnull public List<Resource> getServiceConfigurations()
      Gets an unmodifiable list of configurations for this service.
      Returns:
      unmodifiable list of configurations for this service
    • setServiceConfigurations

      public void setServiceConfigurations(@Nonnull @NonnullElements List<Resource> configs)
      Set the list of configurations for this service. This setting can not be changed after the service has been initialized.
      Parameters:
      configs - list of configurations for this service
    • setServiceConfigurationStrategy

      public void setServiceConfigurationStrategy(@Nonnull Function<?,List<Resource>> strategy)
      Set the strategy by which the Service can locate the resources it needs to know about.

      Not implemented.

      Parameters:
      strategy - the way to get the resources. Precise details are tbd.
    • setBeanFactoryPostProcessors

      public void setBeanFactoryPostProcessors(@Nonnull @NonnullElements List<BeanFactoryPostProcessor> processors)
      Set the list of bean factory post processors for this service.
      Parameters:
      processors - bean factory post processors to apply
    • setBeanPostProcessors

      public void setBeanPostProcessors(@Nonnull @NonnullElements List<BeanPostProcessor> processors)
      Set the list of bean post processors for this service.
      Parameters:
      processors - bean post processors to apply
    • setBeanProfiles

      public void setBeanProfiles(@Nonnull @NonnullElements Collection<String> profiles)
      Set the bean profiles for this service.
      Parameters:
      profiles - bean profiles to apply
      Since:
      5.4.0
    • setConversionService

      public void setConversionService(@Nullable ConversionService service)
      Set a conversion service to use.
      Parameters:
      service - conversion service
      Since:
      5.4.0
    • start

      public final void start()
      Specified by:
      start in interface Lifecycle
    • stop

      public final void stop()
      Specified by:
      stop in interface Lifecycle
    • isRunning

      public boolean isRunning()
      .
      Specified by:
      isRunning in interface Lifecycle
    • shouldReload

      protected boolean shouldReload()
      Specified by:
      shouldReload in class AbstractReloadableService<T>
    • doReload

      protected void doReload()
      Overrides:
      doReload in class AbstractReloadableService<T>
    • doDestroy

      protected void doDestroy()
      Overrides:
      doDestroy in class AbstractReloadableService<T>
    • getServiceableComponent

      public ServiceableComponent<T> getServiceableComponent()
      Get the serviceable component. We do this under interlock and grab the lock on the component.
      Specified by:
      getServiceableComponent in interface ReloadableService<T>
      Returns:
      the pinned component.
    • setApplicationContext

      public void setApplicationContext(ApplicationContext applicationContext)
      Specified by:
      setApplicationContext in interface ApplicationContextAware
    • setBeanName

      public void setBeanName(String name)
      Specified by:
      setBeanName in interface BeanNameAware
    • doInitialize

      protected void doInitialize() throws ComponentInitializationException
      Overrides:
      doInitialize in class AbstractReloadableService<T>
      Throws:
      ComponentInitializationException