Package org.entur.jwt.client
Class PreemptiveCachedAccessTokenProvider
java.lang.Object
org.entur.jwt.client.BaseAccessTokenProvider
org.entur.jwt.client.AbstractCachedAccessTokenProvider
org.entur.jwt.client.DefaultCachedAccessTokenProvider
org.entur.jwt.client.PreemptiveCachedAccessTokenProvider
- All Implemented Interfaces:
Closeable,AutoCloseable,AccessTokenHealthProvider,AccessTokenProvider
Caching AccessTokenProvider which preemptively attempts to
update the cache in the background. The preemptive updates themselves run on
a separate, dedicated thread. Updates are is not continuously scheduled, but
(lazily) triggered by incoming requests for access-tokens.
This class is intended for uninterrupted operation in high-load scenarios, as it will avoid a (potentially) large number of threads blocking when the cache expires (and must be refreshed).
This class is intended for uninterrupted operation in high-load scenarios, as it will avoid a (potentially) large number of threads blocking when the cache expires (and must be refreshed).
-
Nested Class Summary
Nested classes/interfaces inherited from class org.entur.jwt.client.AbstractCachedAccessTokenProvider
AbstractCachedAccessTokenProvider.AccessTokenCacheItem -
Field Summary
FieldsFields inherited from class org.entur.jwt.client.DefaultCachedAccessTokenProvider
lock, minimumTimeToLive, refreshTimeoutFields inherited from class org.entur.jwt.client.AbstractCachedAccessTokenProvider
cacheFields inherited from class org.entur.jwt.client.BaseAccessTokenProvider
provider -
Constructor Summary
ConstructorsConstructorDescriptionPreemptiveCachedAccessTokenProvider(AccessTokenProvider provider, long minimumTimeToLive, long refreshTimeout, long preemptiveRefresh, int refreshConstraintInPercent, boolean eager) Construct new instance.PreemptiveCachedAccessTokenProvider(AccessTokenProvider provider, long minimumTimeToLive, long refreshTimeout, long preemptiveRefresh, int refreshConstraintInPercent, boolean eager, ExecutorService executorService, boolean shutdownExecutorOnClose) Construct new instance, use a custom executor service.PreemptiveCachedAccessTokenProvider(AccessTokenProvider provider, long minimumTimeToLiveUnits, TimeUnit minimumTimeToLiveUnit, long refreshTimeoutUnits, TimeUnit refreshTimeoutUnit, long preemptiveTimeoutUnits, TimeUnit preemptiveTimeoutUnit, int refreshConstraintInPercent, boolean eager) Construct new instance. -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()createCacheItem(long time, AccessToken accessToken) getAccessToken(long time, boolean forceUpdate) protected ScheduledFuture<?>Return the executor service which services the background refresh.protected StringgetTime(long update) loadAccessTokenFromProvider(long time) protected voidpreemptiveRefresh(long time, AbstractCachedAccessTokenProvider.AccessTokenCacheItem cache, boolean forceRefresh) Preemptive update.protected voidMethods inherited from class org.entur.jwt.client.DefaultCachedAccessTokenProvider
getAccessTokenBlocking, getCachedAccessToken, getMinimumTimeToLive, getRefreshTimeoutMethods inherited from class org.entur.jwt.client.AbstractCachedAccessTokenProvider
getAccessToken, getCache, getCachedAccessTokenMethods inherited from class org.entur.jwt.client.BaseAccessTokenProvider
getHealth, getProvider, supportsHealth
-
Field Details
-
logger
protected static final org.slf4j.Logger logger
-
-
Constructor Details
-
PreemptiveCachedAccessTokenProvider
public PreemptiveCachedAccessTokenProvider(AccessTokenProvider provider, long minimumTimeToLiveUnits, TimeUnit minimumTimeToLiveUnit, long refreshTimeoutUnits, TimeUnit refreshTimeoutUnit, long preemptiveTimeoutUnits, TimeUnit preemptiveTimeoutUnit, int refreshConstraintInPercent, boolean eager) Construct new instance.- Parameters:
provider- Access-token providerminimumTimeToLiveUnits- minimum time to live (left when returned by AbstractCachedAccessTokenProvider.getAccessToken(boolean)).minimumTimeToLiveUnit- minimum time to live unitrefreshTimeoutUnits- cache refresh timeoutrefreshTimeoutUnit- cache refresh timeout unitpreemptiveTimeoutUnits- preemptive timeout. This parameter is relative to time to live, i.e. "15 seconds before timeout, refresh time cached value".preemptiveTimeoutUnit- preemptive timeout unitrefreshConstraintInPercent- constraint in percent, of a token's lifetime, before any preemptive refresh happenseager- preemptive refresh even if no traffic (schedule update)
-
PreemptiveCachedAccessTokenProvider
public PreemptiveCachedAccessTokenProvider(AccessTokenProvider provider, long minimumTimeToLive, long refreshTimeout, long preemptiveRefresh, int refreshConstraintInPercent, boolean eager) Construct new instance.- Parameters:
provider- Access-token providerminimumTimeToLive- minimum time to live (left when returned by AbstractCachedAccessTokenProvider.getAccessToken(boolean)).refreshTimeout- cache refresh timeout unit (in milliseconds)preemptiveRefresh- preemptive refresh limit (in milliseconds). This parameter is relative to time to live, i.e. "15000 milliseconds before token is invalid, refresh cached value".refreshConstraintInPercent- constraint in percent, of a token's lifetime, before any preemptive refresh happenseager- preemptive refresh even if no traffic (schedule update)
-
PreemptiveCachedAccessTokenProvider
public PreemptiveCachedAccessTokenProvider(AccessTokenProvider provider, long minimumTimeToLive, long refreshTimeout, long preemptiveRefresh, int refreshConstraintInPercent, boolean eager, ExecutorService executorService, boolean shutdownExecutorOnClose) Construct new instance, use a custom executor service.- Parameters:
provider- Access-token providerminimumTimeToLive- minimum time to live (left when returned by AbstractCachedAccessTokenProvider.getAccessToken(boolean)).refreshTimeout- cache refresh timeout unit (in milliseconds)preemptiveRefresh- preemptive timeout (in milliseconds). This parameter is relative to time to live, i.e. "15000 milliseconds before timeout, refresh time cached value".refreshConstraintInPercent- constraint in percent, of a token's lifetime, before any preemptive refresh happenseager- preemptive refresh even if no traffic (schedule update)executorService- executor serviceshutdownExecutorOnClose- Whether to shutdown the executor service on calls to close(..).
-
-
Method Details
-
getAccessToken
- Overrides:
getAccessTokenin classDefaultCachedAccessTokenProvider- Throws:
AccessTokenException
-
schedulePreemptiveRefresh
protected void schedulePreemptiveRefresh(long time, AbstractCachedAccessTokenProvider.AccessTokenCacheItem cache) -
loadAccessTokenFromProvider
protected AbstractCachedAccessTokenProvider.AccessTokenCacheItem loadAccessTokenFromProvider(long time) throws AccessTokenException - Overrides:
loadAccessTokenFromProviderin classDefaultCachedAccessTokenProvider- Throws:
AccessTokenException
-
preemptiveRefresh
protected void preemptiveRefresh(long time, AbstractCachedAccessTokenProvider.AccessTokenCacheItem cache, boolean forceRefresh) Preemptive update.- Parameters:
time- current timecache- current cache (non-null)forceRefresh- force refresh
-
createCacheItem
protected AbstractCachedAccessTokenProvider.AccessTokenCacheItem createCacheItem(long time, AccessToken accessToken) - Overrides:
createCacheItemin classDefaultCachedAccessTokenProvider
-
getExecutorService
Return the executor service which services the background refresh.- Returns:
- executor service
-
getTime
-
getEagerScheduledFuture
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classDefaultCachedAccessTokenProvider- Throws:
IOException
-