Class AbstractReloadableService<T>
java.lang.Object
net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
net.shibboleth.utilities.java.support.service.AbstractReloadableService<T>
- Type Parameters:
T
- The sort of service this implements.
- All Implemented Interfaces:
Component
,DestructableComponent
,IdentifiableComponent
,IdentifiedComponent
,InitializableComponent
,UnmodifiableComponent
,ReloadableService<T>
public abstract class AbstractReloadableService<T>
extends AbstractIdentifiableInitializableComponent
implements ReloadableService<T>, UnmodifiableComponent
Base class for
ReloadableService
. This base class will use a background thread that will perform a periodic
check, via shouldReload()
, and, if required, invoke the service's reload()
method.
This class does not deal with any synchronization; that is left to implementing classes.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected class
A watcher that determines if a service should be reloaded and does so as appropriate. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
Do we fail immediately if the config is bogus?private Timer
Timer used to schedule reload tasks if no external one set.private Instant
The last time the service was reloaded, whether successful or not.private Instant
The last time the service was reloaded successfully.private final org.slf4j.Logger
Class logger.private String
The log prefix.private Duration
Time between one reload check and another.private Throwable
The cause of the last reload failure, if the last reload failed.private AbstractReloadableService<T>.ServiceReloadTask
Watcher that monitors the set of configuration resources for this service for changes.private Timer
Timer used to schedule configuration reload tasks. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
Performs component specific destruction logic.protected void
This method checks to ensure that the component ID is not null.protected void
doReload()
Performs the actual reload.Gets the time when the service last attempted to reload.Gets the time when the service was last successfully reloaded.protected String
Return a string which is to be prepended to all log messages.Gets the time between one reload check and another.Gets the reason the last reload failed.Gets the timer used to schedule configuration reload tasks.boolean
Do we fail fast?final void
reload()
Reloads the configuration of the service.void
setFailFast
(boolean value) Sets whether we fail fast.void
setReloadCheckDelay
(Duration delay) Sets the time between one reload check and another.void
setReloadTaskTimer
(Timer timer) Sets the timer used to schedule configuration reload tasks.protected abstract boolean
Called by theAbstractReloadableService<T>.ServiceReloadTask
to determine if the service should be reloaded.Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
setId
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
getId
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, initialize, isDestroyed, isInitialized
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface net.shibboleth.utilities.java.support.component.IdentifiedComponent
getId
Methods inherited from interface net.shibboleth.utilities.java.support.component.InitializableComponent
initialize, isInitialized
Methods inherited from interface net.shibboleth.utilities.java.support.service.ReloadableService
getServiceableComponent
-
Field Details
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
reloadCheckDelay
Time between one reload check and another. -
reloadTaskTimer
Timer used to schedule configuration reload tasks. -
internalTaskTimer
Timer used to schedule reload tasks if no external one set. -
reloadTask
Watcher that monitors the set of configuration resources for this service for changes. -
lastReloadInstant
The last time the service was reloaded, whether successful or not. -
lastSuccessfulReleaseInstant
The last time the service was reloaded successfully. -
reloadFailureCause
The cause of the last reload failure, if the last reload failed. -
failFast
private boolean failFastDo we fail immediately if the config is bogus? -
logPrefix
The log prefix.
-
-
Constructor Details
-
AbstractReloadableService
public AbstractReloadableService()Constructor.
-
-
Method Details
-
getReloadCheckDelay
Gets the time between one reload check and another. A value of 0 or less indicates that no reloading will be performed.Default value: 0
- Returns:
- time between one reload check and another
-
setReloadCheckDelay
Sets the time between one reload check and another. A value of 0 or less indicates that no reloading will be performed.This setting cannot be changed after the service has been initialized.
- Parameters:
delay
- between one reload check and another
-
getReloadTaskTimer
Gets the timer used to schedule configuration reload tasks.- Returns:
- timer used to schedule configuration reload tasks
-
setReloadTaskTimer
Sets the timer used to schedule configuration reload tasks. This setting can not be changed after the service has been initialized.- Parameters:
timer
- timer used to schedule configuration reload tasks
-
getLastReloadAttemptInstant
Gets the time when the service last attempted to reload. If the reload was successful this time should match the time given byReloadableService.getLastSuccessfulReloadInstant()
.- Specified by:
getLastReloadAttemptInstant
in interfaceReloadableService<T>
- Returns:
- time when the service last attempted to reload
-
getLastSuccessfulReloadInstant
Gets the time when the service was last successfully reloaded. Returns null if the service has never reloaded.- Specified by:
getLastSuccessfulReloadInstant
in interfaceReloadableService<T>
- Returns:
- time when the service was last successfully reloaded
-
getReloadFailureCause
Gets the reason the last reload failed.- Specified by:
getReloadFailureCause
in interfaceReloadableService<T>
- Returns:
- reason the last reload failed or null if the last reload was successful
-
isFailFast
public boolean isFailFast()Do we fail fast?- Returns:
- whether we fail fast.
-
setFailFast
public void setFailFast(boolean value) Sets whether we fail fast.- Parameters:
value
- what to set.
-
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:
doInitialize
in classAbstractIdentifiedInitializableComponent
- Throws:
ComponentInitializationException
- thrown if there is a problem initializing the component
-
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:
doDestroy
in classAbstractInitializableComponent
-
reload
public final void reload()Reloads the configuration of the service. Whether internal state is maintained between reloads is implementation dependent.- Specified by:
reload
in interfaceReloadableService<T>
-
shouldReload
protected abstract boolean shouldReload()Called by theAbstractReloadableService<T>.ServiceReloadTask
to determine if the service should be reloaded.No lock is held when this method is called, so any locking needed should be handled internally.
- 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.
- Throws:
ServiceException
- thrown if there is a problem reloading the service
-
getLogPrefix
Return a string which is to be prepended to all log messages.- Returns:
- "Service '<definitionID>' :"
-