Class AbstractDynamicMetadataResolver
- All Implemented Interfaces:
Component
,DestructableComponent
,IdentifiableComponent
,IdentifiedComponent
,InitializableComponent
,Resolver<EntityDescriptor,
,CriteriaSet> ClearableMetadataResolver
,DynamicMetadataResolver
,MetadataResolver
- Direct Known Subclasses:
AbstractDynamicHTTPMetadataResolver
,LocalDynamicMetadataResolver
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected class
Background maintenance task which cleans expired and idle metadata from the backing store, and removes orphaned entity management data.static class
Default function for generating a cache key for loading and saving anEntityDescriptor
using aXMLObjectLoadSaveManager
.protected class
Specialized entity backing store implementation for dynamic metadata resolvers.protected class
Class holding per-entity management data.static class
Class 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 Duration
The delay after which to schedule the background initialization from the persistent cache.The backing store cleanup sweeper background task.private Duration
The interval at which the cleanup task should run.private boolean
Whether we created our own task timer during object construction.private Duration
Impending 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 boolean
Flag indicating whether should initialize from the persistent cache in the background.private boolean
Flag used to track state of whether currently initializing or not.private final org.slf4j.Logger
Class logger.private Duration
Maximum cache duration.private Duration
The maximum idle time for which the resolver will keep data for a given entityID, before it is removed.static final String
Metric name for the gauge of the number of live entityIDs.static final String
Metric name for the gauge of the persistent cache initialization metrics.static final String
Metric name for the ratio gauge of fetches to resolve requests.static final String
Metric name for the timer forfetchFromOriginSource(CriteriaSet)
.static final String
Metric name for the timer forresolve(CriteriaSet)
.private String
Base name for Metrics instrumentation names.private Duration
Minimum cache duration.private Duration
Negative 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.RatioGauge
Metrics RatioGauge for count of origin fetches to resolves.private Float
Factor used to compute when the next refresh interval will occur.private boolean
Flag indicating whether idle entity data should be removed.private Timer
Timer used to schedule background metadata update tasks.private com.codahale.metrics.Timer
Metrics Timer forfetchFromOriginSource(CriteriaSet)
.private com.codahale.metrics.Timer
Metrics Timer forresolve(CriteriaSet)
. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Attempt to clear all data from the internal cache of the resolver.void
Attempt to clear data from the internal cache of the resolver for the specified entityID.protected Instant
computeExpirationTime
(EntityDescriptor entityDescriptor, Instant now) Compute the effective expiration time for the specified metadata.protected Instant
computeRefreshTriggerTime
(Instant expirationTime, Instant nowDateTime) Compute the refresh trigger time.Create a new backing store instance for EntityDescriptor data.protected void
protected abstract XMLObject
fetchFromOriginSource
(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 base name for Metrics instrumentation.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 void
indexEntityDescriptor
(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore) Index the specified entity descriptor, updating the specified entity backing store instance as necessary.protected boolean
Return whether secondary indexing is effectively active.protected void
Initialize the resolver with data from the persistent cache manager, if enabled.private void
Initialize the Metrics-based instrumentation.protected void
Subclasses should override this method to perform any initialization logic necessary.boolean
Get the flag indicating whether should initialize from the persistent cache in the background.boolean
Get the flag indicating whether persistent caching of the resolved metadata is enabled.boolean
Get the flag indicating whether idle entity data should be removed.private void
logMetadataExpiration
(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 XMLObject
prepareForFiltering
(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 void
preProcessEntityDescriptor
(EntityDescriptor entityDescriptor, AbstractMetadataResolver.EntityBackingStore backingStore) Pre-process the specified entity descriptor, updating the specified entity backing store instance as necessary.protected void
processNewMetadata
(XMLObject root, String expectedEntityID) Process the specified new metadata document, including metadata filtering, and store the processed metadata in the backing store.protected void
processNewMetadata
(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 void
processPersistentCacheEntry
(String currentKey, EntityDescriptor descriptor) Process an entry loaded from the persistent cache.protected void
removeByEntityID
(String entityID, AbstractMetadataResolver.EntityBackingStore backingStore) Remove from the backing store all metadata for the entity with the given entity ID.resolve
(CriteriaSet criteria) protected String
resolveEntityID
(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.void
Set the delay after which to schedule the background initialization from the persistent cache.void
setCleanupTaskInterval
(Duration interval) Set the interval at which the cleanup task should run.void
setExpirationWarningThreshold
(Duration threshold) Sets the impending expiration warning threshold used at refresh time.void
setIndexes
(Set<MetadataIndex> newIndexes) Set the configured indexes.void
Set the predicate which determines whether a given entity should be loaded from the persistent cache at resolver initialization time.void
setInitializeFromPersistentCacheInBackground
(boolean flag) Set the flag indicating whether should initialize from the persistent cache in the background.void
setMaxCacheDuration
(Duration duration) Set the maximum cache duration for metadata.void
Set the maximum idle time for which the resolver will keep data for a given entityID, before it is removed.void
setMetricsBaseName
(String baseName) Set the base name for Metrics instrumentation.void
setMinCacheDuration
(Duration duration) Set the minimum cache duration for metadata.void
setNegativeLookupCacheDuration
(Duration duration) Set the negative lookup cache duration for metadata.void
setPersistentCacheKeyGenerator
(Function<EntityDescriptor, String> generator) Set the function for generating the String key used with the persistent cache manager.void
Set the manager for the persistent cache store for resolved metadata.void
setRefreshDelayFactor
(Float factor) Sets the delay factor used to compute the next refresh time.void
setRemoveIdleEntityData
(boolean flag) Set the flag indicating whether idle entity data should be removed.protected boolean
Determine 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, getCriterionPredicateRegistry, getLogPrefix, getMetadataFilter, getParserPool, getUnmarshallerFactory, isFailFastInitialization, isRequireValidMetadata, isSatisfyAnyPredicates, isUseDefaultPredicateRegistry, isValid, lookupIndexedEntityID, newFilterContext, predicateFilterCandidates, preProcessEntitiesDescriptor, releaseMetadataDOM, resolveSingle, setBackingStore, setCriterionPredicateRegistry, setFailFastInitialization, setMetadataFilter, setParserPool, setRequireValidMetadata, setSatisfyAnyPredicates, setUseDefaultPredicateRegistry, unmarshallMetadata
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 org.opensaml.saml.metadata.resolver.MetadataResolver
getMetadataFilter, isRequireValidMetadata, setMetadataFilter, setRequireValidMetadata
Methods inherited from interface net.shibboleth.utilities.java.support.resolver.Resolver
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 forresolve(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
private final org.slf4j.Logger logClass logger. -
metricsBaseName
Base name for Metrics instrumentation names. -
timerResolve
@Nullable private com.codahale.metrics.Timer timerResolveMetrics Timer forresolve(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
- theTimer
instance 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
-
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
-
getMetricsBaseName
Get the base name for Metrics instrumentation.- Returns:
- the Metrics base name
-
setMetricsBaseName
Set the base name for Metrics instrumentation.- Parameters:
baseName
- the Metrics base name
-
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:
clear
in 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:
clear
in interfaceClearableMetadataResolver
- Parameters:
entityID
- the target entityID- Throws:
ResolverException
- if the clear operation was unsuccessful
-
resolve
@Nonnull public Iterable<EntityDescriptor> resolve(@Nonnull CriteriaSet criteria) throws ResolverException - Specified by:
resolve
in interfaceResolver<EntityDescriptor,
CriteriaSet> - Throws:
ResolverException
-
resolveEntityID
Attempt to resolve the single entityID for the operation from the criteria set.If an
EntityIdCriterion
is present, that will be used. If not present, then a single entityID will be resolved via the secondary index manager of the backing store.- Parameters:
criteria
- the criteria set on which to operate- Returns:
- the resolve entityID, or null if a single entityID could not be resolved
-
resolveEntityIDs
Attempt to resolve all the entityIDs represented by the criteria set.If an
EntityIdCriterion
is present, that will be used. If not present, then entityIDs will be resolved via the secondary index manager of the backing store.- Parameters:
criteria
- the criteria set on which to operate- Returns:
- the resolved entityIDs, may be empty
-
resolveFromOriginSource
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> resolveFromOriginSource(@Nonnull CriteriaSet criteria, @Nullable String entityID) throws ResolverException Fetch metadata from an origin source based on the input criteria, store it in the backing store and then return it.- Parameters:
criteria
- the input criteria setentityID
- the previously resolved single entityID- Returns:
- the resolved metadata
- Throws:
ResolverException
- if there is a fatal error attempting to resolve the metadata
-
resolveFromOriginSourceWithEntityID
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> resolveFromOriginSourceWithEntityID(@Nonnull CriteriaSet criteria, @Nonnull String entityID) throws ResolverException 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.- Parameters:
criteria
- the input criteria setentityID
- the entityID known to be represented by the criteria set- Returns:
- the resolved metadata
- Throws:
ResolverException
- if there is a fatal error attempting to resolve the metadata
-
resolveFromOriginSourceWithoutEntityID
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> resolveFromOriginSourceWithoutEntityID(@Nonnull CriteriaSet criteria) throws ResolverException 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.- Parameters:
criteria
- the input criteria set- Returns:
- the resolved metadata
- Throws:
ResolverException
- if there is a fatal error attempting to resolve the metadata
-
lookupCriteria
@Nonnull @NonnullElements protected Iterable<EntityDescriptor> lookupCriteria(@Nonnull CriteriaSet criteria) throws ResolverException Lookup and return all EntityDescriptors currently available in the resolver cache which match either entityID or secondary-indexed criteria.- Parameters:
criteria
- the input criteria set- Returns:
- the resolved metadata
- Throws:
ResolverException
- if there is a fatal error attempting to resolve the metadata
-
processNonEntityIDFetchedEntittiesDescriptor
@Nullable 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
@Nullable 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
-
fetchFromOriginSource
@Nullable protected abstract XMLObject fetchFromOriginSource(@Nonnull CriteriaSet criteria) throws IOException Fetch the metadata from the origin source.- Parameters:
criteria
- the input criteria set- Returns:
- the resolved metadata root XMLObject, or null if metadata could not be fetched
- Throws:
IOException
- if there is a fatal error fetching metadata from the origin source
-
lookupEntityID
@Nonnull @NonnullElements protected List<EntityDescriptor> lookupEntityID(@Nonnull String entityID) throws ResolverException Get list of descriptors matching an entityID.- Overrides:
lookupEntityID
in classAbstractMetadataResolver
- Parameters:
entityID
- entityID to lookup- Returns:
- a list of descriptors
- Throws:
ResolverException
- if an error occurs
-
processNewMetadata
@Nonnull 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
@Nonnull 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
EntityDescriptor
and itsentityID
value must match the value supplied as the requiredexpectedEntityID
argument.- 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:
preProcessEntityDescriptor
in 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:
createNewBackingStore
in classAbstractMetadataResolver
- Returns:
- the new backing store instance
-
getBackingStore
@NonnullAfterInit protected AbstractDynamicMetadataResolver.DynamicEntityBackingStore getBackingStore()Get the EntityDescriptor backing store currently in use by the metadata resolver.- Overrides:
getBackingStore
in 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:
initMetadataResolver
in 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(String entityID, AbstractMetadataResolver.EntityBackingStore backingStore) Remove from the backing store all metadata for the entity with the given entity ID.- Overrides:
removeByEntityID
in classAbstractMetadataResolver
- Parameters:
entityID
- the entity ID of the metadata to removebackingStore
- the backing store instance to update
-
doDestroy
protected void doDestroy()- Overrides:
doDestroy
in 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:
indexEntityDescriptor
in classAbstractMetadataResolver
- Parameters:
entityDescriptor
- the target entity descriptor to processbackingStore
- the backing store instance to update
-