[hibernate-dev] [infinispan-dev] [ISPN-6] (Infinispan cache provider for Hibernate) Remaining TODOs, notes and questions

Manik Surtani manik at jboss.org
Mon Aug 10 06:42:00 EDT 2009


On 8 Aug 2009, at 08:14, Galder Zamarreno wrote:

>
> On 08/07/2009 02:06 PM, Manik Surtani wrote:
>>
>> On 7 Aug 2009, at 12:51, Galder Zamarreno wrote:
>>
>>> Manik,
>>>
>>> While I working on this, I've noted the following. If we define
>>> default cache configurations for entity/query/...etc in an  
>>> infinispan
>>> configuration file, currently, they cannot be overriden afterwards
>>> programatically.
>>>
>>> IOW, imagine there's a cache named "entity" that applies to all
>>> entities in a sample infinispan-configs.xml and then someone  
>>> tweaks it
>>> in the hibernate config like this:
>>>
>>> hibernate.cache.infinispan.entity.eviction.wake_up_interval=3000
>>>
>>> The way I'd deal with this is that I'd create a Configuration with
>>> this new interval and call defineCache("entity", cfg). However, when
>>> the configuration file was processed, "entity" cache was added to  
>>> the
>>> configuration overrides and hence when I call defineCache with
>>> "entity", it throws DuplicateCacheNameException.
>>>
>>> So, I think DFC.initialize() shouldn't add such configurations to
>>> configuration overridesm map.
>>>
>>> Thoughts?
>>
>> Hmm. Perhaps what is needed is a mechanism to retrieve these
>> configurations and alter them. E.g.,
>>
>> CacheManager.getConfiguration(); // retrieves the default cfg
>> CacheManager.getConfiguration(String name);
>
> Yeah, without starting the cache! Right now, the only way to get a  
> configuration is after doing manager.getCache() which effectively  
> starts the cache and hence, the Configuration's ComponentRegistry is  
> in RUNNING mode, so you can't just clone it and modify it to be used  
> somewhere else. Even the clone is in running state and didn't find  
> an easy way to change that.
>
> There's a second possibility here too: My above suggestion won't  
> just work cos what defineCache("entity", cfg) does is take the  
> *default* cache configuration, apply the overrides and create one  
> with name "entity". But I want to do is: take the "entity" named  
> cache configuration, apply the overrides and create a brand new one  
> with the same name "entity". So, a method like this:
>
> defineCache(String cacheName, String baseNamedCache, Configuration  
> overrides).

That would work as well.  Javadocs need to be clear though as to what  
is cloned and ready for use, etc.

>
> So, then apart from doing defineCache("entity", "entity",  
> overrides), I could also do defineCache("com.acme.Person", "entity",  
> overrides). The latter would define a cache for com.acme.Person  
> entity type, based on "entity" named cache and applying overrides  
> defined via hibernate.cfg.xml
>
>>
>> These Configuration objects - built based on what's in the XML file -
>> can then be tweaked. These should be adequately javadoc'd to make it
>> clear that caches already started using such a configuration will  
>> not be
>> affected when a configuration changes.
>
> Indeed, getConfiguration() would return clones who's running state  
> has been cleared. Maybe Configuration.clone() should already be  
> doing that?

This should be true as well.  The state should never be cloned.

>
>>
>> I guess this also renders CacheManager.defineCache() API
>> useless/obsolete, since getConfiguration() should always return a
>> configuration, even if one didn't exist /wasn't defined in XML.
>
> Yeah, it's either enhanced defineCache() or getConfiguration(). I  
> think CacheManager.getConfiguration() is likely to be a more  
> powerful and simpler API than defineCache(*).

Well, I think we need both.

getConfiguration(String name) to retrieve a configuration template and  
modify it.
defineCache(String newName, String templateName, Configuration  
overrides) to create a new configuration based on an existing one.   
Maybe this name should change to something more intuitive?  Perhaps  
instead of defineCache, we have:

Configuration defineConfiguration(String configurationName,  
Configuration overrides) // registers and names a NEW configuration,  
based on the default cfg and the overrides passed in

Configuration defineConfiguration(String configurationName, String  
templateName, Configuration overrides) // registers and names a NEW  
configuration, based on an existing, predefined configuration and the  
overrides passed in

WDYT?

Cheers
--
Manik Surtani
manik at jboss.org
Lead, Infinispan
Lead, JBoss Cache
http://www.infinispan.org
http://www.jbosscache.org







More information about the hibernate-dev mailing list