Class CachedAsyncDataQuery<QueryArgType,DataType>
- Type Parameters:
QueryArgType- the type of the input actually used to query the data. Note however, that this query usesCachedLinkRequest<QueryArgType>as input.DataType- the type of the data to be retrieved. As with everyAsyncDataQuery, this type is strongly recommended to be immutable or effectively immutable.
- All Implemented Interfaces:
AsyncDataQuery<CachedLinkRequest<QueryArgType>,,DataType> CachedLinkContainer<QueryArgType>
AsyncDataQuery which caches AsyncDataLink
instances based on the input of the query. That is, this query may return the
same AsyncDataLink for the same input (based on equals).
The data provided by the AsyncDataLink instances are not cached by
this query. Those can be cached by using the
AsyncQueries.cacheResults
method.
This query caches only at most a specified number of AsyncDataLink
instances and when this limit is exceeded, the one used least recently
is discarded from the cache. Also a lease time can be specified when
requesting an AsyncDataLink when it must be removed from the cache
and the AsyncDataLink needs to be recreated if requested again.
Note that it is possible to manually remove cached items from the
returned AsyncDataQuery using its
clearCache and
removeFromCache
methods.
Creating instances
It is not possible to directly instantiate this class, to create instances of this class use theAsyncQueries.cacheLinks(AsyncDataQuery, int)
method.
Thread safety
This class is safe to be used by multiple threads concurrently.Synchronization transparency
This class is not synchronization transparent but methods of this class return reasonably fast. That is, they can be executed by methods need to be responsive (e.g.: listeners, methods called on the AWT event dispatch thread).-
Method Summary
Modifier and TypeMethodDescriptionRemoves everyAsyncDataLinkinstances from the cache currently cached by this query.Returns anAsyncDataLinkwhich will provide data based on the specified input.booleanRemoves a cachedAsyncDataLinkwhich was cached by the specified input.toString()Returns the string representation of thisAsyncDataQueryin no particular format.
-
Method Details
-
clearCache
Removes everyAsyncDataLinkinstances from the cache currently cached by this query. A subsequent retrieval request from the cache will fail to find any requiredAsyncDataLink, therefore causing the implementation to fallback to recreate the requiredAsyncDataLinkinstance.Note that this method takes linear time in the number of cached
AsyncDataLinkinstances.- Specified by:
clearCachein interfaceCachedLinkContainer<QueryArgType>- Returns:
- the collection of inputs whose
AsyncDataLinkinstances were cached before calling this method. This method never returnsnull.
-
removeFromCache
Removes a cachedAsyncDataLinkwhich was cached by the specified input. A subsequent retrieval request from the cache requiring theAsyncDataLinkassociated with the specified input will fail, therefore causing the implementation to fallback to recreate the requiredAsyncDataLinkinstance.- Specified by:
removeFromCachein interfaceCachedLinkContainer<QueryArgType>- Parameters:
arg- the input for which the associatedAsyncDataLinkis to be removed from the cache. This argument can benull.- Returns:
trueif anAsyncDataLinkinstance was cached for the specified input,falseotherwise. If this method returnsfalse, it did nothing because there was noAsyncDataLinkassociated with the given input in the cache.
-
createDataLink
Returns anAsyncDataLinkwhich will provide data based on the specified input. The returnedAsyncDataLinkmay be retrieved from the cache rather than actually requesting it from the underlyingAsyncDataLink.Regardless if the requested
AsyncDataLinkwas cached or not, this method returns immediately without blocking.- Specified by:
createDataLinkin interfaceAsyncDataQuery<QueryArgType,DataType> - Parameters:
arg- the input argument which is to be used to retrieve the data. This argument contains information about how the returnedAsyncDataLinkmay be cached and the actualinputwhich determines what data is to be retrieved by the returnedAsyncDataLink. This argument cannot benull.- Returns:
- the
AsyncDataLinkwhich will provide data based on the specified input. This method never returnsnull. - Throws:
NullPointerException- thrown if the specified argument isnull
-
toString
Returns the string representation of thisAsyncDataQueryin no particular format.This method is intended to be used for debugging only.
-