Hi Lin Lyu,
CacheInterceptor as many other parameters passed via CacheConfiguration
is not supposed to be changed when a cache has already been created.
So once set the interceptor will be used till the cache is destroyed.
I highly recommend not to change the interceptor through the private API
even if it works. It may lead to other issues that can happen here or
there in runtime or the API can be changed at any time.
Regards,
Denis
On 11/9/2015 3:35 PM, Me wrote:
Hi,
I found that I can access the real CacheConfiguration object with a
conversatation from IgniteCache to IgniteCacheProxy.
But is there any more graceful and less intrusive way to do the same thing?
public void testForInterpectorModifyDynamically()throws Exception {
IgniteCache<Integer, Person> cache =ignite1.getOrCreateCache(cache_name);
*// convert the cache object to IgniteCaceProxy and modify the config
in its context...*
*((IgniteCacheProxy) cache).context().config().setInterceptor(new
PersonalInterceptor(1));*
cache.put(1,new Person("Lin","Lyu"));
System.out.println(cache.get(1));
assertEquals("LYU", cache.get(1).getLastName());
}
Regards,
Lin Lyu
------------------ Original ------------------
*From: * "Me";<[email protected]>;
*Date: * Mon, Nov 9, 2015 07:21 PM
*To: * "user-ignite"<[email protected]>;
*Subject: * Re: How to filter the CacheInterceptor for a certain
cacheefficiently?
Hi Val,
Thank you for your nice reply. It works when I am creating one cache
with a certain CacheConfiguration with interceptor, But I don't know
how to changed the interceptor when the cache object is created.
PS: here is the code on creating a cache with interceptor.
public void testInterceptorWithConfigOnCreate()throws Exception {
CacheConfiguration cfg =new
CacheConfiguration();cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);//
required, but ATOMIC cfg.setName(cache_name);
cfg.setInterceptor(new PersonalInterceptor(1));// combined with given
interceptor ignite1.createCache(cfg);// create this cache with given name and
interceptor.
// NOTICE, the cfg will be cloned in the createCache/getOrCreateCache
final IgniteCache<Integer, Person> cache =ignite1.cache(cache_name);
Person p =new Person("Jason","Green");
cache.put(1,p);
Person out = cache.get(1);
assertEquals(p.getLastName().toUpperCase(), out.getLastName());
}
As I known, the CacheConfiguration object in the cache object is
different from what I created, and I haven't found the right way to
update the interceptor dynamically.
I have read some codes like
org/apache/ignite/internal/processors/cache/GridCacheOnCopyFlagAbstractSelfTest.java,
I think the method */used only in test
cases/*org.apache.ignite.testframework.junits.GridAbstractTest#getConfiguration(java.lang.String)
was hacked in
org.apache.ignite.internal.processors.cache.GridCacheOnCopyFlagAbstractSelfTest#cacheConfiguration,
so the instance of CacheConfigurations are the same object.
But I have no idea how to do this in a real production environment.
Hopes for you reply.
Thanks again.
Regards,
Lin Lyu.
------------------ Original ------------------
*From: * "vkulichenko";<[email protected]>;
*Date: * Sat, Nov 7, 2015 09:55 AM
*To: * "user"<[email protected]>;
*Subject: * Re: How to filter the CacheInterceptor for a certain
cacheefficiently?
Hi Lin Lyu,
Cahe interceptor is configured per cache (see
CacheConfiguration.setInterceptor() configuration property). So you don't
need to do any additional filtering, just set this configuration only for
one cache.
-Val
--
View this message in context:
http://apache-ignite-users.70518.x6.nabble.com/How-to-filter-the-CacheInterceptor-for-a-certain-cache-efficiently-tp1864p1878.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.