Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проверить работает ли ehcache


Автор: Старовъръ 26.12.2009, 20:13
Подключил вот так ehcache:
Код
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
                <prop key="net.sf.ehcache.configurationResourceName">ehcache.xml</prop>
Содержимое этого конфига:
Код
<ehcache>
    <diskStore path="java.io.tmpdir/1" />

    <defaultCache maxElementsInMemory="500" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="240"
                  overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
                  memoryStoreEvictionPolicy="LRU" />
</ehcache>
Попробовал сохранить в БД 1000 объектов, потом вытащить их два раза, что с ehcache, что без него - результат одинаков. Как все же проверить работает ли ehcache?

Автор: goodday1941 26.12.2009, 20:33
продебажить

скорее всего не работает, я когда настроил его на одном проекте разница біла просто дико заметна

Автор: Старовъръ 26.12.2009, 21:11
Хм.. поставил breakpoints в классе net.sf.ehcache.hibernate.EhCacheProvider, там останавливается, однако скорость выборки от этого не увеличивается( Может я чего неверно сконфигурировал? Или неправильно тестирую? Я просто бросаю в БД 500 объектов, потом 1000 раз их выбираю..

Автор: dobrolub 26.12.2009, 21:12
думаю тебе поможет logging. глянь как там включается более подробный логгинг, включи по полной и почитай мессаги кэша.

Автор: Vasay 26.12.2009, 21:21
Старовъръ, 

БД (кстати, она на том же компьютере?) тоже может в памяти закэшировать, вот и не дает ehcache никакого прироста в скорости выборки.

Автор: Старовъръ 26.12.2009, 21:56
Цитата
думаю тебе поможет logging. глянь как там включается более подробный логгинг, включи по полной и почитай мессаги кэша.
Поставил ему DEBUG-уровень, молчит, зараза, как партизан.
Цитата
БД (кстати, она на том же компьютере?) тоже может в памяти закэшировать, вот и не дает ehcache никакого прироста в скорости выборки. 
Обнадеженный, что так оно и есть, попробовал соединиться с компом в сетке с такой же базой - результат остается неизменным.
Выложите свои конфигурации и скажите, может еще где-то нужно конфигурить, например, в hbm.xml файлах?

Автор: Vasay 26.12.2009, 22:08
Старовъръ, 

А что будет если сделать так:

Положить 500 элементов в БД. Запросить 500 элементов из программы, потом поменять один элемент в БД (не через свою программу), и снова запросить 500 элементов из своей программы? Получим первоначальные 500 элементов, или уже с измененным элементом?

Автор: dobrolub 27.12.2009, 04:04
Цитата(Старовъръ @ 26.12.2009,  21:56)
Цитата
думаю тебе поможет logging. глянь как там включается более подробный логгинг, включи по полной и почитай мессаги кэша.
Поставил ему DEBUG-уровень, молчит, зараза, как партизан.

Ну если молчит, и быстрее не стало, то наверно и не подключил её хай-бер-нэйт.

Автор: gelo86 27.12.2009, 12:12
Просто указать provider_class и ehcache.xml недостаточно. Хибернату надо указать какие класы и коллекшоны надо кешить.

Автор: goodday1941 28.12.2009, 00:14
к сожелению я настраивал эхкеш под ждбсшный проект, так что мои конфиги будут явно не к месту, а косаемо хибернейта, я когда-то смотрел в этом направлении и помоему одного конфига (судя по всяческой инфе в интернете) недостаточно

Автор: MisterCleric 28.12.2009, 14:29
Привет всем.

Старовъръ, хорошо, а ты сказал своим энтити, что они кешируемые? Например аннотацией
Код

@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)


Просто естественно, что не достаточно сказать, что использовать кеш и настроить дефолтный риджин, надо же еще сказать, а что будет ложится в кеш.

Автор: Старовъръ 28.12.2009, 15:10
Подхватывается все-таки ehcache, т.к. в приложении была ошибка в одном месте когда я установил, что кеш работает только для чтения. Однако прироста в скорости нет. В самом приложении не сравнить, а в тестах скорость все та же. 
Уже добавил в hbm.xml 
Код
<cache usage="read-write" include="all" />

Ставлю всем запросам setCacheable(true). Конфиг ehcache.xml теперь выглядит так:
Код
    <diskStore path="java.io.tmpdir/1" />

    <defaultCache maxElementsInMemory="5000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="240"
                  overflowToDisk="false" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
                  memoryStoreEvictionPolicy="LRU" />
    <cache name="org.hibernate.cache.UpdateTimestampsCache" maxElementsInMemory="10000" eternal="true"
           overflowToDisk="true" />
    <cache name="org.hibernate.cache.StandardQueryCache" maxElementsInMemory="5000" eternal="false"
           timeToLiveSeconds="120" overflowToDisk="true" />
    <cache name="FirstEntity" maxElementsInMemory="2000" eternal="false" timeToIdleSeconds="120"
           timeToLiveSeconds="120" overflowToDisk="true" />
    <cache name="SecondEntity" maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120"
           timeToLiveSeconds="120" overflowToDisk="true" />
    <cache name="ThirdEntity" maxElementsInMemory="10000" eternal="false"
           timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />
    <cache name="Entity.hisCollection" maxElementsInMemory="10000" eternal="false"
           timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />
Настройка Хиба:
Код
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
                <prop key="net.sf.ehcache.configurationResourceName">ehcache.xml</prop>
А ему все пофик. Вот http://forum.springsource.org/showthread.php?t=36790&page=2 у дядьки была такая же проблема, так говорит, когда без спринга попробовал - кеш заработал.. Но это как-то странно)

Автор: MisterCleric 28.12.2009, 15:18
Ану смотри здесь:
http://forum.springsource.org/showthread.php?t=77183&highlight=ehcache

Автор: Старовъръ 28.12.2009, 19:43
Не, там дядько нашел решение, однако сам не понял как и в чем оно заключалось...

Автор: Старовъръ 28.12.2009, 20:11
Разобрался. Я делал и занесение данных, и их извлечение в одной транзакции. Кеш не работает, видимо, с данными, которые не закомичены в БД.
Всем спасибо за помощь!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)