Class AbstractDynamicMetadataResolver
java.lang.Object
net.shibboleth.shared.component.AbstractInitializableComponent
net.shibboleth.shared.component.AbstractIdentifiedInitializableComponent
net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent
org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
org.opensaml.saml.metadata.resolver.impl.AbstractDynamicMetadataResolver
- All Implemented Interfaces:
Component,DestructableComponent,IdentifiableComponent,IdentifiedComponent,InitializableComponent,Resolver<EntityDescriptor,,CriteriaSet> ClearableMetadataResolver,DynamicMetadataResolver,MetadataResolver
- Direct Known Subclasses:
AbstractDynamicHTTPMetadataResolver,LocalDynamicMetadataResolver
public abstract class AbstractDynamicMetadataResolver
extends AbstractMetadataResolver
implements DynamicMetadataResolver, ClearableMetadataResolver
Abstract subclass for metadata resolvers that resolve metadata dynamically, as needed and on demand.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected classBackground maintenance task which cleans expired and idle metadata from the backing store, and removes orphaned entity management data.static classDefault function for generating a cache key for loading and saving anEntityDescriptorusing aXMLObjectLoadSaveManager.protected classSpecialized entity backing store implementation for dynamic metadata resolvers.protected classClass holding per-entity management data.static classClass used to track metrics related to the initialization from the persistent cache.Nested classes/interfaces inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
AbstractMetadataResolver.EntityBackingStore -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate DurationThe delay after which to schedule the background initialization from the persistent cache.The backing store cleanup sweeper background task.private DurationThe interval at which the cleanup task should run.private booleanWhether we created our own task timer during object construction.private DurationImpending expiration warning threshold for metadata refresh.private com.codahale.metrics.Gauge<Integer>Metrics Gauge for the number of live entityIDs.private com.codahale.metrics.Gauge<AbstractDynamicMetadataResolver.PersistentCacheInitializationMetrics>Metrics Gauge for the persistent cache initialization.private Set<MetadataIndex>The set of indexes configured.private Predicate<EntityDescriptor>Predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.private booleanFlag indicating whether should initialize from the persistent cache in the background.private booleanFlag used to track state of whether currently initializing or not.private final org.slf4j.LoggerClass logger.private DurationMaximum cache duration.private DurationThe maximum idle time for which the resolver will keep data for a given entityID, before it is removed.static final StringMetric name for the gauge of the number of live entityIDs.static final StringMetric name for the gauge of the persistent cache initialization metrics.static final StringMetric name for the ratio gauge of fetches to resolve requests.static final StringMetric name for the timer forfetchFromOriginSource(CriteriaSet).static final StringMetric name for the timer forAbstractMetadataResolver.resolve(CriteriaSet).private DurationMinimum cache duration.private DurationNegative lookup cache duration.Object tracking metrics related to the persistent cache initialization.private Function<EntityDescriptor,String> Function for generating the String key used with the cache manager.private XMLObjectLoadSaveManager<EntityDescriptor>The manager for the persistent cache store for resolved metadata.private com.codahale.metrics.RatioGaugeMetrics RatioGauge for count of origin fetches to resolves.private FloatFactor used to compute when the next refresh interval will occur.private booleanFlag indicating whether idle entity data should be removed.private TimerTimer used to schedule background metadata update tasks.private com.codahale.metrics.TimerMetrics Timer forfetchFromOriginSource(CriteriaSet).private com.codahale.metrics.TimerMetrics Timer forAbstractMetadataResolver.resolve(CriteriaSet). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Attempt to clear all data from the internal cache of the resolver.voidAttempt to clear data from the internal cache of the resolver for the specified entityID.protected InstantcomputeExpirationTime(EntityDescriptor entityDescriptor, Instant now) Compute the effective expiration time for the specified metadata.protected InstantcomputeRefreshTriggerTime(Instant expirationTime, Instant nowDateTime) Compute the refresh trigger time.Create a new backing store instance for EntityDescriptor data.protected voidprotected Iterable<EntityDescriptor>doResolve(CriteriaSet criteria) Subclasses should override this method.Get the EntityDescriptor backing store currently in use by the metadata resolver, raising aConstraintViolationExceptionif null.Get the manager for the persistent cache store for resolved metadata, raising aConstraintViolationExceptionif null.protected abstract XMLObjectfetchFromOriginSource(CriteriaSet criteria) Fetch the metadata from the origin source.Get the delay after which to schedule the background initialization from the persistent cache.Get the EntityDescriptor backing store currently in use by the metadata resolver.Get the interval at which the cleanup task should run.Gets the impending expiration warning threshold used at refresh time.Get the configured indexes.Get the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.Get the maximum cache duration for metadata.Get the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.Get the minimum cache duration for metadata.Get the negative lookup cache duration for metadata.Get the function for generating the String key used with the persistent cache manager.Get the manager for the persistent cache store for resolved metadata.Gets the delay factor used to compute the next refresh time.protected voidindexEntityDescriptor(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore) Index the specified entity descriptor, updating the specified entity backing store instance as necessary.protected booleanReturn whether secondary indexing is effectively active.protected voidInitialize the resolver with data from the persistent cache manager, if enabled.private voidInitialize the Metrics-based instrumentation.protected voidSubclasses should override this method to perform any initialization logic necessary.booleanGet the flag indicating whether should initialize from the persistent cache in the background.booleanGet the flag indicating whether persistent caching of the resolved metadata is enabled.booleanGet the flag indicating whether idle entity data should be removed.private voidlogMetadataExpiration(EntityDescriptor descriptor, Instant now, Instant nextRefresh) Check metadata for expiration or pending expiration and log appropriately.protected Iterable<EntityDescriptor>lookupCriteria(CriteriaSet criteria) Lookup and return all EntityDescriptors currently available in the resolver cache which match either entityID or secondary-indexed criteria.protected List<EntityDescriptor>lookupEntityID(String entityID) Get list of descriptors matching an entityID.protected XMLObjectprepareForFiltering(XMLObject input) Prepare the object for filtering: If persistent caching is enabled, return a clone of the object in case the configured filter mutates the object.protected voidpreProcessEntityDescriptor(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore) Pre-process the specified entity descriptor, updating the specified entity backing store instance as necessary.protected voidprocessNewMetadata(XMLObject root, String expectedEntityID) Process the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.protected voidprocessNewMetadata(XMLObject root, String expectedEntityID, boolean fromPersistentCache) Process the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.protected List<EntityDescriptor>Process an EntitiesDescriptor received from a non-entityID-based fetch.protected List<EntityDescriptor>Process an EntityDescriptor received from a non-entityID-based fetch.protected voidprocessPersistentCacheEntry(String currentKey, EntityDescriptor descriptor) Process an entry loaded from the persistent cache.protected voidremoveByEntityID(String entityID, AbstractMetadataResolver.EntityBackingStore backingStore) Remove from the backing store all metadata for the entity with the given entity ID.protected StringresolveEntityID(CriteriaSet criteria) Attempt to resolve the single entityID for the operation from the criteria set.resolveEntityIDs(CriteriaSet criteria) Attempt to resolve all the entityIDs represented by the criteria set.protected Iterable<EntityDescriptor>resolveFromOriginSource(CriteriaSet criteria, String entityID) Fetch metadata from an origin source based on the input criteria, store it in the backing store and then return it.protected Iterable<EntityDescriptor>resolveFromOriginSourceWithEntityID(CriteriaSet criteria, String entityID) Fetch metadata from an origin source based on the input criteria when the entityID is known, store it in the backing store and then return it.protected Iterable<EntityDescriptor>Fetch metadata from an origin source based on the input criteria when the entityID is not known, store it in the backing store and then return it.voidSet the delay after which to schedule the background initialization from the persistent cache.voidsetCleanupTaskInterval(Duration interval) Set the interval at which the cleanup task should run.voidsetExpirationWarningThreshold(Duration threshold) Sets the impending expiration warning threshold used at refresh time.voidsetIndexes(Set<MetadataIndex> newIndexes) Set the configured indexes.voidSet the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.voidsetInitializeFromPersistentCacheInBackground(boolean flag) Set the flag indicating whether should initialize from the persistent cache in the background.voidsetMaxCacheDuration(Duration duration) Set the maximum cache duration for metadata.voidSet the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.voidsetMinCacheDuration(Duration duration) Set the minimum cache duration for metadata.voidsetNegativeLookupCacheDuration(Duration duration) Set the negative lookup cache duration for metadata.voidsetPersistentCacheKeyGenerator(Function<EntityDescriptor, String> generator) Set the function for generating the String key used with the persistent cache manager.voidSet the manager for the persistent cache store for resolved metadata.voidsetRefreshDelayFactor(Float factor) Sets the delay factor used to compute the next refresh time.voidsetRemoveIdleEntityData(boolean flag) Set the flag indicating whether idle entity data should be removed.protected booleanDetermine whether should attempt to refresh the metadata, based on stored refresh trigger time.Methods inherited from class org.opensaml.saml.metadata.resolver.impl.AbstractMetadataResolver
doInitialize, filterMetadata, getActivationCondition, getCriterionPredicateRegistry, getLogPrefix, getMetadataFilter, getMetricsBaseName, getParserPool, getType, getUnmarshallerFactory, isFailFastInitialization, isRequireValidMetadata, isSatisfyAnyPredicates, isUseDefaultPredicateRegistry, isValid, lookupIndexedEntityID, newFilterContext, predicateFilterCandidates, preProcessEntitiesDescriptor, releaseMetadataDOM, resolve, resolveSingle, setActivationCondition, setBackingStore, setCriterionPredicateRegistry, setFailFastInitialization, setMetadataFilter, setMetricsBaseName, setParserPool, setRequireValidMetadata, setSatisfyAnyPredicates, setType, setUseDefaultPredicateRegistry, unmarshallMetadataMethods 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 org.opensaml.saml.metadata.resolver.MetadataResolver
getMetadataFilter, getType, isRequireValidMetadata, setMetadataFilter, setRequireValidMetadataMethods inherited from interface net.shibboleth.shared.resolver.Resolver
resolve, resolveSingle
-
Field Details
-
METRIC_TIMER_FETCH_FROM_ORIGIN_SOURCE
Metric name for the timer forfetchFromOriginSource(CriteriaSet).- See Also:
-
METRIC_TIMER_RESOLVE
Metric name for the timer forAbstractMetadataResolver.resolve(CriteriaSet).- See Also:
-
METRIC_RATIOGAUGE_FETCH_TO_RESOLVE
Metric name for the ratio gauge of fetches to resolve requests.- See Also:
-
METRIC_GAUGE_NUM_LIVE_ENTITYIDS
Metric name for the gauge of the number of live entityIDs.- See Also:
-
METRIC_GAUGE_PERSISTENT_CACHE_INIT
Metric name for the gauge of the persistent cache initialization metrics.- See Also:
-
log
@Nonnull private final org.slf4j.Logger logClass logger. -
timerResolve
@Nullable private com.codahale.metrics.Timer timerResolveMetrics Timer forAbstractMetadataResolver.resolve(CriteriaSet). -
timerFetchFromOriginSource
@Nullable private com.codahale.metrics.Timer timerFetchFromOriginSourceMetrics Timer forfetchFromOriginSource(CriteriaSet). -
ratioGaugeFetchToResolve
@Nullable private com.codahale.metrics.RatioGauge ratioGaugeFetchToResolveMetrics RatioGauge for count of origin fetches to resolves. -
gaugeNumLiveEntityIDs
Metrics Gauge for the number of live entityIDs. -
gaugePersistentCacheInit
@Nullable private com.codahale.metrics.Gauge<AbstractDynamicMetadataResolver.PersistentCacheInitializationMetrics> gaugePersistentCacheInitMetrics Gauge for the persistent cache initialization. -
taskTimer
Timer used to schedule background metadata update tasks. -
createdOwnTaskTimer
private boolean createdOwnTaskTimerWhether we created our own task timer during object construction. -
minCacheDuration
Minimum cache duration. -
maxCacheDuration
Maximum cache duration. -
negativeLookupCacheDuration
Negative lookup cache duration. -
refreshDelayFactor
Factor used to compute when the next refresh interval will occur. Default value: 0.75 -
maxIdleEntityData
The maximum idle time for which the resolver will keep data for a given entityID, before it is removed. -
removeIdleEntityData
private boolean removeIdleEntityDataFlag indicating whether idle entity data should be removed. -
expirationWarningThreshold
Impending expiration warning threshold for metadata refresh. Default value: 0 (disabled). -
cleanupTaskInterval
The interval at which the cleanup task should run. -
cleanupTask
The backing store cleanup sweeper background task. -
persistentCacheManager
The manager for the persistent cache store for resolved metadata. -
persistentCacheKeyGenerator
Function for generating the String key used with the cache manager. -
initializeFromPersistentCacheInBackground
private boolean initializeFromPersistentCacheInBackgroundFlag indicating whether should initialize from the persistent cache in the background. -
backgroundInitializationFromCacheDelay
The delay after which to schedule the background initialization from the persistent cache. -
initializationFromCachePredicate
Predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time. -
persistentCacheInitMetrics
@NonnullAfterInit private AbstractDynamicMetadataResolver.PersistentCacheInitializationMetrics persistentCacheInitMetricsObject tracking metrics related to the persistent cache initialization. -
indexes
The set of indexes configured. -
initializing
private boolean initializingFlag used to track state of whether currently initializing or not.
-
-
Constructor Details
-
AbstractDynamicMetadataResolver
Constructor.- Parameters:
backgroundTaskTimer- theTimerinstance used to run resolver background management tasks
-
-
Method Details
-
isInitializeFromPersistentCacheInBackground
public boolean isInitializeFromPersistentCacheInBackground()Get the flag indicating whether should initialize from the persistent cache in the background.Defaults to: true.
- Returns:
- true if should init from the cache in background, false otherwise
-
setInitializeFromPersistentCacheInBackground
public void setInitializeFromPersistentCacheInBackground(boolean flag) Set the flag indicating whether should initialize from the persistent cache in the background.Defaults to: true.
- Parameters:
flag- true if should init from the cache in the background, false otherwise
-
getBackgroundInitializationFromCacheDelay
Get the delay after which to schedule the background initialization from the persistent cache.Defaults to: 2 seconds.
- Returns:
- the delay
- Since:
- 3.3.0
-
setBackgroundInitializationFromCacheDelay
Set the delay after which to schedule the background initialization from the persistent cache.Defaults to: 2 seconds.
- Parameters:
delay- the delay- Since:
- 3.3.0
-
getPersistentCacheManager
Get the manager for the persistent cache store for resolved metadata.- Returns:
- the cache manager if configured, or null
-
ensurePersistentCacheManager
Get the manager for the persistent cache store for resolved metadata, raising aConstraintViolationExceptionif null.- Returns:
- the cache manager if configured
- Since:
- 5.0.0
-
setPersistentCacheManager
Set the manager for the persistent cache store for resolved metadata.- Parameters:
manager- the cache manager, may be null
-
isPersistentCachingEnabled
public boolean isPersistentCachingEnabled()Get the flag indicating whether persistent caching of the resolved metadata is enabled.- Returns:
- true if enabled, false otherwise
-
getPersistentCacheKeyGenerator
Get the function for generating the String key used with the persistent cache manager.- Returns:
- the key generator or null
-
setPersistentCacheKeyGenerator
Set the function for generating the String key used with the persistent cache manager.- Parameters:
generator- the new generator to set, may be null
-
getInitializationFromCachePredicate
Get the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.- Returns:
- the cache initialization predicate
-
setInitializationFromCachePredicate
Set the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.- Parameters:
predicate- the cache initialization predicate
-
getMinCacheDuration
Get the minimum cache duration for metadata.Defaults to: 10 minutes.
- Returns:
- the minimum cache duration
-
setMinCacheDuration
Set the minimum cache duration for metadata.Defaults to: 10 minutes.
- Parameters:
duration- the minimum cache duration
-
getMaxCacheDuration
Get the maximum cache duration for metadata.Defaults to: 8 hours.
- Returns:
- the maximum cache duration
-
setMaxCacheDuration
Set the maximum cache duration for metadata.Defaults to: 8 hours.
- Parameters:
duration- the maximum cache duration
-
getNegativeLookupCacheDuration
Get the negative lookup cache duration for metadata.Defaults to: 10 minutes.
- Returns:
- the negative lookup cache duration
-
setNegativeLookupCacheDuration
Set the negative lookup cache duration for metadata.Defaults to: 10 minutes.
- Parameters:
duration- the negative lookup cache duration
-
getRefreshDelayFactor
Gets the delay factor used to compute the next refresh time.Defaults to: 0.75.
- Returns:
- delay factor used to compute the next refresh time
-
setRefreshDelayFactor
Sets the delay factor used to compute the next refresh time. The delay must be between 0.0 and 1.0, exclusive.Defaults to: 0.75.
- Parameters:
factor- delay factor used to compute the next refresh time
-
isRemoveIdleEntityData
public boolean isRemoveIdleEntityData()Get the flag indicating whether idle entity data should be removed.- Returns:
- true if idle entity data should be removed, false otherwise
-
setRemoveIdleEntityData
public void setRemoveIdleEntityData(boolean flag) Set the flag indicating whether idle entity data should be removed.- Parameters:
flag- true if idle entity data should be removed, false otherwise
-
getMaxIdleEntityData
Get the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.Defaults to: 8 hours.
- Returns:
- return the maximum idle time
-
setMaxIdleEntityData
Set the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.Defaults to: 8 hours.
- Parameters:
max- the maximum entity data idle time
-
getExpirationWarningThreshold
Gets the impending expiration warning threshold used at refresh time.- Returns:
- threshold for logging a warning if live metadata will soon expire
-
setExpirationWarningThreshold
Sets the impending expiration warning threshold used at refresh time.- Parameters:
threshold- the threshold for logging a warning if live metadata will soon expire
-
getCleanupTaskInterval
Get the interval at which the cleanup task should run.Defaults to: 30 minutes.
- Returns:
- return the interval
-
setCleanupTaskInterval
Set the interval at which the cleanup task should run.Defaults to: 30 minutes.
- Parameters:
interval- the interval to set
-
getIndexes
Get the configured indexes.- Returns:
- the set of configured indexes
-
setIndexes
Set the configured indexes.- Parameters:
newIndexes- the new indexes to set
-
indexesEnabled
protected boolean indexesEnabled()Return whether secondary indexing is effectively active.- Returns:
- true if active, false if not.
-
clear
Attempt to clear all data from the internal cache of the resolver.- Specified by:
clearin interfaceClearableMetadataResolver- Throws:
ResolverException- if the clear operation was unsuccessful
-
clear
Attempt to clear data from the internal cache of the resolver for the specified entityID.- Specified by:
clearin interfaceClearableMetadataResolver- Parameters:
entityID- the target entityID- Throws:
ResolverException- if the clear operation was unsuccessful
-
processNonEntityIDFetchedEntittiesDescriptor
@Nonnull protected List<EntityDescriptor> processNonEntityIDFetchedEntittiesDescriptor(@Nonnull EntitiesDescriptor entities) throws ResolverException Process an EntitiesDescriptor received from a non-entityID-based fetch.- Parameters:
entities- the metadata to process- Returns:
- the resolved descriptor(s)
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
processNonEntityIDFetchedEntityDescriptor
@Nonnull protected List<EntityDescriptor> processNonEntityIDFetchedEntityDescriptor(@Nonnull EntityDescriptor entity) throws ResolverException Process an EntityDescriptor received from a non-entityID-based fetch.- Parameters:
entity- the metadata to process- Returns:
- the resolved descriptor(s)
- Throws:
ResolverException- if there is a fatal error attempting to resolve the metadata
-
lookupEntityID
@Nonnull protected List<EntityDescriptor> lookupEntityID(@Nonnull String entityID) throws ResolverException Get list of descriptors matching an entityID.- Overrides:
lookupEntityIDin classAbstractMetadataResolver- Parameters:
entityID- entityID to lookup- Returns:
- a list of descriptors
- Throws:
ResolverException- if an error occurs
-
processNewMetadata
protected void processNewMetadata(@Nonnull XMLObject root, @Nonnull String expectedEntityID) throws FilterException Process the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.Equivalent to
processNewMetadata(XMLObject, String, boolean)called with false.- Parameters:
root- the root of the new metadata document being processedexpectedEntityID- the expected entityID of the resolved metadata- Throws:
FilterException- if there is a problem filtering the metadata
-
processNewMetadata
protected void processNewMetadata(@Nonnull XMLObject root, @Nonnull String expectedEntityID, boolean fromPersistentCache) throws FilterException, ResolverException Process the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.In order to be processed successfully, the metadata (after filtering) must be an instance of
EntityDescriptorand itsentityIDvalue must match the value supplied as the requiredexpectedEntityIDargument.- Parameters:
root- the root of the new metadata document being processedexpectedEntityID- the expected entityID of the resolved metadatafromPersistentCache- whether the entity data was loaded from the persistent cache- Throws:
FilterException- if there is a problem filtering the metadataResolverException- if there is a problem processing the metadata
-
prepareForFiltering
Prepare the object for filtering: If persistent caching is enabled, return a clone of the object in case the configured filter mutates the object.- Parameters:
input- the XMLObject on which to operate- Returns:
- the XMLObject instance to be filtered
-
preProcessEntityDescriptor
protected void preProcessEntityDescriptor(@Nonnull EntityDescriptor entityDescriptor, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore) Pre-process the specified entity descriptor, updating the specified entity backing store instance as necessary.- Overrides:
preProcessEntityDescriptorin classAbstractMetadataResolver- Parameters:
entityDescriptor- the target entity descriptor to processbackingStore- the backing store instance to update
-
logMetadataExpiration
private void logMetadataExpiration(@Nonnull EntityDescriptor descriptor, @Nonnull Instant now, @Nonnull Instant nextRefresh) Check metadata for expiration or pending expiration and log appropriately.- Parameters:
descriptor- the entity descriptor being processesnow- the current date/timenextRefresh- the next refresh trigger time for the entity descriptor
-
computeExpirationTime
@Nonnull protected Instant computeExpirationTime(@Nonnull EntityDescriptor entityDescriptor, @Nonnull Instant now) Compute the effective expiration time for the specified metadata.- Parameters:
entityDescriptor- the EntityDescriptor instance to evaluatenow- the current date time instant- Returns:
- the effective expiration time for the metadata
-
computeRefreshTriggerTime
@Nonnull protected Instant computeRefreshTriggerTime(@Nullable Instant expirationTime, @Nonnull Instant nowDateTime) Compute the refresh trigger time.- Parameters:
expirationTime- the time at which the metadata effectively expiresnowDateTime- the current date time instant- Returns:
- the time after which refresh attempt(s) should be made
-
shouldAttemptRefresh
protected boolean shouldAttemptRefresh(@Nonnull AbstractDynamicMetadataResolver.EntityManagementData mgmtData) Determine whether should attempt to refresh the metadata, based on stored refresh trigger time.- Parameters:
mgmtData- the entity'd management data- Returns:
- true if should attempt refresh, false otherwise
-
createNewBackingStore
@Nonnull protected AbstractDynamicMetadataResolver.DynamicEntityBackingStore createNewBackingStore()Create a new backing store instance for EntityDescriptor data. Subclasses may override to return a more specialized subclass type. Note this method does not make the returned backing store the effective one in use. The caller is responsible for callingAbstractMetadataResolver.setBackingStore(EntityBackingStore)to make it the effective instance in use.- Overrides:
createNewBackingStorein classAbstractMetadataResolver- Returns:
- the new backing store instance
-
getBackingStore
Get the EntityDescriptor backing store currently in use by the metadata resolver.- Overrides:
getBackingStorein classAbstractMetadataResolver- Returns:
- the current effective entity backing store
-
ensureBackingStore
Get the EntityDescriptor backing store currently in use by the metadata resolver, raising aConstraintViolationExceptionif null.- Overrides:
ensureBackingStorein classAbstractMetadataResolver- Returns:
- the current effective entity backing store
-
initMetadataResolver
Subclasses should override this method to perform any initialization logic necessary. Default implementation is a no-op.- Overrides:
initMetadataResolverin classAbstractMetadataResolver- Throws:
ComponentInitializationException- thrown if there is a problem initializing the provider
-
initializeMetricsInstrumentation
private void initializeMetricsInstrumentation()Initialize the Metrics-based instrumentation. -
initializeFromPersistentCache
protected void initializeFromPersistentCache()Initialize the resolver with data from the persistent cache manager, if enabled. -
processPersistentCacheEntry
protected void processPersistentCacheEntry(@Nonnull String currentKey, @Nonnull EntityDescriptor descriptor) Process an entry loaded from the persistent cache.- Parameters:
currentKey- the current persistent cache keydescriptor- the entity descriptor to process
-
removeByEntityID
protected void removeByEntityID(@Nonnull String entityID, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore) Remove from the backing store all metadata for the entity with the given entity ID.- Overrides:
removeByEntityIDin classAbstractMetadataResolver- Parameters:
entityID- the entity ID of the metadata to removebackingStore- the backing store instance to update
-
doDestroy
protected void doDestroy()- Overrides:
doDestroyin classAbstractMetadataResolver
-
indexEntityDescriptor
protected void indexEntityDescriptor(@Nonnull EntityDescriptor entityDescriptor, @Nonnull AbstractMetadataResolver.EntityBackingStore backingStore) Index the specified entity descriptor, updating the specified entity backing store instance as necessary.- Overrides:
indexEntityDescriptorin classAbstractMetadataResolver- Parameters:
entityDescriptor- the target entity descriptor to processbackingStore- the backing store instance to update
-