2011-01-08 2 views
4

У меня есть большое приложение Java, которое настроено на использование JPA и Hibernate. Предполагается также, что он использует ehcaching для кэширования объектов и запросов. Тем не менее, у меня включен учет sql, и никакие объекты не кэшируются. Все запросы сущностей происходят по каждому запросу.Как определить программно, если ehcache запущен?

Как определить во время выполнения, если он даже запускает ehcache и считает ли он, что объект должен быть кэшируемым?

Я не писал это приложение, поэтому я немного застрял здесь.

В нем используются объявления для кэширования классов.

Правильно использовать все другие декларации для Hibernate для выполнения операций чтения/записи.

+0

Ehcache не "бежать", это библиотека. Что ты спрашиваешь? – skaffman

ответ

1

Короткий ответ - отладчик.

Поместите точку останова, где вы загружаете объект и следуете за ним в стеке. Посмотрите, пытается ли он даже попытаться получить объект из EHCache. Кроме того, проверьте, пытается ли он поместить его в кеш после того, как он извлечет его из базы данных.

+0

Я надеялся избежать этого, так как я его не загрузил и т. Д. Кажется, я использую версию 3.3.1 ehcache. Однако я не смог найти исходный код. Таким образом, вы не думаете, что есть способ настроить какой-то журнал, чтобы я знал, что он даже загружен и настроен ehcache? – Andrew

+0

@Andrew - вам не нужен источник EHCache, чтобы узнать, отображается ли он в стеке в отладчике. Вам просто нужна точка останова. – rfeak

2

попробовать что-то вроде этого:

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()); 
     } 
}