이 콘텐츠는 선택한 언어로 제공되지 않습니다.
1.3. The AdvancedCache Interface
AdvancedCache
interface, geared towards extending JBoss Data Grid, in addition to its simple Cache Interface. The AdvancedCache
Interface can:
- Inject custom interceptors
- Access certain internal components
- Apply flags to alter the behavior of certain cache methods
AdvancedCache
:
AdvancedCache advancedCache = cache.getAdvancedCache();
AdvancedCache advancedCache = cache.getAdvancedCache();
1.3.1. Flag Usage with the AdvancedCache Interface 링크 복사링크가 클립보드에 복사되었습니다!
AdvancedCache.withFlags()
to apply any number of flags to a cache invocation.
Example 1.4. Applying Flags to a Cache Invocation
advancedCache.withFlags(Flag.CACHE_MODE_LOCAL, Flag.SKIP_LOCKING) .withFlags(Flag.FORCE_SYNCHRONOUS) .put("hello", "world");
advancedCache.withFlags(Flag.CACHE_MODE_LOCAL, Flag.SKIP_LOCKING)
.withFlags(Flag.FORCE_SYNCHRONOUS)
.put("hello", "world");
1.3.2. Custom Interceptors and the AdvancedCache Interface 링크 복사링크가 클립보드에 복사되었습니다!
AdvancedCache
Interface provides a mechanism that allows advanced developers to attach custom interceptors. Custom interceptors can alter the behavior of the Cache API methods and the AdvacedCache
Interface can be used to attach such interceptors programmatically at run time.
1.3.3. Custom Interceptors 링크 복사링크가 클립보드에 복사되었습니다!
1.3.3.1. Custom Interceptor Design 링크 복사링크가 클립보드에 복사되었습니다!
- A custom interceptor must extend the
CommandInterceptor
. - A custom interceptor must declare a public, empty constructor to allow for instantiation.
- A custom interceptor must have JavaBean style setters defined for any property that is defined through the
property
element.
1.3.3.2. Adding Custom Interceptors Declaratively 링크 복사링크가 클립보드에 복사되었습니다!
Procedure 1.1. Adding Custom Interceptors
Define Custom Interceptors
All custom interceptors must extend org.jboss.cache.interceptors.base.CommandInterceptor. Use the customInterceptors method to add custom interceptors to the cache:<namedCache name="cacheWithCustomInterceptors"> <customInterceptors>
<namedCache name="cacheWithCustomInterceptors"> <customInterceptors>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Define the Position of the New Custom Interceptor
Interceptors must have a defined position. Valid options are:FIRST
- Specifies that the new interceptor is placed first in the chain.LAST
- Specifies that the new interceptor is placed last in the chain.OTHER_THAN_FIRST_OR_LAST
- Specifies that the new interceptor can be placed anywhere except first or last in the chain.
<namedCache name="cacheWithCustomInterceptors"> <customInterceptors> <interceptor position="FIRST" class="com.mycompany.CustomInterceptor1">
<namedCache name="cacheWithCustomInterceptors"> <customInterceptors> <interceptor position="FIRST" class="com.mycompany.CustomInterceptor1">
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Define Interceptor Properties
Define specific interceptor properties.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Apply Other Custom Interceptors
In this example, the next custom interceptor is called CustomInterceptor2.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Define the
index
,before
, andafter
Attributes.- The
index
identifies the position of this interceptor in the chain, with 0 being the first position. This attribute is mutually exclusive withposition
,before
, andafter
. - The
after
method places the new interceptor directly after the instance of the named interceptor specified via its fully qualified class name. This attribute is mutually exclusive withposition
,before
, andindex
. - The
before
method places the new interceptor directly before the instance of the named interceptor specified via its fully qualified class name. This attribute is mutually exclusive withposition
,after
, andindex
.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Note
1.3.3.3. Adding Custom Interceptors Programmatically 링크 복사링크가 클립보드에 복사되었습니다!
AdvancedCache
.
Example 1.5. Obtain a Reference to the AdvancedCache
CacheManager cm = getCacheManager(); Cache aCache = cm.getCache("aName"); AdvancedCache advCache = aCache.getAdvancedCache();
CacheManager cm = getCacheManager();
Cache aCache = cm.getCache("aName");
AdvancedCache advCache = aCache.getAdvancedCache();
addInterceptor()
method to add the interceptor.
Example 1.6. Add the Interceptor
advCache.addInterceptor(new MyInterceptor(), 0);
advCache.addInterceptor(new MyInterceptor(), 0);
1.3.4. Other Management Tools and Operations 링크 복사링크가 클립보드에 복사되었습니다!
1.3.4.1. Accessing Data via URLs 링크 복사링크가 클립보드에 복사되었습니다!
put()
and post()
methods place data in the cache, and the URL used determines the cache name and key(s) used. The data is the value placed into the cache, and is placed in the body of the request.
GET
and HEAD
methods are used for data retrieval while other headers control cache settings and behavior.
Note
1.3.4.2. Limitations of Map Methods 링크 복사링크가 클립보드에 복사되었습니다!
size()
, values()
, keySet()
and entrySet()
, can be used with certain limitations with Red Hat JBoss Data Grid as they are unreliable. These methods do not acquire locks (global or local) and concurrent modification, additions and removals are excluded from consideration in these calls. Furthermore, the listed methods are only operational on the local cache and do not provide a global view of state.
From Red Hat JBoss Data Grid 6.3 onwards, the map methods size()
, values()
, keySet()
, and entrySet()
include entries in the cache loader by default whereas previously these methods only included the local data container. The underlying cache loader directly affects the performance of these commands. As an example, when using a database, these methods run a complete scan of the table where data is stored which can result in slower processing. Use Cache.getAdvancedCache().withFlags(Flag.SKIP_CACHE_LOAD).values()
to maintain the old behavior and not loading from the cache loader which would avoid the slower performance.