[hibernate-dev] @Cacheable
Emmanuel Bernard
emmanuel at hibernate.org
Thu Jul 16 09:27:21 EDT 2009
On Jul 15, 2009, at 22:01, Steve Ebersole wrote:
> On Wed, 2009-07-15 at 16:26 -0400, Emmanuel Bernard wrote:
>> The spec made an incursion into caching metadata and allow to cache
>> some classes and not others. So far so good. But that includes the
>> scenario where these classes are inside the same class hierarchy
>>
>> Case 1
>>
>> @Cacheable(false)
>> class Person {}
>>
>> @Cacheable(true)
>> class customer extends Person {}
>>
>> Case 2
>>
>> @Cacheable(true)
>> class Person {}
>>
>> @Cacheable(false)
>> class customer extends Person {}
>>
>> Can we support that?
> We store hierarchy in a single region based on the root entity. In
> other words, in this case Person is root entity; that is the cache
> region for both Person and for Customer in this example. That's what
> allows us to serve from the cache properly when they say "load
> Person X"
> given that that data might identify either a Person or a Customer.
> Supporting this mixing would destroy that Hibernate feature and take a
> lot of time to do so to boot.
Let me try and parse that properly.
Let's assume two scenarii:
1. we still enforce one region per class hierarchy
in this case, would it hurt to have a given class / subclass not
cached whereas others are?
we are still looking for a single region
2. we don't enforce one region per class hierarchy
in this case, we need to precompute the list of regions for a given
class hierarchy and ask each region to answer the question the way
Hibernate does today.
I can see that as slow(er)
Also you have more regions to start and that's the slowness you are
referring to at boot time, right?
>
>> Second problem, they want "easy" caching ootb but do not define
>> caching strategies. What would be a good caching strategy default
>> if a
>> class is marked as cached but no caching strategy is defined?
> Well the answer as to the best default AccessStrategy to use is
> unfortunately going to depend. It depends on the RegionFactory
> defined
> and various other configuration choices.
>
> Let's assume that user still needs to define the RegionFactory. I can
> see delegating this choice to the defined RegionFactory. It would
> still
> depend on other variables like are we using some form of JTA-based
> transactions and have access to the TransactionManager, etc. But its
> much better than Hibernate code needing to intrinsically understand
> the
> capabilities of all RegionFactory impls (what about a custom
> RegionFactory???). Maybe this looks something like a new
> RegionFactory
> method: AccessType getDefaultAccessType(???) (AccessType is the enum
> for
> TRANSACTIONAL, READ_ONLY, etc). Not sure what all we would need to
> pass
> in to the method; probably the TransactionFactory and the
> TransactionmanagerLookup; others?
I am concerned about the idea of having this value changing depending
on your environment (JTA or not).
Do you think this will provide values to customers or is it a
marketing / shineware feature.
>
>
> --
> Steve Ebersole <steve at hibernate.org>
> Hibernate.org
>
More information about the hibernate-dev
mailing list