2011-01-08 9 views
4

Ich habe eine große Java-Anwendung, die für die Verwendung von JPA und Hibernate konfiguriert ist. Es ist auch so konfiguriert, dass ehacaching sowohl für das Entity als auch für das Query-Caching verwendet wird. Allerdings habe ich SQL-Logging aktiviert und keine Entitäten zwischengespeichert. Alle Entitätsabfragen finden bei jeder Anfrage statt.Wie ermittle ich programmatisch, wenn ehcache läuft?

Wie kann ich zur Laufzeit feststellen, ob es überhaupt ehcache gibt und ob es denkt, dass eine Entität cachefähig sein sollte?

Ich habe diese App nicht geschrieben, also stecke ich hier ein bisschen fest.

Es verwendet Deklarationen für das Caching der Klassen.

Es verwendet alle anderen Deklarationen korrekt, damit Hibernate die Lese-/Schreibvorgänge ausführen kann.

+0

ehcache nicht "run", es ist eine Bibliothek ist. Was fragst du? – skaffman

Antwort

1

Die kurze Antwort - ein Debugger.

Setzen Sie einen Haltepunkt, wo Sie eine Entity laden und folgen Sie ihm den Stapel. Sehen Sie, ob es jemals versucht, das Objekt von EHCache zu bekommen. Überprüfen Sie außerdem, ob es versucht, es in den Cache zu stellen, nachdem es es aus der DB abgerufen hat.

+0

Ich hatte gehofft, dies zu vermeiden, da ich es nicht heruntergeladen habe, etc ... Es scheint, dass ich Version 3.3.1 von Ehcache verwende. Ich konnte den Quellcode jedoch nicht finden. Du denkst also nicht, dass es eine Möglichkeit gibt, irgendeine Art von Logging einzurichten, so dass ich weiß, dass ehcache geladen und konfiguriert wurde? – Andrew

+0

@Andrew - Sie benötigen die EHCache-Quelle nicht, um festzustellen, ob sie im Debugger in einem Stapel angezeigt wird. Sie brauchen nur einen Haltepunkt. – rfeak

2

versuchen, etwas wie folgt aus:

List<CacheManager> tempManagers = CacheManager.ALL_CACHE_MANAGERS; 
System.out.println("# of CMs : " + tempManagers.size()); 
for (CacheManager tempCM : tempManagers) { 
     System.out.println("Got: " + tempCM.getName()); 
     String[] cacheNames = tempCM.getCacheNames(); 
     for (int i = 0; i < cacheNames.length; i++) { 
      String cacheName = cacheNames[i]; 
      System.out.println(cacheName+" - "+ tempCM.getEhcache(cacheName).getStatistics().toString()); 
     } 
} 
Verwandte Themen