[hibernate-dev] Re: JBoss Cache and Hibernate Integration
Max Rydahl Andersen
max.andersen at redhat.com
Tue Apr 10 02:52:16 EDT 2007
>>> But now looking back at #1, I am no longer certain of the conclusions;
>>> and to me the wiki did not make it clear to me what the "long term"
>>> solution was supposed to be (nor really what the "short term" solution
>>> is/was either). Anyone remember the specific conclusions with regards
>>> to this point?
>> Long-term:
>> In Hibernate - use seperate caches which you have done for 3.3
>> In JBoss Cache - as it stands now you would have to use differnt
>> jbosscache configurations.
>> In older versions of JBC you would need different treecache.xml; but
>> that has been simplified
>> in later JBC's AFAIK - Manik/galder ? Depending on this and wether
>> optimistic locking is a global
>> or node level-and-down setting users might need some less or more
>> complex "writing jbosscache config files
>> for hibernate" examples ;)
>> Short-term:
>> Write a cacheprovider that would use different jbosscaches for each
>> "type" of cache.
>> Not sure if that still makes sense.
>>
>
> Manik can better comment on plans for having separate configurations
> (e.g. optimistic vs pessimistic, invalidation vs replication) for
> different regions of the cache. But, I know it's not a soonish thing.
ok.
> That means if you want different behavior for the different "types" of
> caches you need separate caches. If the JGroups multiplexer is
> available, that's not too bad, as the caches can share a channel. If we
> think it through well, they can likely share an overall config file,
> with the different "types" just overriding a couple properties that are
> relevant.
sounds good. Could you provide an good default fallback setup for
hibernate to run with ?
> If the JGroups multiplexer isn't available then having a separate cache
> for each "type" is a royal pain, since you have multiple channels that
> need to have unique ports, etc. And we need to assume that the
> multiplexer won't be available in any non-JDK5 env, since the earliest
> JG release where it's reliable is 2.5.
So I guess we just won't have good jbosscache integration before 2.5;
similar that
it won't work good before Hibernate 3.3. Is that a problem ?
>>> Re: #4 : what exactly are these differences? Now is the time to merge
>>> it back...
>> I recall these as being Bryan 2 things:
>> 1) setting up JBC/Cacheprovider so it would use the correct
>> classloader when loading data from the cache.
>> 2) doing some "mutations"/magic-lookup of the cache region names to
>> know which classloader to use
>> (this might just me having nightmares, so need Bryan to certify ;) If
>> it's true we would
>> need to look into the practicallity of that solution.
>>
> The issue here is that if you send a message to replicate type Foo, on
> the remote node the thread coming up from JGroups that handles the
> message needs access to the Foo class in order to deserialize Foo and
> put it in the cache. Determining the correct classloader to use is a
> problem if the cache is shared between multiple deployments. There's a
> standard JBC API to handle this use case, as discussed at
> http://labs.jboss.com/file-access/default/members/jbosscache/freezone/docs/1.4.1/TreeCache/en/html/treecache_marshaller.html.
I understand that part.
> The fix I did was just to 1) have the org.hibernate.cache.Cache impl
> make use of this API and
Got it.
> 2) prevent replication of the org.hibernate.cache.StandardQueryCache
> region, since that region could be shared between multiple deployments
> and hence there's no 'correct' classloader.
eh - ok, sounds bad.
Isn't it better to just use hibernate.cache.region_prefix to disambiguate
the regions per sessionfactory ?
I don't think querycache region is the only one that would have problems
if you are using the
same physical cache for multiple sessionfactories. e.g. if a
org.company.model.Customer exists in both you would have troubles
with the entity cache.
> If we move to a mode where we have one cache (or set of caches) per
> deployment, then this kind of stuff becomes unnecessary. But, again,
> that requires the JGroups multiplexer.
Today you should not use the same cache across deployment; that's a big
nono.
The separation of caches has more to do with having different semantics
with respect
to replication, locking and put/remove operations.
>>> Re: #5 : what about the other solution I proposed where instead of
>>> registering synchs directly with the TC/TM, you instead delegate it to
>>> a strategy which can route the request back through Hibernate;
>>> Hibernate can then manage ordering the callbacks?
>> I don't recall more progress on that topic.
Don't forget this one - manik ? :)
/max
>> /max
>>
>>> Re: #6 : I'm actually in favor of just moving to the new (2.0) API;
>>> easier from a management perspective.
>>>> Ok, so my notes from the call, based on issues from the wiki
>>>>
>>>>
>>>> 1. Multiple caches will probably only formally make it in the next
>>>> major Hibernate release - 3.3.
>>>>
>>>> 2 Notes on putForExternalRead() functionality, in addition to the
>>>> solution presented on the wiki:
>>>> - PFER only goes through if node does not exist; no-op otherwise
>>>> - Force asynchronous mode for replication or invalidation to prevent
>>>> any blocking
>>>> - 0ms lock timeout to prevent any blocking here either. If this
>>>> fails, PFER is a no-op
>>>> - no to separate thread necessary, since we will be operating with a
>>>> 0ms timeout, async replication and a no-op if the node exists. The
>>>> only real chance of any blocking here is JGroups FC which is
>>>> considered small enough a case.
>>>>
>>>> 3. Since JBC 1.4.1.SP1, write locks are not acquired on parents when
>>>> adding or removing children, to be more accurate to repeatable read
>>>> semantics. WLs can still be acquired on parents if enabled in the
>>>> configuration (see "LockParentForChildInsertRemove" in
>>>> http://labs.jboss.com/file-access/default/members/jbosscache/freezone/docs/1.4.1.SP2/TreeCache/en/html/configuration.html,
>>>> which defaults to false). As such, this contention should no longer
>>>> be a problem.
>>>>
>>>> 4. Brian implemented for EJB3 clustering in AS 4.2, will make it's
>>>> way back into HIbernate in the 3.3 timeframe?
>>>>
>>>> 5. Do nothing for now since the urgency is removed. Only fails on
>>>> old versions of JBoss TS. In future (JBC 2.1 timeframe) look at what
>>>> the microcontainer has to offer with synchronisation registrations.
>>>>
>>>> 6. Coordination issue
>>>>
>>>> 7. Galder to come back with more details here, but general consensus
>>>> is not to perform transparent retries.
>>>> Feel free to add stuff I may have missed or further thoughts.
>>>> Very useful and productive call!
>>>>
>>>> Cheers,
>>>> Manik
>
>
--
--
Max Rydahl Andersen
callto://max.rydahl.andersen
Hibernate
max at hibernate.org
http://hibernate.org
JBoss a division of Red Hat
max.andersen at jboss.com
More information about the hibernate-dev
mailing list