Class ReloadableSpringService<T>
java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent
net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent
net.shibboleth.shared.service.AbstractReloadableService<T>
net.shibboleth.shared.spring.service.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-
Nested Class Summary
Nested classes/interfaces inherited from class net.shibboleth.shared.service.AbstractReloadableService
AbstractReloadableService.ServiceReloadTask -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate StringThe bean name.private Collection<String>Bean profiles to enable.private AbstractServiceableComponent<T>The last known good component.private ConversionServiceConversion service to use.private List<BeanFactoryPostProcessor>List of bean factory post processors for this service's content.private booleanDid the last load fail? An optimization only.private final org.slf4j.LoggerClass logger.private ApplicationContextApplication context owning this engine.private List<BeanPostProcessor>List of bean post processors for this service's content.private Instant[]Time when the service configuration for the given index was last observed to have changed.List of configuration resources for this service.private final NonnullFunction<ApplicationContext,AbstractServiceableComponent<T>> How to summon up theServiceableComponentfrom theApplicationContext.The class we are looking for. -
Constructor Summary
ConstructorsConstructorDescriptionReloadableSpringService(Class<T> claz) Constructor.ReloadableSpringService(Class<T> claz, NonnullFunction<ApplicationContext, AbstractServiceableComponent<T>> strategy) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidPerforms component specific destruction logic.protected voidThis method checks to ensure that the component ID is not null.protected voiddoReload()Performs the actual reload.Gets the application context that is the parent to this service's context.Get the serviceable component that this service supports.Gets an unmodifiable list of configurations for this service.boolean.voidsetApplicationContext(ApplicationContext applicationContext) voidsetBeanFactoryPostProcessors(List<BeanFactoryPostProcessor> processors) Set the list of bean factory post processors for this service.voidsetBeanName(String name) voidsetBeanPostProcessors(List<BeanPostProcessor> processors) Set the list of bean post processors for this service.voidsetBeanProfiles(Collection<String> profiles) Set the bean profiles for this service.voidsetConversionService(ConversionService service) Set a conversion service to use.voidsetParentContext(ApplicationContext context) Sets the application context that is the parent to this service's context.voidsetServiceConfigurations(List<Resource> configs) Set the list of configurations for this service.voidsetServiceConfigurationStrategy(Function<?, List<Resource>> strategy) Set the strategy by which the Service can locate the resources it needs to know about.protected booleanCalled by theAbstractReloadableService<T>.ServiceReloadTaskto determine if the service should be reloaded.final voidstart()final voidstop()Methods inherited from class net.shibboleth.shared.service.AbstractReloadableService
getLastReloadAttemptInstant, getLastSuccessfulReloadInstant, getLogPrefix, getReloadCheckDelay, getReloadFailureCause, getReloadTaskTimer, isFailFast, reload, setFailFast, setReloadCheckDelay, setReloadTaskTimerMethods inherited from class net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent
setIdMethods inherited from class net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent
ensureId, getId, ifDestroyedThrowDestroyedComponentException, ifInitializedThrowUnmodifiabledComponentException, ifNotInitializedThrowUninitializedComponentExceptionMethods inherited from class net.shibboleth.shared.component.AbstractInitializableComponent
checkComponentActive, checkSetterPreconditions, destroy, initialize, isDestroyed, isInitializedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface net.shibboleth.shared.component.IdentifiedComponent
getIdMethods inherited from interface net.shibboleth.shared.component.InitializableComponent
initialize, isInitialized
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
serviceConfigurations
List of configuration resources for this service. -
factoryPostProcessors
List of bean factory post processors for this service's content. -
postProcessors
List of bean post processors for this service's content. -
beanProfiles
Bean profiles to enable. -
conversionService
Conversion service to use. -
theClaz
The class we are looking for. -
serviceStrategy
@Nonnull private final NonnullFunction<ApplicationContext,AbstractServiceableComponent<T>> serviceStrategyHow to summon up theServiceableComponentfrom theApplicationContext. -
parentContext
Application context owning this engine. -
beanName
The bean name. -
cachedComponent
The last known good component. -
lastLoadFailed
private boolean lastLoadFailedDid the last load fail? An optimization only. -
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
-
ReloadableSpringService
Constructor.- Parameters:
claz- The interface being implemented.
-
-
Method Details
-
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
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
Gets an unmodifiable list of configurations for this service.- Returns:
- unmodifiable list of configurations for this service
-
setServiceConfigurations
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
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
Set the list of bean factory post processors for this service.- Parameters:
processors- bean factory post processors to apply
-
setBeanPostProcessors
Set the list of bean post processors for this service.- Parameters:
processors- bean post processors to apply
-
setBeanProfiles
Set the bean profiles for this service.- Parameters:
profiles- bean profiles to apply- Since:
- 5.4.0
-
setConversionService
Set a conversion service to use.- Parameters:
service- conversion service- Since:
- 5.4.0
-
start
public final void start() -
stop
public final void stop() -
isRunning
public boolean isRunning(). -
shouldReload
protected boolean shouldReload()Called by theAbstractReloadableService<T>.ServiceReloadTaskto determine if the service should be reloaded.No lock is held when this method is called, so any locking needed should be handled internally.
- Specified by:
shouldReloadin classAbstractReloadableService<T>- Returns:
- true iff the service should be reloaded
-
doReload
protected void doReload()Performs the actual reload.No lock is held when this method is called, so any locking needed should be handled internally.
- Overrides:
doReloadin classAbstractReloadableService<T>
-
doDestroy
protected void doDestroy()Performs component specific destruction logic. This method is executed within the lock on the object being destroyed. The default implementation of this method is a no-op.- Overrides:
doDestroyin classAbstractReloadableService<T>
-
getServiceableComponent
Get the serviceable component that this service supports. If the component hasn't been successfully loaded yet or if this service does not support a ServiceableComponent, aServiceExceptionis raised.On a non-null value, the returned component will be pinned and MUST be closed. This can be done by exploiting the fact that a ServiceableComponent implements
Get the serviceable component. We do this under interlock and grab the lock on the component.AutoCloseable- Specified by:
getServiceableComponentin interfaceReloadableService<T>- Returns:
- the pinned component.
- Throws:
ServiceException- if the component is not available
-
setApplicationContext
- Specified by:
setApplicationContextin interfaceApplicationContextAware
-
setBeanName
- Specified by:
setBeanNamein interfaceBeanNameAware
-
doInitialize
This method checks to ensure that the component ID is not null. Performs the initialization of the component. This method is executed within the lock on the object being initialized. The default implementation of this method is a no-op.- Overrides:
doInitializein classAbstractReloadableService<T>- Throws:
ComponentInitializationException- thrown if there is a problem initializing the component
-