CacheResult is invoked a
GeneratedCacheKey will be generated and Cache#get(Object) is
called before the annotated method actually executes. If a value is found in the
cache it is returned and the annotated method is never actually executed. If no
value is found the annotated method is invoked and the returned value is stored
in the cache with the generated key.
Exceptions are not cached by default. Caching of exceptions can be enabled by
specifying an exceptionCacheName(). If an exception cache is specified
it is checked before invoking the annotated method and if a cached exception is
found it is re-thrown.
The cachedExceptions() and nonCachedExceptions() properties
can be used to control the exceptions are cached and those that are not.
To always invoke the annotated method and still cache the result set
skipGet() to true. This will disable the pre-invocation
Cache#get(Object) call. If exceptionCacheName() is
specified the pre-invocation exception check is also disabled. This feature is
useful for methods that create or update objects to be cached.
Example of caching the Domain object with a key generated from the
String and int parameters.
With no cacheName() specified a cache name of
"my.app.DomainDao.getDomain(java.lang.String,int)" will be generated.
package my.app;
public class DomainDao {
@CacheResult
public Domain getDomain(String domainId, int index) {
...
}
}
Example using the GeneratedCacheKey annotation so that only the domainId
parameter is used in key generation:
package my.app;
public class DomainDao {
@CacheResult
public Domain getDomain(@CacheKey String domainId, Monitor mon) {
...
}
}
If exception caching is enabled via specification of
exceptionCacheName() the following rules are used to determine if a
thrown exception is cached:
cachedExceptions() and nonCachedExceptions() are both
empty then all exceptions are cachedcachedExceptions() is specified and
nonCachedExceptions() is not specified then only exceptions
that pass an instanceof check against the cachedExceptions list are cachednonCachedExceptions() is specified and
cachedExceptions() is not specified then all exceptions
that do not pass an instanceof check against the nonCachedExceptions list are
cachedcachedExceptions() and nonCachedExceptions() are both
specified then exceptions that pass an instanceof check against the
cachedExceptions list but do not pass an instanceof check against the
nonCachedExceptions list are cachedCacheKey
| Modifier and Type | Method and Description |
|---|---|
| public Class | cachedExceptions()
Defines zero (0) or more exception |
| public Class | cacheKeyGenerator()
The |
| public String | |
| public Class | |
| public String | |
| public Class | nonCachedExceptions()
Defines zero (0) or more exception |
| public boolean | skipGet()
If set to true the pre-invocation |
| cachedExceptions | back to summary |
|---|---|
| public Class Defines zero (0) or more exception
| |
| cacheKeyGenerator | back to summary |
|---|---|
| public Class The
Defaults to a key generator that uses
| |
| cacheName | back to summary |
|---|---|
| public String cacheName() The name of the cache. If not specified defaults first toCacheDefaults#cacheName() and if
that is not set it defaults to:
package.name.ClassName.methodName(package.ParameterType,package.ParameterType)
| |
| cacheResolverFactory | back to summary |
|---|---|
| public Class The
The default resolver pair will resolve the cache by name from the default
| |
| exceptionCacheName | back to summary |
|---|---|
| public String exceptionCacheName() The name of the cache to cache exceptions. If not specified no exception caching is done.
| |
| nonCachedExceptions | back to summary |
|---|---|
| public Class Defines zero (0) or more exception
| |
| skipGet | back to summary |
|---|---|
| public boolean skipGet() If set to true the pre-invocation
If true and an Defaults to false.
| |