-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 12 posts ] 
Author Message
 Post subject: Ehcache und optimistic locks
PostPosted: Thu Mar 11, 2010 10:14 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,
ich habe einen Web-Service (Java, Spring, JPA, Hibernate, C3P0, Oracle).

Zu Testzwecken habe ich mir einen Beispiel-Client geschrieben, der mit mehreren Threads gleichzeitig auf den Webservice zugreift, um Konflikte zu provozieren.

Wenn ich keinen Second-Level-Cache verwende, dann entstehen auch die erwarteten Optimisticlock-Exceptions (StaleObjectStateException).

Wenn ich Ehcache aktiviere, dann entstehen diese Exceptions nicht und mehrere Threads schreiben parallel auf die Datenbank und der letzte gewinnt.

Ich habe einige Entitäten mit Cache(value=true) annotiert, welche fast nie geändert werden und daher ideal für einen second level cache währen.

Auszug aus persistence.xml

<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

<property name="hibernate.connection.isolation" value="2"/>

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_structured_entries" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>

ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">

<diskStore path="java.io.tmpdir/one"/>
<defaultCache

maxElementsInMemory="3000"
eternal="true"
overflowToDisk="false">
</defaultCache>

</ehcache>

Ich habe für ehcache die JMX-Überwachung aktiviert und kann sehen, daß für alle annotierten Klassen ein Cache angelegt wird und auch nur für die und dazu die zwei Standard-Caches, StandardQueryCache und UpdateTimestampsCache.

Die Klasse, für die ich Optimistick-Lock-Konflikte erwarte, ist natürlich nicht dabei.

Danke für alle Hinweise und Tips.

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Thu Mar 11, 2010 11:06 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Mit welcher CacheConcurrencyStrategy hast Du Deine Klassen annotiert ?
NONSTRICT_READ_WRITE, READ_WRITE, READ_ONLY oder TRANSACTIONAL ?

(Fuer Deinen konkreten Fall waeren naemlich nur erstere beide korrekt)


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Thu Mar 11, 2010 11:11 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Die Klasse, für die ich Optimistick-Lock-Konflikte erwarte, ist natürlich nicht dabei.


Mit READ_WRITE strategie solltest Du praktisch sogar jene Klasse die Du updatest fuer das 2L konfigurieren duerfen.

Quote:
und der letzte gewinnt.


Was passiert mit den anderen? Bekommen die eine Exception? Welche?


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Thu Mar 11, 2010 11:42 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,
@1
ich habe die Klassen nur mit der JPA-Annotation Cacheable annotiert.
Ich möchte auch keine hibernate-spezifischen Referenzen in die Entity-Klassen hineinziehen.
Daher weiß ich nicht, welche cache Strategie genommen wird.

@2
Eine Exception fliegt nicht.

Danke schon einmal für die schnelle Reaktion.

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Fri Mar 12, 2010 3:59 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
@1

Laut Buch 'Java Persistence with Hibernate' muessen die Klassen mit der hibernate-spezifischen Annotation
@org.hibernate.annotations.Cache annotiert werden. (Ueber die JPA annotation @Cacheable steht absolut nichts)

Quote:
Daher weiß ich nicht, welche cache Strategie genommen wird.

Das ist schlecht. Wahrscheinlich wird dann eben ein fall-back auf eine ungeeignete Strategie passieren.

Quote:
Ich möchte auch keine hibernate-spezifischen Referenzen in die Entity-Klassen hineinziehen.


Wo ist denn das Problem damit? (Man wechselt ja schliesslich den JPA-implementor nicht alle Tage)

N.B.: Betreffende Klassen hast Du nach wie vor mit einem @Version attribute versehen, richtig?


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Fri Mar 12, 2010 5:43 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,

[..]
>> Daher weiß ich nicht, welche cache Strategie genommen wird.

> Das ist schlecht. Wahrscheinlich wird dann eben ein fall-back auf eine ungeeignete Strategie passieren.

Kann man irgendwie feststellen, welche fall-back-Strategie er nimmt (vielleicht durch Debuggen an der richtigen Stelle)?

[..]
> Wo ist denn das Problem damit? (Man wechselt ja schliesslich den JPA-implementor nicht alle Tage)

Ich bin noch in einer recht frühen Projektphase und möchte mir noch die Option aufrechterhalten, einen anderen
JPA-Implementor zu wechseln.

> N.B.: Betreffende Klassen hast Du nach wie vor mit einem @Version attribute versehen, richtig?
Die Klassen, die nur einmal importiert werden und sich ansonsten nicht ändern, haben kein @Version-Attribut.

Alle anderen haben ein @Version-Attribut.

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Fri Mar 12, 2010 6:11 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Kann man irgendwie feststellen, welche fall-back-Strategie er nimmt (vielleicht durch Debuggen an der richtigen Stelle)?


Setzte jeweils einen Breakpoint auf der methode getCache in folgenden Klassen in package org.hibernate.cache:
NonstrictReadWriteCache
ReadOnlyCache
ReadWriteCache
TransactionalCache

Beim Debuggen solltest Du dann draufkommen welche fall-back-Strategie er nimmt.


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Mon Mar 15, 2010 4:00 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,

im Constructor von SessionFactoryImpl konnte ich dort, wo die entityPersisters-Map gefüllt wird,
feststellen, daß default-mäßig der READ_WRITE-Cache verwendet wird.

Dann habe ich herausgefunden, daß man den Default-Cache mittels
<property name="hibernate.cache.default_cache_concurrency_strategy" value="READ_ONLY"/>
einstellen kann und ich habe dann READ_ONLY gewählt.

Der Fehler blieb aber.

Ich hatte übrigens ganz vergessen, zu erwähnen, welche Versionen ich verwende:
Hibernate 3.5.0-CR-2
Ehcache 2.0.0
Vielleicht kommt es auch daher, daß Ehcache in der Version noch kein Release ist, und es ist noch ein einfach ein
Fehler.
Welche Alternativen könnte man statt Ehcache nehmen?

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Mon Mar 15, 2010 4:08 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Hallo,

also ich persoenlich verwende Hibernate 3.5.0-CR-2 und Ehcache 1.7.1 und habe dein Problem nicht.
Ich moechte Ehcache 2.0.0 noch in dieser Woche testen, dann sage ich Dir bescheid wie es bei mir klappt...

N.B.: Verwendest Du auch die neue Konfigurations-klasse hibernate.cache.region.factory_class ?

Code:
<property name="hibernate.cache.region.factory_class">
        net.sf.ehcache.hibernate.EhCacheRegionFactory
   </property>

oder

    <property name="hibernate.cache.region.factory_class">
        net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
    </property>


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Mon Mar 15, 2010 5:17 am 
Beginner
Beginner

Joined: Wed Feb 08, 2006 10:09 am
Posts: 28
Hallo,
ich verwende

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>

die neuen Klassen.

Ciao
Peter Schütt


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Mon Mar 15, 2010 10:28 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Quote:
Welche Alternativen könnte man statt Ehcache nehmen?


Also im Buch Java Pesistence with Hibernate sind weites noch folgende cache implementationen erwaehnt:
SwarmCache, OSCache, JBossCache (jetzt Infinispan).
Achtung: JBossCache und Infinispan verlangen allerdings Integration mit JTA.


Top
 Profile  
 
 Post subject: Re: Ehcache und optimistic locks
PostPosted: Mon Mar 15, 2010 11:40 am 
Expert
Expert

Joined: Tue Jun 16, 2009 3:36 am
Posts: 990
Hallo Peter,

also ich kann dein Problem nicht reproduzieren, bei mir kommt die StaleObjectStateException nach wie vor hoch:
Code:
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect):


ich benutze jetzt wie Du:


Hibernate 3.5.0-CR-2
Ehcache 2.0.0 (core distribution)
Code:
<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.default_cache_concurrency_strategy" value="READ_ONLY"/>


und habe einige Klassen mit Cacheable annotiert

Quote:
@Entity
@javax.persistence.Cacheable(value = true)


Verwendest Du JTA oder JDBCTransactionFactory ?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 12 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.