QueryArgType - the type of the input actually used to query the data.
Note however, that this query uses
CachedLinkRequest<QueryArgType> as input.DataType - the type of the data to be retrieved. As with every
AsyncDataQuery, this type is strongly recommended to be immutable
or effectively immutable.public final class CachedAsyncDataQuery<QueryArgType,DataType> extends Object implements 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.
AsyncQueries.cacheLinks(AsyncDataQuery, int)
method.
| Modifier and Type | Method and Description |
|---|---|
Collection<QueryArgType> |
clearCache()
Removes every
AsyncDataLink instances from the cache currently
cached by this query. |
AsyncDataLink<DataType> |
createDataLink(CachedLinkRequest<QueryArgType> arg)
Returns an
AsyncDataLink which will provide data based on the
specified input. |
boolean |
removeFromCache(QueryArgType arg)
Removes a cached
AsyncDataLink which was cached by the specified
input. |
String |
toString()
Returns the string representation of this
AsyncDataQuery in no
particular format. |
public Collection<QueryArgType> clearCache()
AsyncDataLink instances from the cache currently
cached by this query. A subsequent retrieval request from the cache will
fail to find any required AsyncDataLink, therefore causing the
implementation to fallback to recreate the required AsyncDataLink
instance.
Note that this method takes linear time in the number of cached
AsyncDataLink instances.
clearCache in interface CachedLinkContainer<QueryArgType>AsyncDataLink instances
were cached before calling this method. This method never returns
null.public boolean removeFromCache(QueryArgType arg)
AsyncDataLink which was cached by the specified
input. A subsequent retrieval request from the cache requiring the
AsyncDataLink associated with the specified input will fail,
therefore causing the implementation to fallback to recreate the required
AsyncDataLink instance.removeFromCache in interface CachedLinkContainer<QueryArgType>arg - the input for which the associated AsyncDataLink is to
be removed from the cache. This argument can be null.true if an AsyncDataLink instance was cached for
the specified input, false otherwise. If this method returns
false, it did nothing because there was no
AsyncDataLink associated with the given input in the cache.public AsyncDataLink<DataType> createDataLink(CachedLinkRequest<QueryArgType> arg)
AsyncDataLink which will provide data based on the
specified input. The returned AsyncDataLink may be retrieved from
the cache rather than actually requesting it from the underlying
AsyncDataLink.
Regardless if the requested AsyncDataLink was cached or not, this
method returns immediately without blocking.
createDataLink in interface AsyncDataQuery<CachedLinkRequest<QueryArgType>,DataType>arg - the input argument which is to be used to retrieve the data.
This argument contains information about how the returned
AsyncDataLink may be cached and the actual
input which determines what
data is to be retrieved by the returned AsyncDataLink. This
argument cannot be null.AsyncDataLink which will provide data based on the
specified input. This method never returns null.NullPointerException - thrown if the specified argument is
nullpublic String toString()
AsyncDataQuery in no
particular format.
This method is intended to be used for debugging only.