[
https://issues.jboss.org/browse/ISPN-1583?page=com.atlassian.jira.plugin....
]
Galder Zamarreño commented on ISPN-1583:
----------------------------------------
[~pferraro] Could you give us a concrete example of a custom implementation here? AFACIT,
if you end up delegating to the base cache instance, the flags should be transported fine,
so I was wondering what would you do differently.
AbstractDelegatingAdvancedCache with(ClassLoader), withFlags(Flag...)
logic is broken
-------------------------------------------------------------------------------------
Key: ISPN-1583
URL:
https://issues.jboss.org/browse/ISPN-1583
Project: Infinispan
Issue Type: Bug
Components: Core API
Affects Versions: 5.1.0.BETA5
Reporter: Paul Ferraro
Assignee: Galder Zamarreño
Fix For: 5.2.0.CR1, 5.2.0.Final
When the withFlags(...) logic was modified to use a DecoratedCache instead of
thread-local storage, any caches already decorated with the
AbstractDelegatingAdvancedCache(...) broke.
Take the following code:
AdvancedCache<K, V> baseCache;
AdvancedCache<K, V> customCache = new AbstractDelegatingAdvancedCache<K,
V>(baseCache) {
public void clear() {
// custom clear logic
}
};
customCache.withFlags(Flag.CACHE_MODE_LOCAL).clear();
In the above statement, the flag is not applied.
The call to withFlags(...) returns a reference to customCache, and the reference to
DecoratedCache containing the flags is lost to garbage collection.
In the case of with(ClassLoader) we have the opposite problem.
customCache.with(customClassLoader).clear();
In the above statement, the native clear() method is invoked instead of my custom clear()
method. with(ClassLoader) returns a reference to DecoratedCache. The clear() method then
operates on baseCache, instead of customCache.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira