-->
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.  [ 4 posts ] 
Author Message
 Post subject: Second Level Cache
PostPosted: Thu Mar 13, 2008 11:40 am 
Beginner
Beginner

Joined: Wed Jul 18, 2007 6:13 am
Posts: 28
Hi

Ich würde gerne den Second Level Cache aktivieren. Aber irgendwie funktioniert das noch nicht richtig :-(

Dazu habe ich folgende Einstellungen vorgenommen:

hibernate.cfg.xml
Code:
<property name="hibernate.generate_statistics">true</property>
<property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
<property name="hibernate.cache.use_second_level_cache">true</property> 



ehcache.xml

Code:
<ehcache>
   <defaultCache
      maxElementsInMemory="1000"
      eternal="true"
      timeToIdleSeconds="0"
      timeToLiveSeconds="0"
      overflowToDisk="false"
   />
   <cache name="persistenzschicht.Student"
      maxElementsInMemory="1000"
      eternal="true"
      timeToIdleSeconds="0"
      timeToLiveSeconds="0"
      overflowToDisk="false"
   />
</ehcache>


Student.java

Code:
@Entity
@Table(name = "STUDENT")
@Cache(usage=org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
public class Student {...}



Ich führe eine einfach Abfrage mehrmals in einer gleichen Session aus. Wenn ich mir dann die Statistiken angucke, wird folgendes angezeigt:

start time=1205421628482,
sessions opened=1,
sessions closed=0,
transactions=1,
successful transactions=1,
optimistic lock failures=0,
flushes=0,
connections obtained=1,
statements prepared=1,
statements closed=1,
second level cache puts=0,
second level cache hits=0,
second level cache misses=0,

entities loaded=0,
entities updated=0,
entities inserted=0,
entities deleted=0,
entities fetched=0,
collections loaded=0,
collections updated=0,
collections removed=0,
collections recreated=0,
collections fetched=0,
queries executed to database=1,
query cache puts=0,
query cache hits=0,
query cache misses=0,
max query time=172

Der Second Level Cache ist also nicht aktiv. Ich habe folgende Vermutung und würde gerne wissen, ob ich damit richtig liege.

Da ich jedes Mal die gleiche Abfrage in einer gleichen Session durchführe, wird nur auf den First Level Cache zugegriffen. Die Objekte werden daraus geladen und der Second Level Cache wird nicht beachtet.

Wenn ich mit dieser Vermutung richtig liege, müsste ich doch einen weiteren Thread erstellen, der eine neue Session öffnet. Dieser würde doch dann den Second Level Cache nutzen, oder?

Dann habe ich noch eine weitere Frage. Kann man in der ehcache.xml anstatt Klassen auch packages angeben. Also z.B.

<cache name="package"...

Danke!


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 18, 2008 8:11 am 
Expert
Expert

Joined: Thu Jul 05, 2007 9:38 am
Posts: 287
1. Du brauchst keinen zweiten Thread, es reicht völlig eine neue Session zu öffnen um den Cache zu testen.

2. der 2nd Level Cache cached erstmal nur Instanzen. Wenn du query results cachen willst, must du dies explizit aktivieren und bei den Queries angeben. In den meisten Scenarien bringt dies aber ziemlich wenig, da der Cache invalidiert wird, wenn ein Objekt der relevanten Klasse angefasst wird.

HTH

_________________
Please rate useful posts.


Schauderhaft: Softwaredevelopment, Projectmanagement, Qualitymanagement and all things "schauderhaft"


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 25, 2008 6:47 am 
Beginner
Beginner

Joined: Wed Jul 18, 2007 6:13 am
Posts: 28
Ist der Second Level Cache NUR für den Query Cache oder wie?


Top
 Profile  
 
 Post subject:
PostPosted: Tue Mar 25, 2008 2:55 pm 
Expert
Expert

Joined: Thu Jul 05, 2007 9:38 am
Posts: 287
Ne, der Second Level Cache ohne Query Cache cached nur die Zuordnung von IDs zu Objekten, d.h. er wird nur genutzt, wenn du per id auf ein Objekt zugreifst, z.B. bei session.load oder session.get.

Der query Cache wiederum cached die IDs, die von einem select zurückgeliefert werden und erzeugt mit Hilfe des 'normalen' 2nd Level Caches aus den IDs Objekte.

Jens

_________________
Please rate useful posts.


Schauderhaft: Softwaredevelopment, Projectmanagement, Qualitymanagement and all things "schauderhaft"


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 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.